zxg3115 发表于 2013-4-26 14:52:21

我设计的电子密码锁(2)

因论坛发帖的字数限制,所以上一篇没有发完全。现补发如下:
本密码锁可频繁、无限制次数的随意设置、修改、存储新开锁密码。根据Microchip公司PIC16F877A数据手册资料数据说明,PIC16F877A单片机内置的EEPROM存储器的擦写次数高达万次乃至百万次以上,单片机断电后其保存在EEPROM中的数据也不会丢失,并且可以保存长达四十年以上。供电电源部分:硬件电路电源部分采用了两路供电方式供电工作。保险箱内部采用6V蓄电池或干电池作为本机的供电电源。该6V电压经以Q7、R23、D5、C7、C8组成了简单的5V稳压电路供给单片机工作,数码管及电磁铁则直接用6V电压供电工作。为了防止机内电池电压在低落时不能驱动电磁铁而无法开启密码锁,本机又辅以了一个外加DC直流电压输入接口CZ1,在内置电池电力不足的情况下,可将外部DC12V~DC30V电压通过保险箱外接的直流电源插口CZ1输入给密码锁电路板供电,考虑到外接电源供电电压的不确定性,电路中添加了一只限制电压极性的防反接二极管D3,防止外加电源电压极性与内电源极性相反时烧毁密码锁电路板。由U2集成三端稳压块LM7808稳压后的8V直流电压再经D4、R22降压、限流加在机内电池的“+、—”极电源上给整机供电。保证了密码锁电路能正常、可靠、稳定地工作。元器件的选用与电路的安装:电路中多数元器件均采用普通常用的电子元器件,无特殊要求,电磁铁按实际需要选用,数码管采用共阳极4位一体化数码管为好,这样不但可降低成本,也可以简化PCB上的布线设计,数码管的大小、发光颜色均依个人喜好和客观条件选用。电路中S3~S6数码输入按键、S7开锁确认按键安装于一个独立的PCB电路板上,并且装于保险箱的面板上,以便于按键的操作。密码修改、存储、确认按键S1、单片机系统复位按键S2(K-reset)则需要装于密码锁电路的主板之上,电路主板则装于保险箱体内,在保险箱门没有被打开之前任何人是触及不到这两个按键的。程序设计要领:程序设计首先要对PIC16F877A单片机I/O端口进行初始化设置。源程序包含:主程序,按键子程序、按键短按与长按识别子程序,定时中断子程序,密码存储子程序,数码管动态显示子程序,蜂鸣器鸣响子程序,延时子程序,限制开锁次数子程序,存储、修改密码确认子程序,读、识别开锁密码子程序等组成。整个源程序用汇编语言书写,(.asm)文本文件大小约为22KB;烧写(.HEX)码大小:2.36KB。 密码锁初始化程序段书写如下:;*************引用PIC16F877A单片机头文件********************************       LIST                     P=PIC16F877A       #INCLUDE    <P16F877A.INC>;************程序开始*****************************************************            ORG      0000H            NOP                            ;【MLAB IDE调试时需要】            GOTO   START         ;【程序跳到到START标号处执行】ORG       004H             ;【PIC单片机唯一的中断服务程序入口地址】            GOTO   TMR0_SERV;【产生中断后程序跳到TMR0_SERV标号处执行】            ORG       D'10'            ;【从地址D'10'存放程序】;=================================================================START                                       ;【程序从这里开始】       BCF      STATUS,6             ;【BANKΩ1】       BSF      STATUS,5             ;【选择体1】       CLRF      TRISC                  ;【设:RC端口为输出】                                                 ;【其中RC7为蜂鸣器输出驱动】【1电平使能】       MOVLW 0FFH                  ;【置数:0FFH到B口方向设置寄存器】       MOVWF TRISB                  ;【设置B口为输入,用于按键控制端口】         MOVLW 0C0H                  ;【设A口为输出】驱动数码管【位码】和【电磁铁】       MOVWF TRISA                  ;【RA0用于驱动电磁铁】       CLRF      OPTION_REG       ;【清选项寄存器】       MOVLW 07H                      ;【bit7=0禁止PORTB上拉,分频器分配给TMI0】       MOVWF OPTION_REG       ;【分频比=1:256】       MOVLW 07H                      ;【置数到ADCON1寄存器】      MOVWF ADCON1            ;【设置RA为普通数字I/O口】       BCF      STATUS,5             ;【到体0】;=================================================================; 密码锁主程序工作流程图如图2所示: 图2 密码锁主程序工作流程图密码锁定时中断子程序工作流程框图如图3所示。                                          图3密码锁定时中断子程序工作流程图密码锁EEPROM密码存储子程序工作流程框图如图4所示                                                图4 EEPROM密码存储子程序工作流程框图 数码管显示子程序工作流程图如图5所示。                                          图5 数码管显示子程序工作流程图 程序中数码管显示电路采的是动态扫描法进行的,这样可以简化硬件电路设计,降低电路成本。本制作中采用的是LG5641BH四位一体化封装式共阳极型LED数码管,由于本程序中数码管的段码和蜂鸣器同用一个RC端口,这样在数码管正常显示的非报警状态下,蜂鸣器是不能出声的,因此,此查表显示码非彼查表显示码。

艳阳天 发表于 2013-4-26 18:19:24

谢谢楼主分享,学习了

周金阳 发表于 2021-9-26 12:03:35

https://app.suoyiren.com/public/emotion/face_003.png
页: [1]
查看完整版本: 我设计的电子密码锁(2)