版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、哈 尔 滨 理 工 大 学 荣 成 学 院单片机课程设计题目:基于AT24C04的简易密码锁设计班级: 电气12-2 姓名: 徐亚明 学号: 1230070224 目录一、总体方案设计2二、主控器件和外围器件及硬件电路22.1主控器件STC89C52RC22.2 AT24C04芯片简介52.3 LED显示62.4 功能按键设计7三、软件设计流程83.1操作说明:83.2系统流程图:83.3源程序:11四、心得体会20参考文献21 基于AT24C04的简易密码锁设计一、总体方案设计本系统由单片机系统、矩阵键盘、LED显示和报警系统组成。整个设计具有本机控制开锁,密码修改,密码显示,工作状态显示,
2、按键提示,密码错误报警等功能,可在密码外泄的情况下及时修改密码,具有保密性好、安全可靠、成本低廉、连接方便,简单易用,适用范围广等特点。 除上述基本的密码锁功能外,还具有掉电存储、声光提示等功能,依据实际的情况还可以添加遥控功能。本系统成本低廉,功能实用二、 主控器件和外围器件及硬件电路2.1主控器件STC89C52RCSTC89C52RC单片机是宏晶科技推出的新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟、机器周期和6时钟、机器周期可以任意选择。 主要特性如下: 工作电压:5.5V3.3V 工作频率范围:044MHz。 用户应用程序空间为8K字节 片上集
3、成512字节RAM 通用I/O口32个,复位后为:P1/P2/P3/P4是准双向口/弱上位,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。 ISP(在系统可编程)/IAP(再应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RXD/P3.0,TXD/P3.1 )直接下载用户程序,数秒即可完成一片。 具有EEPROM功能 具有看门狗功能 共3个16位定时器/计数器。及定时器T0、T1、T2 外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒 通用异步串行口(UART),还可用定时器实现多个UART
4、 工作温度范围:-40+85度(工业级)/075度(商业级) PDIP封装STC89C52引脚图时钟及其复位电路2.2 AT24C04芯片简介I2C总线是一种用于IC器件之间连接的二线制总线。它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件:不管是单片机、存储器、LCD驱动器还是键盘接口。采用I2C总线标准的单片机或IC器件,其内部不仅有I2C接口电路,而且将内部各单元电路按功能划分为若干相对独立的模块,通过软件寻址实现片选,减少了器件片选线的连接。CPU不仅能通过指令将某个功能单元电路挂靠或摘离总线,还可对该单元的工作状况进行检测,
5、从而实现对硬件系统的既简单又灵活的扩展与控制。内部连接24c04电路图图中AT24C04的1.2.1脚十三条地址线,用于确定芯片的硬件地址,在AT89C51开发板上他们都接地,第8脚和第4脚分别为正、负电源。第5脚SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送,在AT89C51试验开发板上和单片机的P3.5连接。第6脚SCL为串行时钟输入线,在AT89C51试验开发上和单片机的P3.6连接。SDA和SCL都需要和正电源间各接一个5.1K的电阻上拉。第7脚需要接地。2.3 LED显示LED数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的
6、各个笔划,公共电极。LED数码管常用段数一般为7段有的另加一个小数点。LED显示电路2.4 功能按键设计 按键定义图如图示:采用4X4键盘输入,键盘对应名称如下:0 1 2 3 4 5 6 7 8 9 A B C D 其中,【09】为数字键,用于输入相应的密码, 【A】号键为取消当前操作 【B】键为修改密码 【C】号键为确认 【D】号键为关闭密码锁三、 软件设计流程3.1操作说明: 密码锁初始密码为:0000.1、 开锁:插上电源后,程序自动调入初始密码,此时依次输入:0000,然后按(确认)键,此时锁会打开,密码锁打开。2、 退出并关锁:按下(取消)键,此时锁关闭,所有输入清除。3、 修改密
7、码:在开锁状态下,按下(修改)键,输入新的四位密码并按ok,表示重设密码成功,内部保存新密码并存储到AT24C04。4、 报警并锁定键盘:当输入密码错误后,报警,当连续3次输入错误后报警并锁定键盘。5、 当重置新密码时,新密码会保存于AT24C04存储器里。3.2系统流程图:系统流程图设计分析如下:首系统初始化,系统运行,当有设置键按下时进入时间修改模式,无按键按下时读取时间等数据送入显示器显示。在时间修改模式下设置时间完成后再将时间送入显示器显示。1、系统结构框图 AT89S52显示模块键盘输入模块报警电路复位电路开锁电路密码存储模块2、主程序设计流程图初始化 修改开锁密码正确 输入旧密码N
8、原密码相同 Y开锁出错报警 N N Y设新密码 返回 3、开锁程序流程图LCD初始化按开锁键输入密码确认程序开锁N输入密码正确?报警程序开锁成功返回Y 3.3源程序:22#include<reg52.h> #include<intrins.h>#define uint unsigned int #define uchar unsigned char uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff; /数码管段码sbit beep=P27; /蜂鸣器端口sbit le
9、d=P24; /LED灯端口sbit scl=P11; /时钟线SCL端口sbit sda=P12; /数据线SDA端口uchar old1,old2,old3,old4; /定义旧密码变量uchar new1,new2,new3,new4; /定义新密码变量uchar a=11,b=11,c=11,d=11,ppp=0; uchar aa,key,temp;bit allow,genggai,ok,wanbi,retry,close; void delay(uint ms) /延时函数uint i,j;for(i=ms;i>0;i-)for(j=113;j>0;j-);void
10、nop() /短延迟-延迟两个机器周期_nop_();_nop_();void delay1(unsigned int m) /延时函数unsigned int n; for(n=0;n<m;n+);void init() /复位scl=1;nop();sda=1;nop();void start() /开始 sda=1;nop();scl=1;nop();sda=0;nop();scl=0;nop();void stop() /停止 sda=0;nop();scl=1;nop();sda=1;nop();void writebyte(unsigned char j) /写入密码unsi
11、gned char i,temp; temp=j; for (i=0;i<8;i+) temp=temp<<1; scl=0; nop(); sda=CY; nop(); scl=1; nop(); scl=0; nop(); sda=1; nop();unsigned char readbyte() /读密码 unsigned char i,j,k=0; scl=0; nop(); sda=1; for (i=0;i<8;i+) nop(); scl=1; nop(); if(sda=1) j=1; elsej=0; k=(k<<1)|j; scl=0;
12、nop();return(k);void clock() /锁住键盘 unsigned char i=0; scl=1; nop(); while(sda=1)&&(i<255) i+; scl=0; nop();unsigned char read24c02(unsigned char address) /访问24C02芯片 unsigned char i; start(); writebyte(0xa0); clock(); writebyte(address); clock(); start(); writebyte(0xa1); clock(); i=readby
13、te(); stop(); delay1(100); return(i);void write24c02(unsigned char address,unsigned char info) /向24C02芯片写入 start(); writebyte(0xa0); clock(); writebyte(address); clock(); writebyte(info); clock(); stop(); delay1(5000); void display(uchar qian,uchar bai,uchar shi,uchar ge) /显示密码 P2=0xfe; P0=tableqian
14、; delay(5); P2=0xfd; P0=tablebai;delay(5);P2=0xfb;P0=tableshi;delay(5);P2=0xf7;P0=tablege;delay(5);void keyscan() /键盘输入 P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xe7: key=0; aa+; break; case 0xd7: key=1; aa
15、+; break; case 0xb7: key=2; aa+; break; case 0x77: key=3; aa+; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; / display(key); P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xeb: key=4; aa+; break; case 0x
16、db: key=5; aa+; break; case 0xbb: key=6; aa+; break; case 0x7b: key=7; aa+; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xed: key=8; aa+; break; case 0xdd:
17、 key=9; aa+; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xee: genggai=1; aa=0; break; case 0xde: if(allow) ok=1; break; case 0xbe: retry=1; break; case 0x
18、7e: close=1; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; void shumima() /输入密码if(wanbi=0)switch(aa)case 1:new1=key; if(!allow)a=10; else a=key;break;case 2:new2=key;if(a=10) b=10;else b=key;break;case 3:new3=key; if(a=10) c=10;else c=key;break;case 4:new4=key;if(a=10) d=10;else d=key;wanbi=
19、1;break;void yanzheng() /验证密码 if(wanbi=1) if(new1=old1)&(new2=old2)&(new3=old3)&(new4=old4)allow=1;elsebeep=beep;void main()init();/ write24c02(2,0x00);/ write24c02(3,0x00);/ write24c02(4,0x00);/ write24c02(5,0x00);old1=read24c02(2); old2=read24c02(3);old3=read24c02(4);old4=read24c02(5);
20、while(1)keyscan();shumima();yanzheng();if(allow=1) /密码正确LED灯亮led=0;if(!genggai)wanbi=0;if(genggai=1) /更改密码 if(allow=1) while(wanbi=1) keyscan();shumima();if(retry|close) wanbi=0;break;display(a,b,c,d);if(ok=1) /确认 ok=0; aa=0;genggai=0;old1=new1;old2=new2;old3=new3; old4=new4;write24c02(2,old1);write24c02(3,old2);write24c02(4,old3);write24c02(5,old4);a=11;b=11;c=11;d=11;if(retry=1) /重新输入retry=0; aa=0;wanbi=0;a=11;b=11;c=11;d=11;new1=0;new2=0;new
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年科学测试题和答案
- 2026年四川南充中考考前名校联测化学试题附答案
- 预防血糖水平异常试题与答案解析
- 中国皮带行业市场前景预测及投资价值评估分析报告
- 2026年中国磨刀机行业市场调查研究及投资潜力预测报告
- 2026年中国高端包装水行业分析报告-市场规模现状与投资前景预测
- 2026年中国广东省服装市场运营态势研究报告
- 2026年十七大报告模拟试题及答案详解
- 2026年山东省淄博市继续教育公需科目模拟试题及答案详解
- ctf竞赛测试题库及答案详解
- 2026年内镜清洗消毒规范课件
- 新版部编人教版一年级上册道德与法治全册教案(完整版)教学设计
- 2026秋小学统编版道德与法治三年级(新教材)上册教学计划附教学进度表
- 健康教育从小做起小学主题班会课件
- GINA 2025 全球哮喘防治创议(中文版 完整原文 + 诊疗路径解析)
- 2026年秋新教材青岛版小学数学四年级上册(全册)教学设计(附目录p164)
- DB23∕T 4054-2026 黑龙江剪纸标准
- 老年多重用药护理查房
- 体育概论-第三版-杨文轩-陈琦-全国普通高等学校体育专业类基础课程教材-第五章-体育手段
- 中国学术期刊评价研究报告(武大版)(2023年)
- xx煤业股份有限公司xx矿矿井通风阻力测定报告
评论
0/150
提交评论