51单片机设计的电子密码锁
该程序是基于51单片机设计的电子密码锁,功能较为简单,目前仅有修改密码和检测这一功能,以下是操作过程
运行仿真的初始界面
左边矩阵按键从左边第一行第一列起为0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
按下按键后界面如下,当四位数码管都显示后,按下矩阵键盘上任意按键确认密码
密码错误D1红灯亮起,密码正确D2绿灯亮起
当按下独立按键时,中断触发,进入密码修改,此时界面如同初始界面,输入原始密码,原始密码正确,绿灯亮起,等待输入新密码,此时界面显示原始密码。原始密码错误红灯亮起,退出修改,返回初始状态。
新密码输入会将原始密码覆盖,输入完成红绿灯同时亮起。
1s后返回初始界面,密码修改完成。
单片机源程序如下:
#include “reg51.h” //包含头文件
#define uchar unsigned char
#define uint unsigned int
#define DIG P0
#define keys P1
sbit LSA=P2^1;
sbit LSB=P2^2;
sbit LED_Green=P2^3;
sbit LED_Red=P2^4;
uchar time=0,state;
uchar disp[4]={0xbf,0xbf,0xbf,0xbf};
uchar smgduan[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //数码管段选表,共阳数码管
uchar password[4]={0xf9,0xf9,0xa4,0x90}; //初始密码1129
void delay_ms(uint t); //函数声明
void keys_scan();
void digdisp();
void Init();
void delay_ms(uint t) //延时函数
{
uchar i;
for(;t>0;t–)
{
for(i=0;i<125;i++);
}
}
void keys_scan() //矩阵按键扫描
{
uchar i,k;
keys=0xf0;
if(keys!=0xf0)
{
delay_ms(2);
if(keys!=0xf0)
{
switch(keys) //确定行
{
case(0x70):
k=0;break;
case(0xb0):
k=4;break;
case(0xd0):
k=8;break;
case(0xe0):
k=12;break;
}
keys=0x0f;
if(keys!=0x0f)
{
switch(keys) //确定列
{
case(0x07):
;break;
case(0x0b):
k=k+1;break;
case(0x0d):
k=k+2;break;
case(0x0e):
k=k+3;break;
}
}
while(keys!=0x0f); //松手检测
disp[time]=smgduan[k]; //将键值对应的段选码送入显示数组
time++; //按键次数检测
if((time>4)&&(state!=1)) //检测四位密码是否全部输入
{
time=0;
for(i=0;i<4;i++)
{
if(disp[i]!=password[i]) //逐位检测输入密码是否正确
{
LED_Green=1; //输入密码不正确,红灯点亮
LED_Red=0;
break;
}
if(i==3) //输入密码正确绿灯点亮
{
LED_Green=0;
LED_Red=1;
}
}
delay_ms(1000); //延时1s
}
}
}
digdisp();
关键字: 编辑:什么鱼 引用地址: 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。