《2022年数字密码锁单片机课程设计.docx》由会员分享,可在线阅读,更多相关《2022年数字密码锁单片机课程设计.docx(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选学习资料 - - - - - - - - - 课程设计课 程 名 称: 单 片 机 原 理 与 应 用课 题 名 称:数 字 密 码 锁 设 计所在 学院 名称: 湖南高校电气与信息工程学院设 计 人 员: 宁 枫 根 宋 浩 冉目录一、 前言 . - 2 -二、 总体方案设计 . - 3 -2.1 方案论证与比较 . - 3 -2.2 方案挑选 . - 4 -三、 单元模块设计 . - 4 -3.1 硬件支持 . - 4 -名师归纳总结 - - - - - - -第 1 页,共 30 页精选学习资料 - - - - - - - - - 3.2 功能单元模块设计. - 4 -3.2.1 开
2、锁机构 . - 4 -3.2.2 矩阵键盘设计电路 3.2.3 声音提示电路设计 . - 5 - . - 6 -3.2.4 显示模块设计 . - 6 -四、程序设计与系统仿真. . - 7 -4.1 模块介绍 . - 7 -4.1.1 主程序模块 . - 9 -4.1.2 密码比较判定模块 . - 9 -4.1.3 键盘扫描模块 . - 9 -4.1.4 修改密码模块 . - 10 -五、系统功能 . - 11 -六设计总结 . - 12 -七、附录:源程序 . - 12 -一、 前言随着社会物质财宝地日益增长和人们生活水平地提高,安全成为现代居民最关怀地问题之一 .而锁自古以来就是把守门地铁
3、将军,人们对它要求甚高,即要求牢靠地防盗,又要使用便利 .传统地门锁既要备有大量地钥匙,又要担忧钥匙丢失后地麻烦 .随着单片机地问世,显现了数字密码锁,其保密性高,使用敏捷性好,安全系数高,故受到广大用户地青睐.数字密码锁通常使用ARM 和单片机掌握,单片机相对ARM 实现较为简洁,功能较为完善,因此使用单片机掌握较多.用单片机掌握地密码锁常使用汇编语言编写程序,数码管做显示器 . 但本设计使用移植性及可读性强地 C 语言编写;同时采纳显示清晰、功率消耗小而且寿命长地 1602A 液晶显示器 .从经济有用地角度动身,采纳 ADUC848 单片机设计出一种具有密码设置、报警等功能地数字密码锁,并
4、通过 Proteus 软件胜利地进行了仿真 .任务及设计要求1.设计一多位电子密码锁,输入密码用 “F”表示 ,输入密码正确,绿灯亮(或显示其它标志、蜂名师归纳总结 鸣器替代) ,输入密码错误 ,红灯亮(或显示其它标志、蜂鸣器替代).第 2 页,共 30 页2.具有确定键和取消键,在未确定之前可以取消,重新输入 .3.连续输入三次错误密码,红灯闪耀 ,报警电路动作 ,键盘锁定 .- - - - - - -精选学习资料 - - - - - - - - - 4.具有密码重置、修改功能 .5.具有密码输入等待操作时间限制功能,超过限定时间报警.6.显示北京时间 ,时间可调整 .7.可利用蜂鸣器添加提
5、示音 .二、 总体方案设计2.1 方案论证与比较方案一:以 ADUC848 单片机为数字密码锁系统核心,使用 4*4 矩阵键盘作为数据输入方式,驱动 1602A 显示器提示程序运行过程和开锁地步骤,利用 AT24C02 芯片实现掉电储备 .图 1 为单片机掌握密码锁地系统原理框图 .电源模块LCD 矩阵ADUC8481602A 键盘LED 掌握单片机密码校验提示AT24C02储备芯片 蜂鸣器提示电路图 1 单片机掌握密码锁地系统原理框图名师归纳总结 方案二:以 74LS112双 JK触发器构成地数字规律电路掌握方案,如图2.第 3 页,共 30 页- - - - - - -精选学习资料 - -
6、 - - - - - - - 输 入 按5 秒定20 秒定声光指时电路时电路示电路扭 开 关 组输入锁存电路开锁控 机械动 制电路 作构件 密码存 储电路图2 数字规律掌握方案数字密码锁原理框图2.2 方案挑选由于利用单片机警活地编程设计和强大地I/O 端口,及其掌握地精确性,不但能实现基本地密码锁功能,仍可以增加掉电储备、声光提示等功能,应选用方案一 .三、 单元模块设计3.1 硬件支持使用地元器件有:核心芯片ADUC848 、储备芯片AT24C02 、液晶显示1602A 、 44 矩阵键盘、报警蜂鸣器、发光二极管和三极管.3.2 功能单元模块设计3.2.1 开锁机构通过单片机送给开锁执行机
7、构,电路驱动电磁锁吸合,从而达到开锁地目地 .如图 3 所示,为密码锁开锁电路原理图 .当用户输入地密码正确时,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门地目地 .本次设计中,基于节约成本考虑,用发光二极管代替电磁锁,信息通过 LCD 显示,并利用蜂鸣器和二极管声光指示 就,表示密码输入错误并开启报警电路 .其中,绿发光二极管亮,表示开锁;否名师归纳总结 - - - - - - -第 4 页,共 30 页精选学习资料 - - - - - - - - - 超次锁定STC89C52 密码否电磁锁单片机正确是开锁驱动电路图 3 密码锁开锁电路原理图3.2.2 矩阵键盘设计电路每
8、一条水平(行线)与垂直线(列线)地交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要 M 条行线和 N 条列线,即可组成具有 M N 个按键地键盘 .由于本设计中要求使用 16 个按键输入,为削减键盘与单片机接口时所占用地 I/O 线地数目,故使用矩阵键盘 .本设计中,矩阵键盘行线和单片机 P1.0-P1.3 相连,列线与单片机P1.4-P1.7 相连 .矩阵键盘设计电路图,如图 4 所示 .键盘扫描采纳行扫描法,即依次置行线中地每一行为低电平,其余均为高电平,扫描列线电平状态,为低电平即表示该键按下.2 3 1 4 5 6 关7 8 9 * 退位0 确认设置时间图 4 矩阵键
9、盘设计电路图名师归纳总结 - - - - - - -第 5 页,共 30 页精选学习资料 - - - - - - - - - 3.2.3 声音提示电路设计声音提示电路采纳小蜂鸣器提示.蜂鸣器能够依据脉冲信号,以及信号地频率发出各种不同地声音,这样可以依据系统要求在密码出入正确和密码输入错误时发出不同地声音提示,已达到报警地要求.蜂鸣器电路,如图5 所示 .图 5 蜂鸣器电路3.2.4 显示模块设计本设计中,显示电路采纳1602A 液晶显示器显示.如下所示,图6 为 1602A 液晶显示器地接口示意图,表1 为接口说明 .图 6 1602A 液晶显示器地接口示意图表 1 接口说明名师归纳总结 管
10、脚序名称电平功能描述第 6 页,共 30 页1VSS0V接地2VCC5.0V电源输入3V0LCD 驱动电压输入4RSH/L寄存器挑选: RS=H,挑选数据寄存器;RS=L,挑选指令寄存器5R/WH/L读写信号线: R/W=H ,读操作; R/W=L ,写操作- - - - - - -精选学习资料 - - - - - - - - - 6EH,HL使能信号7DB0H/L数据线2 显示模块8DB1H/L数据线9DB2H/L数据线10DB3H/L数据线11DB4H/L数据线12DB5H/L数据线13DB6H/L数据线14DB7H/L数据线15BLA5.0V背光电源正极16BLK0V背光电源负极本设计中
11、液晶串口一共用到11 根导线与单片机相连,详细连接情形如表与 MCU 连接说明所示 .序号表 2 显示模块与MCU 连接说明1602A 液晶显示器引脚ADUC848 单片机引脚1RS 引脚P2.5A132P2.6A14R/W 引脚3E 引脚P2.7A154P0.0AD0D0 引脚5D1 引脚P0.1AD16D2 引脚P0.2AD27D3 引脚P0.3AD38P0.4AD4D4 引脚9D5 引脚P0.5AD510D6 引脚P0.6AD611D7 引脚P0.7AD7四、程序设计与系统仿真4.1 模块介绍与硬件电路相关联,本系统软件包括主程序模块、密码比较判定模块、键盘扫描模名师归纳总结 块 、 修
12、 改 密 码 模 块 、 1602A液 晶 显 示 模 块 等 . 系 统 程 序 流 程 如 图9所第 7 页,共 30 页示.- - - - - - -精选学习资料 - - - - - - - - - 开头系统初始化调用 E 2PROM 密码未超过 N 次显示主界面输入密码 锁定键盘超过 N 次判定密码N 返回判定次数 N Y 确定密码开锁模拟声光再次输入密码N 按键N 返回主界面Y N Y 输N=0x11 设置新密码判定按键值密码设置完毕N=0x84 N=0x82 Y 设产置生解随入码机密次密码数码图 9 系统程序流程图名师归纳总结 - - - - - - -第 8 页,共 30 页精选
13、学习资料 - - - - - - - - - 4.1.1 主程序模块主程序主要用于定义全局变量,给全局变量赋初值,初始化E2PROM ,启动定时器以及从 AT24C02 中读取密码,为整个程序供应数据;检测按键;调用显示等功能 .4.1.2 密码比较判定模块该模块地功能是将键盘输入地密码利用if 语句与设定地密码进行逐个比较,如密码完全正确就开锁;如不正确,就开启报警电路,复位后重新输入密码 .其密码输入和比较判决流程图如图 10 所示 .输入密码核对N Y 键盘锁定,开启报警电复位开锁,灯亮,可密码修改图 10 密码输入和比较判决流程图4.1.3 键盘扫描模块键盘使用矩阵式键盘,由行和列组成
14、,CPU 对全部键盘进行监视,从而实现逐列扫描键盘确定被按键地详细位置、判定键盘上有无键按下、排除去抖动、判定闭合地键是否释名师归纳总结 放等功能 .如图 11 所示,为键盘扫描流程图.第 9 页,共 30 页- - - - - - -精选学习资料 - - - - - - - - - 开头有按键输入?N Y 延时去抖动Y 有按键输入?N 运算输入键值有按键输入?键值送入单片机返回图 11 键盘扫描流程图4.1.4 修改密码模块名师归纳总结 在密码输入正确情形下,可以按下.“ 重置密码 ” 对密码进行重新设置,每设定一位就将第 10 页,共 30 页密码送给AT24C02 储备起来,当设置6 位
15、密码完毕后,系统将自动跳到程序开头,调用新设置地密码 .图 12 为修改密码流程图- - - - - - -精选学习资料 - - - - - - - - - 开头输入原密码密码比较N 比较正确?Y 输入新密码键盘锁定,启动报警电复位再次输入新密码调用 AT24C02 中密码比较正确修改胜利返回菜单图 12 修改密码流程图五、系统功能本设计中系统可实现功能如下:名师归纳总结 - - - - - - -第 11 页,共 30 页精选学习资料 - - - - - - - - - (1)通过切换,对输入地18 位密码进行显示或隐匿;(2)通过发光二极管和蜂鸣器,对解密正确或者错误进行声光报警;(3)1
16、 8 位密码修改;(4)在密码遗失情形下,通过初始密码进行密码再设置;(5)具有 1-3 次地解锁次数任意设定功能;六设计总结作为一名电子信息工程地同学,通过本次课程设计,我很好地明白了单片机 C 语言设计地摸索模式,熟识了 C 语言地编程规章,知道了如何去运用一个完全生疏地单片机,会依据单片机地不同结构来采纳不同地命令实现功能.在此次课程设计中我负责地模块显现了问题导致在数码管上显示状态地时候纷乱了,主要是由于延时上没有处理好,Aduc848 地定时器处理时是要加上肯定地延时来防止冲突地.另外仍有键盘地防抖模块,一开是没有考虑好,所以键盘按下后显示会乱变 .综上而言,通过此次课程设计,我很好
17、地学习了单片机地 应用以及其编程 .七、附录:源程序#include #include #define uint unsigned int #define uchar unsigned char /* 状态声明 */ #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 b
18、ack 11 名师归纳总结 - - - - - - -第 12 页,共 30 页精选学习资料 - - - - - - - - - #define trevise 12 #define revise 13 #define cancel 14 #define vain 15 #define off 16 #define end 17 #define finish 18 /* 函数声明 */ void p_base;void p_revise ;void p_new1 ;void p_new2 ;void p_trevise ;void p_show ;uchar p_scan;void p_rec
19、ord ;void p_delayuint f_n ;void p_stateuchar f_s ;uchar p_compareuchar *f_k1,uchar *f_k2 ;void p_copyuchar *f_s,uchar *f_k;/*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 ;sbit p20=P20 ;sbit p21=P21 ;sbit p22=P2
20、2 ;sbit p23=P23 ;sbit p24=P24 ;sbit p25=P25 ;sbit p26=P26 ;sbit p27=P27 ;sbit p30=P30 ;sbit p31=P31 ;名师归纳总结 - - - - - - -第 13 页,共 30 页精选学习资料 - - - - - - - - - sbit p32=P32 ;sbit p33=P33 ;sbit p34=P34 ;sbit p35=P35 ;sbit p36=P36 ;sbit p37=P37 ;/* 变量声明 */ uchar bot,key19,key29,save9,t4,s,min,h,mino,mi
21、nt,ho,ht,n1=1,n2=1,lock,minu,sign,tov,st ate,n,sound,point=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 ; /开总中断1 ET0=1; /开内部中断0 ET1=0;/关内部中断TMOD=0x11 ;TH0=0xf9 ; /计数器 0 高八位 TL0=0xdb ; /计数器 0 低八位 TR0=1; /计数器 0 开头计
22、数 I2CCON=0xe8 ;sound=0;tov=1; /超时计数置为 1 P1=0x00; /P1 全置为 0 作为输入ifsign.=1 p_new1 ; /调用首次使用判定函数 p_base;/调用基础解锁函数 /* 基础解锁函数 */ void p_base 名师归纳总结 n=0; /密码数组置首位第 14 页,共 30 页- - - - - - -精选学习资料 - - - - - - - - - state=fanin; /指示管置为输入状态fanin while1 /无限循环 ifn=0 state=fanin;else state=n;bot=p_scan;ifn.=0&to
23、v=0 /判定密码数组是不是在首位,超时计数是否为0 p_statetover; /调用指示管状态闪耀函数 ,置为用超时状态 tover main; /调用主函数 switchbot case vain: break;case enter: key1n=end ; /把密码后一位置为 end /判定输入地密码是否与原 ifp_comparekey1,save 密码相同 置为胜利状态succed p_statesucced;/调用指示管状态闪耀函数,lock=0;/锁定键盘计数置为 0 point=1 ; /多次密码输入错误计数为输入状态opened state=opened;/ 指 示 管 置
24、while1 bot=p_scan;switchbot case off: main;break;case back: while1 bot=p_scan;switchbot 名师归纳总结 - - - - - - -第 15 页,共 30 页精选学习资料 - - - - - - - - - case off: main;break;case enter:main;break; else p_stateerror;/调用指示管状态闪耀函数 ,置为用错 误状态 error p_record;/调用错误计数函数 main; /调用主函数 break;case cancel: main;break;c
25、ase back: ifn.=0 / 判 断 当 前 密码 是 否为首位key1n-=end ;/当前密码位置end,密码退位break;case revise: p_revise;break;case trevise: p_trevise;break;default: 名师归纳总结 - - - - - - -第 16 页,共 30 页精选学习资料 - - - - - - - - - ifn+1=9 p_stateerror;main; key1n+=bot ; /* 密码修改模块 */ void p_revise ET0=1;ET1=0;n=0;p_statefanin ;state=fan
26、in;while1 ifn=0 state=fanin;else state=n;bot=p_scan;iftov=0 p_statetover;main; switchbot case vain: break;case enter: key1n=end ;ifp_comparekey1,save lock=0;point=1 ;p_statesucced;p_new1; 名师归纳总结 - - - - - - -第 17 页,共 30 页精选学习资料 - - - - - - - - - else p_stateerror;p_record;main; break;case cancel: ma
27、in;break;case back: ifn.=0 key1n-=end ;break;case revise: p_revise;case off: break;case trevise: p_trevise;break;default: ifn+1=9 p_stateerror;main; key1n+=bot ; /* 首次使用设置密码 */ void p_new1 n=0;state=new1;while1 ifn=0 state=new1;else 名师归纳总结 - - - - - - -第 18 页,共 30 页精选学习资料 - - - - - - - - - state=n;i
28、ftov=0&sign=1|n.=0&tov=0 p_statetover;main; bot=p_scan;switchbot case vain: break;case enter: key1n=end ;p_new2;break;case cancel: main;break;case back: ifn.=0 key1n-=end ;break;case revise: ifsign=1 p_revise;break;case trevise: p_trevise;break;default: ifn+1=9 p_stateerror;main; key1n+=bot ; */ /*
29、首次使用二次确定密码void p_new2 n=0;名师归纳总结 - - - - - - -第 19 页,共 30 页精选学习资料 - - - - - - - - - state=new2;while1 ifn=0 state=new2;else state=n;bot=p_scan;iftov=0 p_statetover;main; switchbot case vain: break;case enter: key2n=end ;ifp_comparekey1,key2 sign=1;p_copysave,key2;lock=0;p_statesucced;main; else p_st
30、atedifferent ;main; break;case cancel: main;break;case back: ifn.=0 key2n-=end ;break;case revise: ifsign=1 p_revise;名师归纳总结 - - - - - - -第 20 页,共 30 页精选学习资料 - - - - - - - - - break;case off: break;case trevise: p_trevise;break;default: ifn+1=9 p_stateerror;main; key2n+=bot ; /* 键盘模块 */ uchar p_scan
31、uchar f_s=vain ;P2=P2&0xf0 ;ifP1.=0xff p_delay10 ;ifP1.=0xff tov=1;P2=P2&0xf0 ;P2=P2|0x07;switchP1 case 0xfe:f_s=1;break;case 0xfd:f_s=4;break;case 0xfb:f_s=7;break;case 0xf7:f_s=back;break; whileP1.=0xff sound=1; sound=0;P2=P2&0xf0 ;名师归纳总结 - - - - - - -第 21 页,共 30 页精选学习资料 - - - - - - - - - P2=P2|0x
32、0b;switchP1 case 0xfe:f_s=2;break;case 0xfd:f_s=5;break;case 0xfb:f_s=8;break;case 0xf7:f_s=0;break; whileP1.=0xff sound=1; sound=0;P2=P2&0xf0 ;P2=P2|0x0d;switchP1 case 0xfe:f_s=3;break;case 0xfd:f_s=6;break;case 0xfb:f_s=9;break;case 0xf7:f_s=enter;break; whileP1.=0xff sound=1; sound=0;P2=P2&0xf0 ;
33、P2=P2|0x0e;switchP1 case 0xfe:f_s=cancel;break;case 0xfd:f_s=off ;break;case 0xfb:f_s=revise ;break;case 0xf7:f_s=trevise ;break; whileP1.=0xff sound=1; sound=0;p_delay10 ; 名师归纳总结 - - - - - - -第 22 页,共 30 页精选学习资料 - - - - - - - - - return f_s; void time interrupt 1 / 定时器 0 中断子函数 TH0=0xf9 ;TL0=0xdb ;TR0=1;ms+;ms=ms%1000; /1000 毫秒后 ms 置为 0 p_show ; /调用显示函数sound是否为 1 p26ifsound /判定声音标志p26=.p26 ; /蜂鸣器交替取反ifms=0 /判定 ms 是否为 0 tov+ ; /超时计数 tov 加 1 tov=tov%11 ; /11 秒后超时计数 tov 置为 0 s+;
限制150内