ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:647.81KB ,
资源ID:4269656      下载积分:2 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4269656.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机课程设计多功能密码锁.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机课程设计多功能密码锁.docx

1、单片机课程设计多功能密码锁任务及设计要求1.设计一多位电子密码锁,输入密码用“F”表示,输入密码正确,绿灯亮(或显示其它标志、蜂鸣器替代),输入密码错误,红灯亮(或显示其它标志、蜂鸣器替代).2.具有确定键和取消键,在未确定之前可以取消,重新输入.3.连续输入三次错误密码,红灯闪烁,报警电路动作,键盘锁定.4.具有密码重置、修改功能.5.具有密码输入等待操作时间限制功能,超过限定时间报警.6.显示北京时间,时间可调整.7.可利用蜂鸣器添加提示音.系统原理框图硬件原理图元件清单元件数量元件数量ADUC848芯片01片三极管若干按键18个MAX23201片8段数码管05位二极管若干AT24C080

2、1片下载线01根蜂鸣器01个电源线01根电阻若干开关01个电容若干硬件原理图仿真用原理图由于元件库缺少ADUC848,故使用了STC89C51代替仿真,因为端口两个芯片的P1口输入输出的设置不同,在仿真中修改了键盘扫描函数,以适用STC89C51的仿真.电源模块原理图有如下3种供电方式: 1/5V电源适配器供电(开关往上拨、插针1下面两脚接跳线帽).2/712V电源适配器供电(开关往上拨、插针1上面两脚接跳线帽).3/USB供电(开关往下拨).RS232串口连接原理图该模块中采用maxin公司的max232作电平转换,接上串口转换下载线就可以从计算机上下载程序了.数码管显示模块原理 本开发板采

3、用共阴极数码管,段码由PNP三极管驱动,位码由NPN型三极管驱动.本设计中使用了低5位的数码管.蜂鸣器原理图本设计中采用无源电磁式蜂鸣器,蜂鸣器由PWM1(P2.6)控制.PWM1为片内PWM模块的输出.蜂鸣器的驱动采用普通NPN三极管.按键输入模块原理图由于P1口(用于行扫描)内部无上拉电阻,为使无键按下时行信号为高电平,故将行信号接上拉电阻,电阻大小10K即可.P2.0P2.3为4X4矩阵式键盘列扫描信号.程序主要程序流程图程序#include #include/*类型定义*/#define uint unsigned int#define uchar unsigned char /*状态

4、定义*/#define opened 0#define new1 15#define new2 16#define succed 5#define fanin 10#define null 11#define error 12#define different 13#define tover 14/*按键定义*/#define enter 10#define back 11#define trevise 12#define revise 13#define cancel 14#define vain 15#define off 16#define end 17#define finish 18

5、/*函数声明*/void p_base();void p_revise();void p_new1();void p_new2();void p_trevise(); void p_show(); uchar p_scan();void p_record();void p_delay(uint f_n);void p_state(uchar f_s);uchar p_compare(uchar *f_k1,uchar *f_k2);void p_copy(uchar *f_s,uchar *f_k);void p_rsave();void p_wsave();void p_rtime();vo

6、id p_stime();void p_start(); void p_stop(); bit p_rack();void p_nack(); uchar rbyte(); void p_wbyte(uchar f_b);uchar p_rdata(uchar f_a);void p_wdata(uchar f_a,uchar f_d);/*I/O口定义*/sbit p00=P00;sbit p10=P10;sbit p11=P11;sbit p12=P12;sbit p13=P13;sbit p14=P14;sbit p15=P15;sbit p16=P16;sbit p17=P17;sbi

7、t p20=P20;sbit p21=P21;sbit p22=P22;sbit p23=P23;sbit p24=P24;sbit p25=P25;sbit p26=P26;sbit p27=P27;sbit p30=P30;sbit p31=P31;sbit p32=P32;sbit p33=P33;sbit p34=P34;sbit p35=P35;sbit p36=P36;sbit p37=P37;/*全局变量定义*/uchar bot,key19,key29,save9,stime4,s,min,h,mino,mint,ho,ht,n1=1,n2=1,lock,minu,sign,t

8、ov,state,n,sound,point=1,ts, flash=7,bright33=1,bright35=1,bright36=1,bright37=1; showlist=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x71,0xff,0x21,0x85,0xe1,0x7f,0x7d;uint ms;/*主函数*/void main() EA=1; ET0=1; TMOD=0x11; TH0=0xf9; TL0=0xdb; TR0=1; I2CCON=0xe8; sound=0; tov=1; P1=0x00; p_rsave(

9、); sign=p_rdata(40); if(sign!=1) p_new1(); p_base(); /*基础解锁函数*/void p_base() n=0; state=fanin; while(1) if(n=0) state=fanin; else state=n; bot=p_scan(); if(n!=0&tov=0) p_state(tover); main(); switch(bot) case vain: break; case enter: key1n=end; if(p_compare(key1,save) p_state(succed); lock=0; point=

10、1; state=opened; opened while(1) bot=p_scan(); switch(bot) case off: main(); break; case back: while(1) bot=p_scan(); switch(bot) case off: main(); break; case enter: p_wdata(40,0); main(); break; else p_state(error); p_record(); main(); break; case cancel: main(); break; case back: if(n!=0) key1n-=

11、end; break; case revise: p_revise(); break; case trevise: p_trevise(); break; default: if(n+1=9) p_state(error); main(); key1n+=bot; /*密码修改函数*/void p_revise() n=0; p_state(fanin); state=fanin; while(1) if(n=0) state=fanin; else state=n; bot=p_scan(); if(tov=0) p_state(tover); main(); switch(bot) cas

12、e vain: break; case enter: key1n=end; if(p_compare(key1,save) lock=0; point=1; p_state(succed); p_new1(); else p_state(error); p_record(); main(); break; case cancel: main(); break; case back: if(n!=0) key1n-=end; break; case revise: p_revise(); case off: break; case trevise: p_trevise(); break; def

13、ault: if(n+1=9) p_state(error); main(); key1n+=bot; /*新密码输入函数*/void p_new1() n=0; state=new1; while(1) if(n=0) state=new1; else state=n; if(tov=0&sign=1)|(n!=0&tov=0) p_state(tover); main(); bot=p_scan(); switch(bot) case vain: break; case enter: key1n=end; p_new2(); break; case cancel: main(); brea

14、k; case back: if(n!=0) key1n-=end; break; case revise: if(sign=1) p_revise(); break; case trevise: p_trevise(); break; default: if(n+1=9) p_state(error); main(); key1n+=bot; void p_new2() n=0; state=new2; while(1) if(n=0) state=new2; else state=n; bot=p_scan(); if(tov=0) p_state(tover); main(); swit

15、ch(bot) case vain: break; case enter: key2n=end; if(p_compare(key1,key2) sign=1; p_copy(save,key2); lock=0; p_state(succed); p_wsave(); p_wdata(40,1); main(); else p_state(different); main(); break; case cancel: main(); break; case back: if(n!=0) key2n-=end; break; case revise: if(sign=1) p_revise()

16、; break; case off: break; case trevise: p_trevise(); break; default: if(n+1=9) p_state(error); main(); key2n+=bot; /*键盘扫描函数*/ uchar p_scan() uchar f_s=vain; P2=P2&0xf0; if(P1!=0xff) p_delay(10); if(P1!=0xff) tov=1; P2=P2&0xf0; P2=P2|0x07; switch(P1) case 0xfe:f_s=1;break; case 0xfd:f_s=4;break; case

17、 0xfb:f_s=7;break; case 0xf7:f_s=back;break; while(P1!=0xff) sound=1; sound=0; P2=P2&0xf0; P2=P2|0x0b; switch(P1) case 0xfe:f_s=2;break; case 0xfd:f_s=5;break; case 0xfb:f_s=8;break; case 0xf7:f_s=0;break; while(P1!=0xff) sound=1; sound=0; P2=P2&0xf0; P2=P2|0x0d; switch(P1) case 0xfe:f_s=3;break; ca

18、se 0xfd:f_s=6;break; case 0xfb:f_s=9;break; case 0xf7:f_s=enter;break; while(P1!=0xff) sound=1; sound=0; P2=P2&0xf0; P2=P2|0x0e; switch(P1) case 0xfe:f_s=cancel;break; case 0xfd:f_s=off;break; case 0xfb:f_s=revise;break; case 0xf7:f_s=trevise;break; while(P1!=0xff) sound=1; sound=0; p_delay(10); return f_s; /*1毫秒中断函数.数码管显示函数*/void time() interrupt 1 TH0=0xf9; TL0=0xdb; TR0=1; ms+; ms=ms%1000; p_show(); if(sound) p26=!p26; if(ms=0) ts=!ts; tov+; tov=tov%11; s+; s=s%60; if(s=0) minu

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1