单片机电子密码锁LCD1602显示
更新时间:2023-05-13 19:57:01 阅读量: 实用文档 文档下载
- 单片机电子密码锁设计推荐度:
- 相关推荐
单片机电子密码锁其电路图连接如下:本人已经用硬件实
验,程序可用。正确~~
本程序特点:装载后读者可以自改密码,然后需要再次载入程序时: 可以把主程序aa=Sendstring(0xa0,1,table2,6);这一句去掉。然后程序的电子锁密码就是你个人设置的密码。
程序代码为:
#include<reg51.h> #include<string.h> #include<intrins.h>
#define uchar unsigned char #define uint unsigned int
#define LCDIO P2
#define delay4us() _nop_();_nop_();_nop_();_nop_(); uchar buffer[6]={0}; sbit sda=P3^7; sbit scl=P3^6; sbit beep=P3^5; bit flag=0,aa; //用户蹲渊义定时溢出标志位 uchar DSY_BUFFER[16]=" "; uchar DSY_BUFFER1[16]=" "; uchar Userpassword[6]={0};
sbit rs=P0^4; sbit rd=P0^3; sbit lcden=P0^2; sbit led=P3^0;
uchar code table2[]="123456";
uchar code table[]="Your Password..."; void delayms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }
void delay() //短延时,两个机器周期,做总线的延时用 {;;}
void write_com(uchar com) { rs=0; rd=0; lcden=0; P2=com; delayms(3); lcden=1; delayms(3); lcden=0; }
void write_date(uchar date) { rs=1; rd=0; lcden=0; P2=date; delayms(3); lcden=1; delayms(3); lcden=0; }
void Display_String(uchar *p,uchar com) { uchar i;
write_com(com); for(i=0;i<16;i++) {
write_date(p[i]); }
}
void init_lcd() { lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80);
Display_String(table,0x80); Display_String("Lock OK! }
void start() { sda=1; scl=1; delay4us(); sda=0; delay4us(); scl=0; }
void stop() { sda=0; scl=1; delay4us(); sda=1; delay4us(); scl=0; }
void init() {
sda=1; delay(); scl=1; delay(); }
void ack() { sda=0; scl=1;
",0xc0); //初始化
scl=0; sda=1; }
void noack() { sda=1; scl=1; delay4us(); scl=0; sda=0; }
uchar recbyte() { uchar i,rd; rd=0x00; sda=1; for(i=0;i<8;i++) { scl=1; rd<<=1; rd|=sda; delay4us(); scl=0; delay4us(); } scl=0; delay4us(); return rd; }
uchar sendbyte(uchar wd) { uchar i; bit ack0; for(i=0;i<8;i++) { sda=(bit)(wd&0x80); _nop_(); _nop_(); scl=1; delay4us(); scl=0; wd<<=1; }
sda=1; scl=1; delay4us(); ack0=!sda; scl=0; delay4us(); return ack0; }
uchar Recstring(uchar slave,uchar subaddr,uchar *buffer,uchar n) {
uchar i; start();
if(!sendbyte(slave)) return 0; if(!sendbyte(subaddr)) return 0; start();
if(!sendbyte(slave+1)) return 0; for(i=0;i<n-1;i++) {
buffer[i]=recbyte(); ack(); }
buffer[n-1]=recbyte(); noack(); stop(); return 1; }
uchar Sendstring(uchar slave,uchar subaddr,uchar *buffer,uchar n) { uchar i; start(); if(!sendbyte(slave)) return 0; if(!sendbyte(subaddr)) return 0; for(i=0;i<n;i++) { if(!sendbyte(buffer[i])) return 0; } stop(); return 1; }
void clear_password( ) { uchar i; for(i=0;i<6;i++)
{ Userpassword[i]=' '; } for(i=0;i<16;i++) { DSY_BUFFER[i]=' '; } }
uchar Keys_Scan() { uchar temp,keynum; P1=0x0F; delayms(5); temp=P1^0x0F; switch(temp) { case 1:keynum=0;break; case 2:keynum=1;break; case 4:keynum=2;break; case 8:keynum=3;break; break; } P1=0xF0; delayms(5); temp=P1>>4^0x0F; switch(temp) { case 1:keynum+=0;break; case 2:keynum+=4;break; case 4:keynum+=8;break; case 8:keynum+=12;break; break; } delayms(600); return keynum; }
void main()
{ uchar temp,i=0,j=0,k=0,n; uchar IS_valid_user; beep=1; init(); init_lcd(); delayms(5); aa=Sendstring(0xa0,1,table2,6);
delayms(5); aa=Recstring(0xa0,1,buffer,6); delayms(10); P1=0x0f; while(1) { if(P1!=0x0f) { temp=Keys_Scan(); switch(temp) {
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9:
if (i<=5) //密码限制在6位以内 {
Userpassword[i]=temp; DSY_BUFFER[i]='*';
Display_String(DSY_BUFFER,0xc0); i++; } break;
case 10: //按A键开锁 for(k=0;k<6;k++) { if(buffer[k]==(Userpassword[k]+48)) flag=1; else flag=0; }
if (flag==1) { flag=0; i=0;
led=0; //点亮LED clear_password();
Display_String("OPEN OK! ",0xc0); IS_valid_user = 1; j=0; } else { j++;
led=1; //关闭LED clear_password();
Display_String("ERROR!Have try ",0xc0); write_com(0xcf); write_date(0x30+j); IS_valid_user=0; } i=0; break;
case 11: //按B键上锁 led=1;
clear_password();
Display_String(table,0x80);
Display_String("Lock OK! ",0xc0); i=0; IS_valid_user=0; break;
case 12: //按C键设置新密码
//如果是合法用户则提示输入新密码 if ( !IS_valid_user) { i=0; Display_String("No rights ! ",0xc0); delayms(1000); Display_String("Your Password...",0x80); Display_String("Lock OK! ",0xc0); } else {
i=0;
Display_String("New Password: ",0x80); Display_String(" ",0xc0); }
break;
case 13: //按D键保存新密码 if ( !IS_valid_user) { i=0; Display_String("No rights ! ",0xc0); delayms(1000); Display_String("Your Password...",0x80);
Display_String("Lock OK! ",0xc0); } else {i = 0; init(); delayms(5); for(k=0;k<6;k++) { Userpassword[k]=Userpassword[k]+48; }
aa=Sendstring(0xa0,1,Userpassword,6); delayms(5);
aa=Recstring(0xa0,1,buffer,6); delayms(5);
clear_password(); Display_String(table,0x00);
Display_String("Password Saved! ",0xc0); delayms(1000); Display_String("Do lock agian ? ",0xc0); }
break;
case 14: //按E键消除所有输入 i=0;
clear_password();
Display_String(" ",0xc0); break; case 15: //清除一位 if(i!=0)i--; for(n=0;n<i;n++) { DSY_BUFFER1[n]='*'; } Display_String(DSY_BUFFER1,0xc0); } P1=0x0f; } if(j==3) { Display_String("THIEF!!!THIEF!!!",0xc0); j=0; beep=0; }
}
}
正在阅读:
单片机电子密码锁LCD1602显示05-13
名师公开课经验交流会-总结报告模板12-19
芜湖县水利规划2020 - 图文03-18
开心一刻作文500字02-05
网络工程课程设计(综合布线)05-22
病房空气质量监测系统的设计 - 图文05-12
第三章习题和答案分解05-07
关于歌颂党赞美党的作文02-04
餐厅员工素质培养05-22
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 密码锁
- 单片机
- LCD1602
- 显示
- 电子
- 事业单位考试题库及答案
- 受理举办实施中等职业学历教育、自学考试助学及成人文化教育的民办学校的申请
- 第六章_显示仪表
- 2010新疆维吾尔自治区驾校考试科目一考试技巧与口诀
- 人教版七年级语文下册期末试卷及答案(新版)
- 2013版认识实习大纲
- 高速公路隧道通风计算中的若干问题
- POLYCOM视频会议设备介绍
- 大工16春(战略管理)在线1,2,3 作业答案
- 微生物作业:硕士生论文
- 党委办公室2010年工作总结党委办公室2011年工作计划
- 中药用量与作用之关系
- 中科院2002年物理化学试题及答案
- 农村淘宝项目落地方案 (1)
- 网络剧&视频行业深度报告:中国“大视频”下半场——平台与内容共生,剑指网生和出海
- 热工过程自动控制
- 肇庆市鼎湖区坑口片区控制性详细规划
- 辽宁省实施《中华人民共和国残疾人保障法》办法
- 英语专业四级听写答案
- 银行综合业务实验