




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于AT24C02的数字密码锁设计(STC89C52单片机)S1-S10数字键0-9S13 更改密码 S14 进入密码锁S15 关闭密码锁(使数字键失效)初始密码:000000密码位数:6位(由宏定义设定)#includereg52.h#include intrins.h#define uchar unsigned char#define uint unsigned int#define nop4() _nop_();_nop_();_nop_();_nop_();#define N 6 /密码的位数在此更改sbit scl = P21; /时钟线sbit sda = P20; /数字线sbit rw = P11;sbit RS = P10; sbit LCDEN = P25;/sbit dula=P26;/sbit wela=P27;sbit D6=P17;uchar mimaN,inputN,resetN;uchar key,p=1;uint y,temp;void delayUs()/微秒级延时 _nop_();void delayMs(uint a) /毫秒级延时 uint i, j; for(i = a; i 0; i-) for(j = 100; j 0; j-);void start() /产生起始信号,sda下拉(scl高电平时) sda=1;scl=1;nop4();sda=0;nop4();scl=0;void stop() /产生结束信号,sda上拉(scl高电平时) sda=0;scl=1;nop4();sda=1;nop4();scl=0;void ack() /应答信号(每个字节前) sda=0;scl=1;nop4();sda=1;scl=0;void no_ack() /非应答信号(结束信号前) sda=1;scl=1;nop4();sda=0;scl=0;uchar Read_A_Byte()/读一个字节 uchar i,rd; for(i=0;i8;i+) scl=1;rd=1;rd|=sda;scl=0; return rd;void Write_A_Byte(uchar wd) /写一个字节 uchar i; for(i=0;i8;i+) wd=1;sda=CY;nop4();nop4();scl=1;scl=0; ack();void Write_Address_Byte(uchar add,uchar dat) /向地址写字节 start(); Write_A_Byte(0xa0); Write_A_Byte(add); Write_A_Byte(dat); stop(); nop4();uchar Read_Address_Byte(uchar addr)/从地址读字节 uchar dat; start(); Write_A_Byte(0xa0); Write_A_Byte(addr); stop(); start(); Write_A_Byte(0xa1); dat=Read_A_Byte(); no_ack(); stop(); return dat;void writeComm(uchar comm)/LCD写命令 RS = 0; P0 = comm; LCDEN = 1; delayUs(); LCDEN = 0; delayMs(1);void writeData(uchar dat)/写数据:RS=1, RW=0; RS = 1; P0 = dat; LCDEN = 1; delayUs(); LCDEN = 0; delayMs(1);void writeString(uchar * str, uchar length)/写字符串 uchar i; for(i = 0; i length; i+) writeData(stri); void LCDinit() /Lcd初始化 rw = 0; dula = wela = 0; /防止led管乱闪 writeComm(0x38);/设置16乘2显示 writeComm(0x0c);/开显示,不显示光标 writeComm(0x06);/输入模式,写一加一 writeComm(0x01);/清屏void keyscan4x4() /4乘4键盘扫描,逐行扫描 uchar temp;/第一行扫描/P3=0xfe;/1111 1110 让P3.0口输出低temp=P3;temp=temp&0xf0;/1111 0000位与操作 屏蔽后四位if(temp!=0xf0) delayMs(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0) temp=P3;switch(temp) case 0xee: /1110 1110 S1被按下 key=0; break; case 0xde: /1101 1110 S2被按下 key=1; break; case 0xbe: /1011 1110 S3被按下 key=2; break; case 0x7e: /0111 1110 S4被按下 key=3; break;while(temp!=0xf0) temp=P3;temp=temp&0xf0;/第二行扫描/P3=0xfd;/1111 1101 让P3.1口输出低temp=P3;temp=temp&0xf0;/1111 0000位与操作 屏蔽后四位if(temp!=0xf0) delayMs(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0) temp=P3;switch(temp) case 0xed: /1110 1101 S5被按下 key=4; break; case 0xdd: /1101 1101 S6被按下 key=5; break; case 0xbd: /1011 1101 S7被按下 key=6; break; case 0x7d: /0111 1101 S8被按下 key=7; break;while(temp!=0xf0) temp=P3;temp=temp&0xf0; /第三行扫描/P3=0xfb;/1111 1011 让P3.2口输出低temp=P3;temp=temp&0xf0;/1111 0000位与操作 屏蔽后四位if(temp!=0xf0) delayMs(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0) temp=P3;switch(temp) case 0xeb: /1110 1011 S9被按下 key=8; break; case 0xdb: /1101 1011 S10被按下 key=9; break; case 0xbb: /1011 1011 S11被按下 key=10; break; case 0x7b: /0111 1011 S12被按下 key=11; break;while(temp!=0xf0) temp=P3;temp=temp&0xf0; /第四行扫描/P3=0xf7;/1111 0111 让P3.3口输出低temp=P3;temp=temp&0xf0;/1111 0000位与操作 屏蔽后四位if(temp!=0xf0) delayMs(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0) temp=P3;switch(temp) case 0xe7: /1110 0111 S13被按下 key=12; break; case 0xd7: /1101 0111 S14被按下 key=13; break; case 0xb7: /1011 0111 S15被按下 key=14; break; case 0x77: /0111 0111 S16被按下 key=15; break;while(temp!=0xf0) temp=P3;temp=temp&0xf0; void main() uchar table1 =Enter password ; uchar table2 =Unlocked; uchar table3 =False ; uchar table4 =Locked ; uchar table5 =New password; uchar table6 =OK ; uchar table7 =True ; uchar table8 =Hold on ; /保持 for(y=0;yN;y+) Write_Address_Byte(y,0x00); /设置初始密码 掉电不记忆,重置000000 delayMs(3); mimay=Read_Address_Byte(y); /*for(y=0;yN;y+) /掉电记忆 mimay=Read_Address_Byte(y); delayMs(3); */ LCDinit(); writeComm(0x80); writeString(table8,16); while(1) keyscan4x4();if(key=13) uint j=0; uint x=0; writeComm(0x01); writeComm(0x80); writeString(table1,15); delayMs(100); while(j1) uint i=0; writeComm(0xc0); while(iN) keyscan4x4(); if(key10) inputi=key; writeData(0+key); i+; if(i=N) delayMs(500); key=15; j+; writeComm(0x01); writeComm(0x80); p=1; for(y=0;yN;y+) if(inputy!=mimay) p=0; if(p) writeComm(0x01); writeComm(0x80); writeString(table7,16);delayMs(900); writeComm(0x01); writeComm(0x80); writeString(table2,8); delayMs(500); D6=0; else writeString(table3,14); D6=1; else if(key=14) uint k=0; writeComm(0x01); writeComm(0x80); writeString(table4,16); /D6=1; while(k1) keyscan4x4();if(key=12|key=13) k+; else if(key=12) uint j=0; uint z=0; writeComm(0x01); writeComm(0x80); writeString(table1,16); D6=1; while(j1) uint i=0; writeComm(0xc0); while(iN) keyscan4x4(); if(key10) inputi=key; writeData(0+key); i+; if(i=N) delayMs(500); key=15; j+; writeComm(0x01); writeComm(0x80); p=1; for(y=0;yN;y+) if(inputy!=mimay) p=0; if(p) writeComm(0x01); writeComm(0x80); writeString(table5,12); delayMs(100); writeComm(0xc0); while(zN) keyscan4x4()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美容仪器行业2025年市场潜力挖掘:技术创新与推广策略研究报告
- 第3课 班级BMI数据测试-数据的收集与处理说课稿-2025-2026学年小学信息科技清华版贵州2024四年级上册-清华版(贵州)2024
- 新能源电池封装场景下耐高温-耐电解液双重性能协同优化方案
- 新型非对称磁路结构在抗堵转能力与能效比间的帕累托前沿探索
- 新型纳米包埋技术对有效成分稳定性的影响评估
- 2025年输液港维护试题及答案
- 成本控制与精度平衡中精密齿轮传动系统的轻量化创新实践
- 微米级表面粗糙度控制中刀具振动频谱分析与抑制策略
- 微流控芯片技术在微量三氯乙烷痕量检测中的灵敏度与抗干扰研究
- 微型化趋势下凹式灯头机械强度与材料疲劳寿命悖论
- 2025小红书电商简介
- 装载机司机安全考试模拟试题(含答案)
- 安全生产法2025全文
- 中储粮薪酬管理办法
- 高空外墙清洗员安全教育培训手册
- 赖特-罗比住宅详细分析
- 机车故障处理管理办法
- 房屋市政工程有限空间作业安全管理指南
- 布病防培训课件
- 工程造价咨询绿色施工支持措施
- 食品执行标准对照表
评论
0/150
提交评论