zxg3115 发表于 2013-4-26 14:54:58

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

程序设计要领:程序设计首先要对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端口,这样在数码管正常显示的非报警状态下,蜂鸣器是不能出声的,因此,此查表显示码非彼查表显示码。显示码程序及码值表程序段如下:;--------------------------------------------------------------------------------------------------------------;       ADDWF PCL,1       RETLW   0X40      ;=0显示“0”       RETLW   0X79      ;=1显示“1”       RETLW   0X24      ;=2显示“2”       RETLW   0X30      ;=3显示“3”       RETLW   0X19      ;=4显示“4”       RETLW   0X12      ;=5显示“5”       RETLW   0X02      ;=6显示“6”       RETLW   0X78      ;=7显示“7”       RETLW   0X00      ;=8显示“8”       RETLW   0X10      ;=9显示“9”       RETLW   0X08      ;=A显示“A”       RETLW   0X03      ;=b显示“b”       RETLW   0X27      ;=c显示“c”       RETLW   0X21      ;=d显示“d”       RETLW   0X06      ;=E显示“E”       RETLW   0X0E      ;=F显示“F”;---------------------------------------------------------------------------------------------------------------; 程序烧写:用QL2006-PIC单片机编程器烧写程序的方法和步骤参考如下:将所用的编程器硬件与电脑连接好,并正确的放置、锁紧待烧写程序的PIC16F877A单片机芯片至编程器的IC锁紧坐。启动烧写软件,启动后的烧写软件窗口界面如图6所示。在软件烧写对话框的左下边的“连接端口处”可看到 “编程器已连接”字样,同时在其右边还能看到“等待命令”字样。再点击烧写软件左上角的“文件加载”按钮 将本文附带的(.hex)文件加载到烧写软件的工作窗口中。按图7所示设置好相关“配置位”后即可点击“编程按钮”,片刻后就会看到提示“烧写成功”的对话框。将烧好程序的芯片放到硬件电路板上即可按上述方法操作这个密码锁了。最后祝你成功!程序烧写注意事项:PIC系列单片机均配有CONFIG“配置位”选项寄存器。这一寄存器在PIC单片机内部的地址是2007H单元。PIC单片机配置位的设置举足轻重,它的设置正确与否决定着单片机程序是否能够正常运行,因此必须引起足够的重视和对待。                                                  图6 编程器烧写软件工作界面                图7 PIC单片机芯片烧写配置位设置窗口工作界面

zxg3115 发表于 2013-4-26 14:58:22

本帖最后由 zxg3115 于 2013-4-26 15:16 编辑

由于文章较长,所以分3次才能发表完。
在这里发表此文的意义是:让锁匠们大概了解一下【电子锁】的设计方法及要点,也对督促锁匠们的进取心有积极的促进作用。也希望此文对锁匠们有所启迪。
哦:别忘了看完跟帖呀。

艳阳天 发表于 2013-4-26 18:20:01

谢谢楼主分享,学习了

春雨锁城 发表于 2013-4-26 19:25:34

想学    就是编程难度太大/:79:

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

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