当前位置: 首页 > news >正文

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);
}
}

相关文章:

  • 建设人才网站跨境电商培训
  • asp.net做学校网站首页有利于seo优化的是
  • 自己做网站送外卖中国女排联赛排名
  • 网站目录怎么做百度手机助手免费下载
  • 网站欣赏网站seo每日一贴
  • 孝感织云网站建设软件推广平台有哪些
  • Flink在双流Join中,window如何选择
  • 【HCIA】静态综合实验练习笔记
  • JavaEE初阶复习(JVM篇)
  • 软考中级电子商务设计师分值分布解析!附最新备考资源!
  • Spark,上传文件
  • Spring | Spring、Spring MVC 和 Spring Boot 的区别
  • IntelliJ IDEA 2024.1.4 (Ultimate Edition)找不到Add Framework Support解决方法
  • 【diffusers 进阶(十五)】dataset 工具,Parquet和Arrow 数据文件格式,load dataset 方法
  • XT1870 同步升压 DC-DC 变换器
  • WebView加载URL时添加时间戳可以防止缓存问题方案
  • ceph数据迁移数据迁移与bacula配置调整优化实战
  • WindTerm快速更改主密码
  • Nextjs15 实战 - React Notes 项目初始化
  • Java学习总结-字符流
  • 通过案例初步认识机器学习
  • Linux 基础入门操作 第九章 进程之间通讯信号量 2
  • Scala(五)
  • 【Anaconda环境绑定指南】3步将自定义环境注入Jupyter Notebook 内核 | 附详细命令与演示
  • [Redis]Redis学习开篇概述
  • Linux 容器环境磁盘空间不足问题及解决方案