0
点赞
收藏
分享

微信扫一扫

项目三简易计算器 任务3-5六位密码锁

任务描述:单片机连接8位共阳极数码管和4*4矩阵键盘,

    编程完成一位密码校验,结果正确显示“HELLO”,结果错误显示“ERROR”

项目三简易计算器  任务3-5六位密码锁_矩阵键盘

项目三简易计算器  任务3-5六位密码锁_单片机_02

/*************************
项目名称:项目三简易计算器
任务名称:任务3-5六位密码锁
任务描述:单片机连接8位共阳极数码管和4*4矩阵键盘,
					编程完成一位密码校验,结果正确显示“HELLO”,结果错误显示“ERROR”
姓名日期:物联网2202黄杉,2024-04-19
*************************/
#include<reg51.h>
#include<intrins.h>
//51单片机寄存器定义头文件
sbit row0=P1^0;
sbit row1=P1^1;
sbit row2=P1^2;
sbit row3=P1^3;
sbit col0=P1^4;
sbit col1=P1^5;
sbit col2=P1^6;
sbit col3=P1^7;
int n;//存放按键编号(用户输入的密码)
int t;//存放系统预留密码
int m1[]={0x89,0x86,0xc7,0xc7,0xc0};//HELLO
int m2[]={0x86,0x88,0x88,0xc0,0x88};//ERROR
int dis[2];//存放结果的十位和个位
int seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//定义0~9共阳极七段码
void key1();//等待按键按下,无限查询
void key2();//扫描按键位置,行列扫描
void key3();//处理按键请求,显示编号
void display();//显示HELLO或者ERROR
/**********************************************/
void delay(int i)
{
	int k,j;
	for(k=0;k<i;k++)
		for(j=0;j<100;j++);
}
/**********************************************/
void main()
{
	while(1)
	{
		key1();
		key2();
		key3();
	}
}
/**********************************************/
void key1()
{
	while(1)
	{
		P1=0x0f;
		if(P1!=0x0f)//有变化,一定是有按键按下,导致某行某列短路
			delay(10);//延时10毫秒,去掉按键抖动
			if(P1!=0x0f)
				break;//退出查询
	}
}
/**********************************************/
void key2()
{
	P1=0xff;//行列都写1
	col0=0;//清零0列
	if(row0==0) n=0;
	if(row1==0) n=1;
	if(row2==0) n=2;
	if(row3==0) n=3;
	
	P1=0xff;//行列都写1
	col1=0;//清零1列
	if(row0==0) n=4;
	if(row1==0) n=5;
	if(row2==0) n=6;
	if(row3==0) n=7;
	
	P1=0xff;//行列都写1
	col2=0;//清零2列
	if(row0==0) n=8;
	if(row1==0) n=9;
	
	if(row3==0){t=n;n=10;}//确认键:保存用户输入密码,键值10
}
/**********************************************/
void key3()
{
	if(n<10)//按下数字键,显示数字
	{
	P2=0xfe;//1111 1110
	P0=seg[n];
	}
	else//按下等号键
		display();//显示两位结果
}
/**********************************************/
void display()
{
	int i,j;
	
	while(1)
	{
		for(i=0,j=0x7f;i<5;i++)//0111 1111
		{
			P2=j;
			if(t==7)
				P0=m1[i];//取HELLO
			else
				P0=m2[i];//ERROR
			delay(2);
			j=_cror_(j,1);
		}
	}
}

举报

相关推荐

0 条评论