基于stc89c52单片机毕业设计附原理图pcb图源程序仿真图内容摘要:

序、键盘扫描程序、启动程序、关闭程序、建功能程序、密码设置程序、 EEPROM 读写程序和延时程序等组成。 图 41 组成原理 电源输入电路 三端集成稳压器 LM7805 和 LM7905 是作为固定输出电压的典型应用。 正常复位电路 振荡电路 键盘电路 开锁电路 STC89C52 单片机 显示电路 报警电路 13 工 作时,输入、输出电压差为 23V。 电容 C 为输入稳定电容,其作用是减小纹波,消振、抑制高频和脉冲干扰,它一般为。 电容 C 为输出稳定电容,其作用是改善负载的瞬态响应,它一般为 1uF。 使用三端稳压器时要根据输出电流的大小选择加散热器,否则会由于过热而无法工作到额定电流。 图 42 电源输入电路 矩阵键盘 由于本设计所用到的按键数量较多而不适合用独立按键式键盘。 采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独 立式按键键盘相比,要节省很多 I/O口。 本设计中使用的这个 4*4 键盘不但能完成密码的输入还能作特别功能键使用,比如清空显示功能等。 键盘的每个按键功能在程序设计中设置。 其大体功能(看键盘按键上的标记)及与单片机引脚接法。 图 43 矩阵键盘 14 复位电路 单片机复位是使 CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,例如复位后 PC= 0000H,使单片机从第 — 个单元取指令。 无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。 在复位期间(即 RST 为高电平期间), P0 口为高组态, P1- P3 口输出高电平;外部程序存储器读选通信号 PSEN 无效。 地址锁存信号 ALE 也为高电平。 根据实际情况选择如图 28 所示的复位电路。 该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容 C1 上的电压很小,复位下拉电阻上的电压接近电源电压,即 RST 为高电平,在电容充电的过程中 RST 端电压逐渐下降,当 RST 端的电压小于某一数值后, CPU 脱离复位状态,由于电容 C1 足够大,可以保证 RST高电平有效时间大于 24 个振荡周期, CPU 能够可靠复位。 增加手动复位按键是为了避免死机时无法可靠复位。 当复位按键按下后电容 C1 通过 R5 放电。 当电容C1 放电结束后, RST 端的电位由 R11 与 R15 分压比决定。 由于 R11R15 因此 RST为高电平, CPU 处于复位状态,松手后,电容 C1 充电, RST 端电位下降, CPU 脱离复位状态。 R11 的作用在于限制按键按下瞬间电容 C1 的放电电流,避免产生火花,以保护按键触电。 图 44 复位电路 晶振电路 STC89C52 引脚 XTAL1 和 XTAL2 与晶体振荡器及电容 C C1 按下图所示方式连接。 晶振、电容 C2/ C3 及片内与非门(作为反馈、放大元件)构成了电容三点 式振荡器,振荡信号频率与晶振频率及电容 C C2 的容量有关,但主要由晶振频率决定,范围在 0~ 33MHz 之间,电容 C C3 取值范围在 30pF 左右。 根据实际情况,本设计中采用 做系统的外部晶振。 电容取值为 33pF。 15 图 45 晶振电路 报警电路 报警部分由陶瓷压电发声装置及外围电路组成,加电后不发声,当有键按下时,“叮”声,每按一下,发声一次,密码正确时,不发声直接开锁,当密码输入错误时,单片机的 引脚为低电平,三极管 T3 导喇叭发出噪鸣声报警。 图 46 报警电路 显示电路 LCD1602 液晶显示屏显示。 图 47 显示电路 16 开锁电路 通过单片机开锁执行机构,发光二极管 D1 发光以替代达到开锁的目的。 图 48 开锁电路 开锁原理: 图 49 开锁原理 电路总体构成 在确定了选用什么型号的单片机后,就要确定在外围电路,其外围电路包括电源输入部分、键盘输入部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,根据实际情况键盘输入部分选择 4*4 矩阵键盘,显示部 分选择LCD1602 液晶显示屏来完成。 本次设计的各大模块在上述章节中已仔细介绍了,将各大模块融合在一起后组成电子密码锁硬件电路,键盘输入模块和 LCD1602 液晶显示屏 显示模块是最主要的两大模块,键盘主要是完成密码的输入、修改密码、消除密码等等任务。 而显示模块则是主要完成输入密码的显示以及密码输入正确或者错误的提示。 而剩余的就是报警模块、开锁模块以及单片机的最小系统。 开锁顾名思义就是密码输入正确后打开大门,而报警主要是为安全着想,当有人非法入侵时便于抓住犯人。 单片机最小系统则是单片机正常运行的保障。 总的硬件电 路如图 410。 LED发光 单片机 微控制器 STC89C52 低电平 返回 N Y 密码正确。 17 图 410 总电路图 18 5 软件程序设计 电子密码锁的软件设计是整个电子密码锁可靠安全运行的关键,密码锁软件程序分为 主程序、延时程序、 LCD1602 液晶显示屏显示程序 、修改密码程序、扫描键盘输入程序、报警程序。 密码通过矩阵键盘输入,并且在 LCD1602 液晶显示屏上显示, 如果输入密码正确,则可以直接开锁。 如果不正确,并且 3 次以上输入不正确,则 启动报警系统,触发蜂鸣器发声。 如果要修改密码,则需要在输入基础密码判别正确后,输入 修改后的密码 ,通过系统确认后方可 修改密码。 为了完成上述任务,在进行软件设计时,通常把整个过程分成若干个部分,每一部分叫做一个模块。 而本次设计分为四大模块,分别是键盘输入模块、 LCD1602 液晶显示屏显示模块、开锁和报警模块以及修改密码模块,通过主程序来实现控制。 主程序主要内容是各程序模块的调用,并利用各模块进行电子密码锁功能的实现,即是键盘输入密码并在 LCD1602 液晶显示屏显示密码,当密码输入完成后,单片机会将输入进的密码与原单片机内部所储存的密码进行对比,如若密码正确,则代表电磁吸合器的发光二极管会发 光,同时 LCD1602 液晶显示屏会显示出正确的密码;如若密码错误,会启动计数器计数,当错误次数超过三次时,报警系统会启动即是蜂鸣器会发出报警声,以提醒保安。 流程图如图 51 所示。 19 图 51 主程序流程 键盘模块流程图 键盘输入模块主要包含键盘的扫描、延时去抖、找到键值以及返回键值。 键盘扫描时循环的,程序编写是会使其进入是循环,这样可以检验出是否有按键按下,如果无按键按下就会进入等待有按键按下的状态,如果有按键按下的话就进入延时去 抖的步骤,这样可以肯定的确定扫描到的按键是否被按下。 经过去抖之后就是确定按键的位置即是第几行和第几列,找到按键后,就是确定键值并返回按键值,每一次扫描到有键按下后,最后都要有释放闭合按键的步骤,这是为了避免影响下一次键盘的扫描和按键值的读取。 流程图如图 52 所示 开始 初始化 次数加 1 输入密码 密码正确。 返回 N Y Y 开锁程序 开锁。 N 修改密码码。 次数 3。 报警程序 修改程序 Y N N Y 20 图 52 键盘模块流程 按键的消抖子程序所示: if(press_on!=0XF0)//按键消抖 (时间自定) { delay(50)。 press_on=KEY_IO。 } 确定键值的子程序如下所示: switch(row) { case 0xe0:row=0。 break。 case 0xd0:row=1。 break。 case 0xb0:row=2。 break。 case 0x70:row=3。 break。 } switch(col) { case 0x07:col=0。 break。 case 0x0b:col=1。 break。 case 0x0d:col=2。 break。 case 0x0e:col=3。 break。 } recieve=key_value[row][col]。 } 键盘扫描 返回键值 闭合键释放 计算键值 找到闭合键 延时去抖 有键闭合 ? Y N 21 LCD 显示模块的软件设计主要包含开始、初始化 LCD、清除 LCD、写 LCD 四个过程。 其中写包含写数据和写字符。 写数据的部分程序: //写数 (5 位数据 ) void printf_data(uchar row,uchar col,uchar count,uint dat) { uchar sh1,sh2,sh3,sh4,sh5。 sh5=dat/10000。 sh4=dat%10000/1000。 sh3=dat%1000/100。 sh2=dat%100/10。 sh1=dat%10。 write_adr(0x0c)。 switch(row) { case 1:row=0x80。 break。 case 2:row=0xc0。 break。 default:break。 } write_adr(row+col1)。 delay(500)。 if(count=5) write_data(sh5+48)。 if(count=4) write_data(sh4+48)。 if(count=3) write_data(sh3+48)。 if(count=2) write_data(sh2+48)。 if(count=1) write_data(sh1+48)。 写字符的小程序为: //写一段字符 void printf_char(uchar row,uchar col,uchar Inbuffer[31]) { uchar i。 write_adr(0x0c)。 switch(row) { 22 case 1:row=0x80。 break。 } 流程图 53 如下: 图 53 显示模块流程图 修改密码模块主要是在输入密码正确之后,按下 14 键即是修改密码键就能进入修改密码界面,其流程分为四个步骤,分别为按下 14 键并启动定时、输入修改的密码、按下确认键 11 键、 LCD 的显示。 修改密码的部分程序如下: //改密码 void ch_word(void) { unsigned char recieve=0xff,b[10],j=0。 LCD_CLR()。 printf_char(1,1,new_password。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。