欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > AVR128单片机密码锁

AVR128单片机密码锁

2025/4/5 13:05:27 来源:https://blog.csdn.net/bbxyliyang/article/details/146988038  浏览:    关键词:AVR128单片机密码锁

1、密码锁控制使用4X4键盘,显示使用LCD芯片LM016L或LM016L。
2、设定的初始密码是6位阿拉伯数字123456。
3、当逐位输入密码时,在LCD上逐一显示当前数字,并将前一位显示的数字改为号,同时在LCD上显示当前为第几次输入密码。(例密码123456,输入时LCD上分别显示为1;2;3;4;5;6;确认键按下后显示为。)
4、当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用发光二极管长亮一秒钟作为提示,并在LCD上做相应的提示。
5、若密码不正确,则可以重新输入密码,如连续三次输入错误,则禁止输入,并有连续一分钟的报警声,并在LCD上做相应的提示。
6、所用时间间隔用ATmega128的定时器完成。
在这里插入图片描述
部分程序:
//
************************************************************
// 键盘扫描子程序,采用逐键扫描的方式
//**********************************************************************
uchar Key_DownScan(void)
{
uchar statevalue,key_checkin,key_check;
key_io=0xf0; //在IO口由输出方式变为输入方式时要延迟一个周期
key_io=0xf0; //采取写两次的方法延时
key_checkin=key_ior; //读取IO口状态,判断是否有键按下
if(key_checkin!=0xf0) //IO口值发生变化则表示有键按下
{
delay_nms(20); //键盘消抖,延时20MS
key_checkin=key_ior;
if(key_checkin!=0xf0)
{

   key_io=0xfe;                 //逐行扫描开始key_io=0xfe;                 //写两次延时,下同key_check=key_ior;KeyLock  = 1;   //  按键按下过switch (key_check)           //根据读到的IO口值判断按键的按下情况{case 0xee:key=15;break;case 0xde:key=11;break;case 0xbe:key=8;break;case 0x7e:key=4;break;}key_io=0xfd;key_io=0xfd;key_check=key_ior;switch (key_check){case 0xed:key=14;break;case 0xdd:key=10;break;case 0xbd:key=7;break;case 0x7d:key=3;break;}key_io=0xfb;key_io=0xfb;key_check=key_ior;switch (key_check){case 0xeb:key=13;break;case 0xdb:key=0;break;case 0xbb:key=6;break;case 0x7b:key=2;break;}key_io=0xf7;key_io=0xf7;key_check=key_ior;switch (key_check){case 0xe7:key=12;break;case 0xd7:key=9;break;case 0xb7:key=5;break;case 0x77:key=1;break;}}

}
else
{
if(KeyLock == 1)
{
KeyLock = 0;
KeyFlag = 1; // 有按键按下
}
statevalue=0xff; //无按键时返回值
key=statevalue;
return(key);
}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词