- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于MCU的数字密码锁设计-论文
基于MCU的数字密码锁设计-论文
基于MCU的数字密码锁设计
Ⅰ、 设计任务:利用STC89C52芯片设计一个带有四位LED显示,报警系统,时间显示,输入、修改密码,4*4键盘功能的数字密码锁。
Ⅱ、 设计方案:利用单片机芯片,先确定硬件电路设计,利用PROTEL软件进行模块仿真,调整个元器件的参数,测试硬件的可行性,然后通过软件编程分块实现设计任务所要求的各项功能,并分别加以测试。先通过软件仿真系统将程序加载到仿真系统,检验程序的可行性,最后进入实际硬件电路的焊接制作过程并调试硬件电路,最终完成设计成型。
Ⅲ、基本原理:单片机以其小巧灵活、成本低、易于产品化、可靠性高、适用的温度范围宽、易扩展、控制功能强、指令系统简单、可编程化等特点在广泛的领域得到应用。基于MCS-51单片机的指令系统实现程序化的编程,加上单片机的内、外资源的综合利用实现功能化的产品,主要编程方式有:汇编语言和C51
Ⅳ、系统框图
?
Ⅴ、电原理图
?
Ⅵ、元器件清单
ⅰ、STC89C52芯片,四位封装 FJ5461BH LED,12MHz晶振
ⅱ、蜂鸣器,发光二极管,PNP型三极管,继电器,小按键
ⅲ、100Ω、300Ω、1KΩ、5KΩ电阻若干,电容10uf,30pf各两个、开关、USB接口、导线若干
Ⅶ、结果及分析
?? ⒈结果:经过最终的硬件修改以及软件的调试实现了设计任务所要达到的目标,主要是十六个按键0-F的十六进制符号组成,一次为从左至右、从上到下,其中A-F为功能键,分别是时间的修改键、输入密码键、设置密码键、修改密码键、闭锁键以及开锁键,通过这些功能键可以设置四位数字密码,利用继电器代替电子锁的功能以节约成本。
?? ⒉分析:基于这个设计项目,利用单片机芯片实现数字密码锁的功能,此次设计主要利用汇编语言实现功能,因为汇编语言的效率高于C51,程序中主要包括以下几个模块:⑴密码输入、修改模块⑵键盘扫描模块⑶时间显示模块⑷报警模块。此次设计中主要实行分模块编程实现模块化功能,分多步实现,最终将各个模块整合一个完整的囊括以上所有模块功能的整体。硬件方面,利用万能版制作一个简单的电路以实现上述功能,采取自己布线合理安排板子上的各个功能模块,实现合理的布局。在焊接的过程中出现了在焊接中经常碰到的插曲就是虚焊,比如说LED显示有时会出现有些段不亮,这往往造成硬件测试的时候不容易发觉错误,还有一点就是对于整个的电路要有一个整体的思维。针对以上问题的分析,在实际的操作中会出现一些小的插曲。
在以上的功能实现中以密码输入及修改的编程难度最大,时间显示可以通过中断系统来实现,键盘输入主要是矩阵键盘的扫描,所以最重要的还是密码输入修改模块,程序中有比较复杂的嵌套,这造成了有时候对程序的修改出现一定的难度。最初写程序的时候,程序有些显得重复,需要进一步的修改删减。报警系统采用的是密码输入三次错误即采取报警1分钟的措施并且程序将进入死循环以达到锁死的目的。
Ⅷ、实物图612
基于MCU的数字密码锁设计
Ⅸ、源程序代码
#includereg51.h
#includeintrins.h
#define uchar unsigned char
sbit P30=P3^0;
sbit spk=P2^1;
sbit led1=P2^6;
sbit led2=P2^7;
sbit jdq=P2^0;
uchar code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,
?????????????????????? 0x8c,0x92,0x89,0xf9,0x8e,0x86,0xc8}; //段码值0~9,p,f,e,n,s,h,i?
uchar dispbuf[4];? //显示数组
uchar hour,min,sec,sec20;
uchar dispbit,count,keynum,keysec,keysec1;
bit id,flag,buzz,key1,key2,flag1,bit1,bit2;
uchar ps[4]={1,2,3,4};? //初始密码
uchar pw[4];??????????? //密码数组,用于存放输入的密码,用于比较?
uchar keycount;
bit error,right,hibit;
uchar wr,ok,wr1,ok10; //密码锁标志
void disptime()?????? //显示数组更新
{if(flag)
?{dispbuf[0]=hour/10;
? dispbuf[1]=hour%10;
? dispbuf[2]=min/10;
? dispbuf[3]=min%10;
?}
}
void delayms(int
文档评论(0)