电子密码锁软件部分.doc

上传人:飞****2 文档编号:60327035 上传时间:2022-11-15 格式:DOC 页数:14 大小:67KB
返回 下载 相关 举报
电子密码锁软件部分.doc_第1页
第1页 / 共14页
电子密码锁软件部分.doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《电子密码锁软件部分.doc》由会员分享,可在线阅读,更多相关《电子密码锁软件部分.doc(14页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、 主程序流程图:开始初始化调用显示有键按下?识别按键功能键?Y N输入新密码确认键?修改密码子程序Y删除键?N清除屏幕所输数字原始密码确认键?开门键?屏幕显示:“PASS NEW WORD”Y开门N开始修改密码子程序流程图:输入原始密码按下键比较密?码?重新输入屏幕显示:“:”输入新密码存入缓冲再输入一次比较密码?重新输入存入存储芯片NY电子锁源程序:RSBIT P3.5 ;RSBIT 接口3第5位 RWBIT P3.6 ;RWBIT 接口3第6位 EBIT P3.7 ;EBIT 接口3第7位SCL BIT P3.2 ;串行时钟SCL BIT,P3.2 SDA BIT P3.3 ;串行数据SD

2、A BIT,P3.3 FLAG BIT 00H CHN BIT 62H GAI BIT 60H ORG 00H ;定义当前位置为 00HLJMPMAIN ORG 0BH ;定义当前位置为 0BH JMP TIM0 ;间接转移到 TIM0MAIN: MOVSP,#70H ;设置堆栈 MOVR1,#20H ;把密码存放到at24c02的20H MOVR6,#06 ;6个密码 MOVR0,#30H ;存入RAM 30H-35H S1: LCALL START1 ;长调用 START1MOV A, #0A0H ;送器件地址及写标志 传送 寄存器A,立即数0A0H LCALL WBYTE ;长调用 WB

3、YTEMOV A, R1 ;送单元地址 传送 寄存器A,R1 LCALL WBYTE ;长调用 WBYTELCALL START1 ;长调用 START1MOV A,#0A1H ;送器件地址及读标志 传送 寄存器A,立即数0A1H LCALL WBYTE ;长调用 WBYTELCALL RBYTE ;长调用 RBYTEMOVR0,A ;MOVR0,A LCALL STOP ;长调用 STOPINC R1 ; 加1 通用寄存器1,INC R0 ; 加1 通用寄存器0,DJNZ R6, S1; 减一不为0转移 通用寄存器6,S1 MOVP2,#01H ;清除LCD屏幕 CALLENABLE MOV

4、P2,#38H ;LCD功能设定,DL=1(8位),N=1(2行显示) CALLENABLE MOVP2,#0FH ;显示屏幕ON/OFF,D=1(显示ON) CALLENABLE ;C=1(光标ON),B=1(闪烁ON) MOVP2,#06H ;LCD模态设定,I/D=1(技术地址加1) CALLENABLE MOVP2,#80H ;LCD第1行地址 CALLENABLE MOVDPTR,#TABLE1 ;到TABLE取码显示“PASS WORD:” CALLWRITE1 MOVP2,#8AH ;光标所在位置(第1个数字地址) CALLENABLE MOV R7,#03H ;传送 通用寄存器

5、7,立即数03H CLRGAI START: MOVR4,#06 ;清除按键存放RAM的内容 MOVR0,#40H CLEAR:MOVR0,#00H INCR0 DJNZR4,CLEAR MOVR0,#40H ; 按键值的RAM 40H-45H L1:MOVR3,#0F7H ;键盘行扫描初值 MOVR1,#00H ;TABLE2(键盘内码)的取码指针L2:MOVA,R3 MOVP0,A ;行扫描输出MOVA,P0 ;读入键盘值存入R4 MOVR4,A SETBC ;C=0表示有按MOVR5,#04H L3:RLCA JNCKEYIN INCR1 DJNZR5,L3 ;4个列扫描完毕否? MOV

6、A,R3 ;扫描下1行 SETBC RRCA MOVR3,A JCL2 ;4个行扫描完毕否? JMPL1 ;*按键扫描部分 KEYIN:MOVR2,#10 ;消除抖动10毫秒 D2:MOVR6,#248 DJNZR6,$ DJNZR2,D2 D3:MOVA,P0 ;读入键盘值与前值(R4)比较是否相等? XRLA,R4 :相等表示按键尚未放开? JZD3 MOVA,R1 ;至TABLE2取键盘码 MOVDPTR,#TABLE2 MOVCA,A+DPTR MOVR2,A ;先存入R2,以免数据被破坏XRLA,#41H ;是否按“*”,设定密码 JZSET0 MOVA,R2 XRLA,#42H ;

7、是否按“#”,清除屏幕 JZ WU ;寄存器为0转移 WUMOVA,R2 XRLA,#43H ;是否按“A”,显示密码 JZSHE;L1MOVA,R2 XRLA,#44H ;是否按“B”,比较密码,相同则开门 JZKKK;MOVA,R2 XRLA,#45H ;“C”键无作用 JZSU MOVA,R2 XRLA,#46H ;“D”键无作用 JZL1 MOVA,R2 ;数字码显示至LCDPUSHAcc MOVA,#2AH CALLWRITE2 POPAcc SUBBA,#30H ;键盘码为ASCII码,减30H变为十六进制码 MOVR0,A ;存入40-45H INCR0 JMPKKL KKK:J

8、MPCOMP KKL:CALLCHECK ;检查LCD是否显示完第6个数字 JMPL1 SHE:LJMP YZ YI:LJMP MAIN WU:LJMP CLEAR1 ;*密码修改键 SET0: JNB CHN,CLEAR1 JB GAI,C0 SE: SETBGAI MOVR6,#06H ;密码设定 MOVR0,#40H ;键盘显示器存放RAM40-45H MOVR1,#30H ;密码存放RAM 30H-35H SET2:MOVA,R0 XCHA,R1 INCR0 INCR1 DJNZR6,SET2 JMP CLEAR1 ;清除LCD6个数字为“” C0: MOVR1,#40H MOVR0,

9、#30H ;30H为“0”的ASCII码 MOVR2,#06H CO2:MOVA,R0 XRLA,R1 JNZYI INCR0 INCR1 DJNZ R2,CO2 ;减一不为0转移 通用寄存器2,CO2 LCALL SE2 ;长调用 SE2 JMPCLEAR1 SE2:MOVR6,#06H MOVR0,#40H MOVR2,#20H MOVR1,#30H SET1:LCALL START1; 长调用 START1MOV A, #0A0H ;送器件地址及读写标志 传送 寄存器A,立即数0A0H LCALL WBYTE ;长调用 WBYTEMOV A, R2 ;送单元地址 传送 寄存器A,R2 L

10、CALL WBYTE ;长调用 WBYTEMOV A,R0;写入数据 传送 寄存器A,通用寄存器0指向的单元的内容LCALL WBYTE ;长调用 WBYTELCALL STOP ; 长调用 STOP, LCALL DELAY2 ;等待 长调用 DELAY2,INC R0; 加1 通用寄存器0 INC R1 ;加1 通用寄存器1INCR2 ;INCR2 DJNZ R6,SET1 ; 减一不为0转移 通用寄存器6,SET1 CLRGAI CLR CHN ;清0 CHNJMPCLEAR2 SU: JMP CH ;间接转移到 CH;*清除功能键CLEAR1:MOVP2,#8AH CALLENABLE

11、 MOVR1,#06 A4:MOVA,#30H CALLWRITE2 DJNZR1,A4 MOVP2,#8AH CALLENABLE JMPSTART CLEAR2:MOVP2,#8AH CALLENABLE MOVR1,#06 A2:MOVA,#30H CALLWRITE2 DJNZR1,A2 MOVP2,#8AH CALLENABLE JMPMAIN YZ: MOVR1,#40H MOVR0,#30H ;密码存放RAM 30H-35H MOVR2,#06H ;6个数 YZ1:MOVA,R0 XRLA,R1 JNZERROR INCR0 INCR1 DJNZ R2,YZ1 CALLNEW L

12、JMP CLEAR1 ;长转移到 CLEAR1;*开锁功能键COMP: MOVR1,#40H MOVR0,#30H MOVR2,#06H COMP1: MOVA,R0 XRLA,R1 JNZERROR ;比较是否相等? INCR0 INCR1 DJNZ R2,COMP1 ;减一不为0转移 通用寄存器2,COMP1CALLRIGHT ;6个码都相等则LCD显示“RIGHT!”CLRP3.1 ;电锁动作CALLDELAY1 CALLSPACE ;LCD清除“RIGHT!” CALLDELAY1 JMPCLEAR1 CH:SETBP3.1 ;令电锁不动作ERROR:MOVP2,#0C0H ;LCD第

13、2行地址CALLENABLE MOVDPTR,#TABLE4 ;至TABLE4取出“ERROR! ” CALLWRITE1 ;输出至LCD显示CALLDELAY1 CALLSPACE ;LCD清除“ERROR!”为空白 DJNZ R7,S0 ;减一不为0转移 通用寄存器7,S0 LCALL MUSIC ;长调用 MUSIC S0: JMPCLEAR1 ;LCD清除为“” S2: JMP CLEAR2 ;间接转移到 CLEAR2RIGHT:MOVP2,#0C0H ;LCD第2行地址 CALLENABLE MOVDPTR,#TABLE5 ;至TABLE6取“” CALLWRITE1 ;输出至LCD

14、显示6个空白 LCALLBAOJING1 LCALL BAOJING2 ;长调用 BAOJING2RET ;子程序返回 ;*原密码确认键NEW:MOVP2,#0C0H CALLENABLE MOVDPTR,#TABLE3 CALLWRITE1 LCALLBAOJING1 LCALL BAOJING2 ;长调用 BAOJING2 SETB CHN ;位-置1 CHNRET ;子程序返回 ;500hz报警信号程序; BAOJING1: MOV R2,#200 ;传送 通用寄存器2,立即数200DV: CPL P3.0 ;取反 接口3第0位LCALL DELAY500 ;长调用 DELAY500LC

15、ALL DELAY500 ;长调用 DELAY500DJNZ R2,DV ;减一不为0转移 通用寄存器2,DVRET ;子程序返回 ;1khz报警信号程序; BAOJING2: MOV R2,#200 ;传送 通用寄存器2,立即数200DV1: CPL P3.0 ;取反 接口3第0位LCALL DELAY500 ;长调用 DELAY500DJNZ R2,DV1 ;减一不为0转移 通用寄存器2,DV1RET ;子程序返回 ;500us延时程序; DELAY500: MOV R3,#249 ;传送 通用寄存器3,立即数249LOOP: DJNZ R3,LOOP ;减一不为0转移 通用寄存器3,LO

16、OPRET ;子程序返回 ;*2002年的第一场雪* MUSIC: MOV TMOD,#01H ;传送 TMOD,立即数01H MOV IE,#82H ;传送 IE,立即数82HSTART2: MOV 10H,#00H ;传送 10H,立即数00HNEXT: MOV A,10H ;传送 寄存器A,10H MOV DPTR,#TABL ;传送 DPTR,立即数TABL MOVC A,A+DPTR ;程序存储器-读 寄存器A,A+DPTR指向的单元的内容 MOV R2,A ;传送 通用寄存器2,寄存器A JZ END0 ;寄存器为0转移 END0 ANL A,#0FH ;逻辑-与 寄存器A,立即数

17、0FH MOV R5,A ;传送 通用寄存器5,寄存器A MOV A,R2 ;传送 寄存器A,通用寄存器2 SWAP A ;A高低半字节交换 寄存器A ANL A,#0FH ;逻辑-与 寄存器A,立即数0FH JNZ SING ;寄存器不为0转移 SING CLR TR0 ;清0 TR0 JMP M1 ;间接转移到 M1SING: DEC A ;减1 寄存器A MOV 22H,A ;传送 22H,寄存器A RL A ;循环左移 寄存器A MOV DPTR,#TABL1 ;传送 DPTR,立即数TABL1 MOVC A,A+DPTR ;程序存储器-读 寄存器A,A+DPTR指向的单元的内容 MO

18、V TH0,A ;传送 TH0,寄存器A MOV 21H,A ;传送 21H,寄存器A MOV A,22H ;传送 寄存器A,22H RL A ;循环左移 寄存器A INC A ;加1 寄存器A MOVC A,A+DPTR ;程序存储器-读 寄存器A,A+DPTR指向的单元的内容 MOV TL0,A ;传送 TL0,寄存器A MOV 20H,A ;传送 20H,寄存器A SETB TR0 ;位-置1 TR0M1: CALL DELAY0 ;调用 DELAY0 INC 10H ;加1 10H JMP NEXT ;间接转移到 NEXTEND0: CLR TR0 ;清0 TR0 LJMP S2; J

19、MP START2 长转移到 S2TIM0: PUSH ACC ;入栈 ACC PUSH PSW ;入栈 PSW MOV TL0,20H ;传送 TL0,20H MOV TH0,21H ;传送 TH0,21H CPL P3.0 ;取反 接口3第0位POP PSW ;出栈 PSW POP ACC ;出栈 ACC RETI ;中断返回 DELAY0: MOV R2,#01 ;传送 通用寄存器2,立即数01M2: MOV R4,#187 ;传送 通用寄存器4,立即数187M3: MOV R3,#248 ;传送 通用寄存器3,立即数248 DJNZ R3,$ ;减一不为0转移 通用寄存器3,到本行 D

20、JNZ R4,M3 ;减一不为0转移 通用寄存器4,M3 DJNZ R2,M2 ;减一不为0转移 通用寄存器2,M2 DJNZ R5,DELAY0 ;减一不为0转移 通用寄存器5,DELAY0 RET ;子程序返回 TABL1: ; DW 64021,64103,64260,64400 ;DW 64021,64103,DW 64524,64580,64684,64777 ;DW 64524,64580,DW 64820,64898,64968,65030 ;DW 64820,64898,DW 65058,65110,65157,65178 ;DW 65058,65110,TABL: ; ;1

21、DB 04H,0A2H,0A2H,0A2H,0A2H,0A2H,0A2H,0B4H,0A2H,92H,72H,72H,72H,72H,92H DB 92H,92H,92H,92H,92H,92H,62H,72H,72H,72H,04H DB 02H,0A2H,0A2H,0A2H,0A4H,0A2H,0A2H,0B4H,0A2H,92H,92H,0A2H,0A4H DB 02H,62H,62H,62H,62H,62H,52H,0A2H,94H,92H,92H,92H,72H,74H DB 04H,0A2H,0A2H,0A2H,0A2H,0A2H,0A2H,0B4H,0A2H,92H,72H,72

22、H,72H,72H,92H DB 92H,92H,92H,92H,92H,92H,62H,72H,72H,72H,04H DB 02H,0A2H,0A2H,0A2H,0A4H,0A2H,0A2H,0B4H,0A2H,92H,92H,0A2H,0A4H DB 02H,62H,62H,62H,62H,62H,52H,0A2H,94H,92H,92H,92H,72H,74H ;3 DB 02H,0A2H,0A2H,0A2H,0A2H,0A2H,0A2H,0B4H,0A2H,0B2H,92H,72H,74H DB 02H,62H,62H,62H,64H,62H,52H,74H,62H,72H,52H,

23、32H,34H DB 02H,0A2H,0A2H,0A2H,0A2H,0A2H,0A2H,0A2H,0B4H,0A2H,0B2H,92H,72H,74H DB 02H,62H,62H,62H,62H,62H,52H,32H,94H,92H,92H,62H,72H,74H DB 02H,0A2H,0A2H,0A2H,0A4H,0A2H,0A2H,0B4H,0A2H,92H,72H,72H,74H DB 02H,62H,62H,62H,62H,62H,62H,52H,74H,62H,72H,52H,32H,34H ;4 DB 02H,62H,62H,62H,62H,62H,52H,32H,52H,

24、52H,52H,32H,32H,22H,12H DB 02H,62H,62H,62H,62H,62H,52H,32H,62H,72H,72H,72H,72H DB 02H,62H,62H,62H,62H,62H,52H,32H,92H,0A2H,0A2H,0A2H,0A2H RET ;子程序返回 ;* SPACE:MOVP2,#0C0H CALLENABLE MOVDPTR,#TABLE6 CALLWRITE1 RET ;子程序返回 CHECK:MOVP2,#0FFH CLRRS SETBRW CLRE NOP ;空操作 SETBE JBP2.7,CHECK MOVA,P2 ANLA,#7FH

25、 CJNEA,#10H,A3 MOVP2,#8AH CALLENABLE MOVR0,#40H A3:RET ;子程序返回 ENABLE:CLRRS CLRRW CLRE CALLDELAY ;CALLDELAY ;CALLDELAY SETBE RET ;子程序返回 WRITE1:MOVR1,#00H A1:MOVA,R1 MOVCA,A+DPTR CALLWRITE2 INCR1 CJNEA,#0FEH,A1 RET ;子程序返回 WRITE2:MOVP2,A SETBRS CLRRW CLRE CALLDELAY ;CALLDELAY ;CALLDELAY SETBE RET ;子程序返

26、回 WBYTE: NOP ;写字节 从这开始 空操作 MOV R3, #08H ;传送 通用寄存器3,立即数08HWBY0: CLR SCL ;清0 SCLRLC A ;带进位循环左移 寄存器AMOV SDA, C ;传送 SDA,进位标志/累加位SETB SCL ;位-置1 SCLDJNZ R3, WBY0 ;减一不为0转移 通用寄存器3,WBY0CLR SCL ;清0 SCLNOP ;空操作 SETB SCL ;位-置1 SCLNOP ;空操作 JB SDA, $ ;等待数据线上的应答信号 位-为1转移到 SDA,$ CLR SCL ;清0 SCLNOP ;空操作 RET ;子程序返回 ;

27、* RBYTE:NOP ;读字节 空操作 MOV R3,#08H ; 传送 通用寄存器3,立即数08H RBY0: CLR SCL ; 清0 SCL,NOP ;空操作 SETB SCL ; 位-置1 SCL,NOP ;空操作 MOV C, SDA ; 传送 进位标志/累加位,SDA RLC A ; 带进位循环左移 寄存器A,DJNZ R3, RBY0 ; 减一不为0转移 通用寄存器3,RBY0 RET ;子程序返回 START1: CLR SCL ;启动 清0 SCL,NOP ;空操作 SETB SDA ;位-置1 SDANOP ;空操作 SETB SCL ;位-置1 SCLNOP ;空操作

28、CLR SDA ;清0 SDANOP ;空操作 CLR SCL ;清0 SCLRET ;子程序返回 ;* STOP: CLR SCL ;停止 清0 SCL,NOP ;空操作 CLR SDA ;清0 SDANOP ;空操作 SETB SCL ;位-置1 SCLNOP ;空操作 SETB SDA ;位-置1 SDANOP ;空操作 CLR SCL ;清0 SCLRET ;子程序返回 ;* DELAY2: MOV R4,#03H ;传送 通用寄存器4,立即数03HW1: MOV R5,#0FFH ;传送 通用寄存器5,立即数0FFHW2: NOP ;空操作 DJNZ R5,W2 ;减一不为0转移 通

29、用寄存器5,W2DJNZ R4,W1 ;减一不为0转移 通用寄存器4,W1RET ;子程序返回 DELAY: MOVR4,#250D6:MOVR5,#100 DJNZR5,$ DJNZR4,D6 RET DELAY1:MOVR5,#20 D5:MOVR6,#200 D4:MOVR4,#248 DJNZR4,$ DJNZR6,D4 DJNZR5,D5 RET TABLE1:DBPASS WORD:,0FEH TABLE2:DB31H,32H,33H,43H DB34H,35H,36H,44H DB37H,38H,39H,45H DB41H,30H,42H,46H TABLE3:DBPASS NEW WORD! ,0FEH TABLE4:DBERROR!,0FEH

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com