密码锁51汇编程序.docx

上传人:b****5 文档编号:7480906 上传时间:2023-01-24 格式:DOCX 页数:19 大小:21.49KB
下载 相关 举报
密码锁51汇编程序.docx_第1页
第1页 / 共19页
密码锁51汇编程序.docx_第2页
第2页 / 共19页
密码锁51汇编程序.docx_第3页
第3页 / 共19页
密码锁51汇编程序.docx_第4页
第4页 / 共19页
密码锁51汇编程序.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

密码锁51汇编程序.docx

《密码锁51汇编程序.docx》由会员分享,可在线阅读,更多相关《密码锁51汇编程序.docx(19页珍藏版)》请在冰豆网上搜索。

密码锁51汇编程序.docx

密码锁51汇编程序

SCLBITP3.2

SDABITP3.3

ORG0000H

LJMPMAIN

ORG000BH

LJMPDING0

ORG001BH

LJMPDING1

ORG0030H

MAIN:

CLRRS0;共有四种界面P,A,B,C,显示在第七位数码管上,对应存放地址为内部RAM的47H单元

CLRRS1

MOVSP,#5AH

MOV5AH,#00H;已输入的密码位数存于5AH

LCALLQING;调用清屏子程序,清屏子程序包括熄灭显示区40H~45H和清除已输入密码的次数

MOV46H,#10H;进入准备界面,设置为P界面,显示区40H~47H中,47H存放一级界面P,A,B,C,46H存放二级界面1,2,3等

MOV47H,#12H

LCALLI2CRQ;调用读密码子程序

MOVA,36H

CJNEA,#55H,LOOP1;判断校验字节是否为55H,若为55H,表示该密码为修改之后的密码,否则将密码设置为6个8

MOVR0,#30H

MOVR1,#48H

LOOP4:

MOVA,@R0

MOV@R1,A

INCR0

INCR1

CJNER1,#4EH,LOOP4

LJMPLOOP3

LOOP1:

MOVR0,#48H;系统密码存于48H~4DH单元,输入的密码将存于4EH~53H,修改密码时的系统密码将暂存于54H~59H

LOOP2:

MOV@R0,#08H;初始密码设置为888888

INCR0

CJNER0,#4EH,LOOP2

LOOP3:

LCALLXIAN;调用显示程序

LCALLPAN;调用判键程序,无键按下则A为0,有键按下则A为对应键码1~16

JZLOOP3;若无键按下,循环显示和判键,若有按键,则调用修改系统子程序,根据按键修改界面

LCALLGAI;调用修改系统的子程序

LJMPLOOP3

;此为修改系统子程序,根据不同的界面P,A,B,C,调用不同的界面修改程序

GAI:

PUSHPSW

DECA;P界面为准备界面,A界面为输入密码界面,B界面为密码正确后的用户界面,C为修改密码界面

SETBRS0;A界面共有三次输入密码的机会,分别用A1,A2,A3表示,三次密码均错误则返回至准备界面

CLRRS1;B界面有不同的功能,按键不同,功能不同,C界面分为输入密码和确认密码界面,用C1和C2表示

MOVR0,#47H

GAIPP:

CJNE@R0,#12H,GAIAP;判断是否为P界面

LCALLGAIP

LJMPGAI1

GAIAP:

CJNE@R0,#0AH,GAIBP;判断是否为A界面

LCALLGAIA

LJMPGAI1

GAIBP:

CJNE@R0,#0BH,GAICP;判断是否为B界面

LCALLGAIB

LJMPGAI1

GAICP:

CJNE@R0,#0CH,GAIDP;判断是否为C界面

LCALLGAIC

LJMPGAI1

GAIDP:

LCALLGAID;判断是否为其他,其他均归为系统崩溃

GAI1:

POPPSW

RET

;此为界面P程序

GAIP:

CJNEA,#0EH,GAIPT;界面P中判断是否为确认键

LCALLQUEP

GAIPT:

RET

QUEP:

MOVR0,#40H;P界面的确认子程序

CJNE@R0,#10H,QUEPT;若处于锁屏计数状态,确认键无效

MOV47H,#0AH;若未处于锁屏技术状态,按下确认键则修改为A界面,即理解为进入A界面

MOV46H,#01H

QUEPT:

RET

;此为界面A程序

GAIA:

CJNEA,#0FH,FTUIA;界面A中有有四种键,分别为退出,确认,删除,数字,此为判断是否为退出键

LCALLTUI

LJMPGAIAT

FTUIA:

CJNEA,#0EH,FQUEA;界面A中判断是否为确认键

LCALLQUEA

LJMPGAIAT

FQUEA:

CJNEA,#0DH,FSHANA;判断是否为删除键

LCALLSHAN

LJMPGAIAT

FSHANA:

LCALLSHU;调用输入密码程序

GAIAT:

RET

;此为界面B程序

GAIB:

CJNEA,#0FH,FTUIB;B界面有三种键,分别为功能键,修改密码键,退出键,此为判断是否为退出键

LCALLTUIB

LJMPGAIBT

FTUIB:

CJNEA,#0EH,FXIUB;判断是否为修改密码键

LCALLXIUB

LJMPGAIBT

FXIUB:

CJNEA,#00H,GAIBT

LCALLGAIB0

LJMPGAIBT

GAIBT:

RET

;此为界面C程序

GAIC:

CJNEA,#0FH,FTUIC;判断是否为退出键

LCALLTUIC

LJMPGAICT

FTUIC:

CJNEA,#0EH,FQUEC;判断是否为确认键

LCALLQUEC

LJMPGAICT

FQUEC:

CJNEA,#0DH,FSHANC;判断是否为删除键

LCALLSHAN

LJMPGAICT

FSHANC:

LCALLSHU

GAICT:

RET

;此为防系统崩溃程序

GAID:

CJNEA,#0FH,FTUID

LCALLTUI

FTUID:

RET

;此为A界面的部分子程序

QUEA:

MOVR0,#5AH;A界面的确认程序

CJNE@R0,#06H,QUEAT;输入密码不足六位

LCALLPMI

JZQUEAZ

LCALLMING;密码错误,蜂鸣报警

MOVR0,#46H

CJNE@R0,#03H,FSANA

LCALLQING;错误次数达到三次,返回准备界面,即P界面,并锁住界面60S,六十秒之后才能再次输入密码

LCALLSUO

MOV46H,#10H

MOV47H,#12H

LJMPQUEAT

FSANA:

INC46H;错误密码次数不足三次,次数自加一,调用清屏程序

LCALLQING

LJMPQUEAT

QUEAZ:

LCALLQING;输入密码正确,进入用户界面,即B界面

CLRTR1;关闭报警

SETBP3.1

MOV47H,#0BH

MOV46H,#10H

QUEAT:

RET

MING:

MOVTMOD,#11H;报警子程序,利用定时器1定时中断,密码错误的后六秒钟,逢偶数秒报警

MOVTL1,#0B0H;赋初值50ms

MOVTH1,#3CH

MOV3EH,#0AH;一秒分为20个50ms,次数20存放在3EH单元中

MOV3DH,#00H;秒数计数

SETBEA

SETBET1

SETBTR1

RET

DING1:

MOVTL1,#0B0H;定时器1中断服务程序,每隔一秒,蜂鸣一次

MOVTH1,#3CH

DEC3EH

PUSHACC

MOVA,3EH

JNZDING1T;判断是否定时满一秒,不满一秒直接返回

MOV3EH,#0AH

INC3DH

CPLP3.1;蜂鸣状态取反

MOVA,3DH

CJNEA,#0CH,DING1T;是否蜂鸣三次

SETBP3.1

CLRTR1

DING1T:

POPACC

RETI

SUO:

MOV40H,#00H;锁屏子程序,密码错误次数达三次,利用定时器0定时,60秒之后才能解锁,锁屏时间在数码管上显示

MOV41H,#06H

MOVTMOD,#11H

MOVTL0,#0B0H;每次定时时间为50ms

MOVTH0,#3CH

MOV3FH,#14H;一秒的时间分为20次50ms,次数存放于3FH中

SETBEA

SETBET0

SETBTR0

RET

DING0:

MOVTL0,#0B0H;定时器0的中断服务子程序,每过一秒,锁屏时间减一

MOVTH0,#3CH;重置初值50ms

DEC3FH

PUSHACC

MOVA,3FH

JNZDING0T;如果3FH内容不为零,说明未满一秒,直接返回

MOV3FH,#14H;如果满一秒,重置计数次数

MOVA,40H

JZGE0;判断个位是否为零

DEC40H

LJMPDING0T

GE0:

MOVA,41H

JZGE00;判断十位是否为零

DEC41H

MOV40H,#09H

LJMPDING0T

GE00:

MOV40H,#10H;如果个位和十位都为零,则熄灭锁屏时间,并关闭定时器0

MOV41H,#10H

CLRTR0

DING0T:

POPACC

RETI

;此为B界面的部分子程序

TUIB:

MOVR0,#46H;B界面的退出子程序

CJNE@R0,#10H,FAN;判断是否正在使用B界面的功能,如果正在使用,退回该功能,如果未使用,则退出B界面,返回P界面

LCALLTUI

LJMPTUIB1

FAN:

LCALLQING

MOV46H,#10H

TUIB1:

RET

XIUB:

MOVR0,#46H;B界面的修改密码子程序

CJNE@R0,#10H,XIUBT;如果不为B的初始界面,说明正在使用功能,修改密码键不生效

MOV46H,#01H;当未使用功能时,修改密码键生效,则修改界面为C1,表示第一次修改密码

MOV47H,#0CH

MOVR0,#48H;将原密码转移至内部RAM54H~59H单元

MOVR1,#54H

XIUB1:

MOVA,@R0

MOV@R1,A

INCR0

INCR1

CJNER0,#4EH,XIUB1

XIUBT:

RET

GAIB0:

MOV46H,#00H

MOV45H,#09H

MOV44H,#07H

MOV43H,#00H

MOV42H,#05H

MOV41H,#01H

MOV40H,#06H

RET

;此为界面C的部分子程序

TUIC:

LCALLHUIMI;取消修改密码,密码恢复并退至B界面

LCALLQING

MOV46H,#10H

MOV47H,#0BH

RET

QUEC:

MOVR0,#5AH;C界面修改密码确认子程序

CJNE@R0,#06H,QUECT;判断是否输入六位数,如果未满六位直接返回,确认键无效,如果满六位,确认键有效

LCALLQING

MOVR0,#46H

CJNE@R0,#01H,ERCI;判断是否是第一次输入密码还是第二次输入密码

INC46H;第一次输入密码后按确认键,并保存第一次的密码至48H~4DH单元

MOVR0,#48H

MOVR1,#4EH

QUEC1:

MOVA,@R1

MOV@R0,A

INCR0

INCR1

CJNER0,#4EH,QUEC1

LJMPQUECT

ERCI:

LCALLPMI;如果为第二次输入,则判断两次输入的密码是否相同

JZCHENG;如果A为0,说明两次密码相同,则退出系统,回到准备界面,等待重新登录

MOV46H,#01H;如果A不为0,说明两次密码不相同,则回到C1,重新输入第一次密码

MOV47H,#0CH

LJMPQUECT

CHENG:

LCALLTUI

LCALLI2CWQ

QUECT:

RET

;以下部分通用子程序及数据表

PMI:

MOVR0,#48H;判断密码是否正确,正确则A赋值零,错误则A赋值非零

MOVR1,#4EH

PMI1:

MOVA,@R0

CLRC

SUBBA,@R1

INCR0

INCR1

JNZPMI2;A不为0,密码错误,跳出循环

CJNER0,#4EH,PMI1

PMI2:

RET

TUI:

LCALLQING;退出系统,回到准备界面,即P界面

MOV46H,#10H

MOV47H,#12H

RET

SHAN:

MOVA,5AH;删除密码子程序,如果已经输入密码,则删除一位,如果未输入密码,不做操作

JZSHAN1

DEC5AH

MOVA,5AH

ADDA,#40H

MOVR0,A

MOV@R0,#10H

SHAN1:

RET

SHU:

MOVR0,#5AH;输入密码子程序,如果已经输入六位密码,不做操作,如果已输入密码不足六位,则添加一位

CJNE@R0,#06H,NMAN

LJMPSHU1

NMAN:

MOVR2,A;将新输入的密码存入密码缓冲区4EH~53H,修改界面,并将密码位数加一

CJNEA,#0AH,SHU2

SHU2:

JNCSHU1;利用CJNE会改变C的性质来比较按键值的大小,如果C为零,说明按键值大于或等于0AH,直接返回,不做操作

MOVA,#4EH

ADDA,5AH

MOVR0,A

MOVA,R2

MOV@R0,A

MOVA,#40H

ADDA,5AH

MOVR0,A

MOV@R0,#13H

INC5AH

SHU1:

RET

QING:

MOV5AH,#00H;清屏子程序,将段码0FFH送入40H~45H单元,并将密码位数清零,即把5AH单元清零

MOVR0,#40H

QING1:

MOV@R0,#10H

INCR0

CJNER0,#46H,QING1

RET

HUIMI:

MOVR0,#48H;恢复密码子程序,把从B界面进去C界面时保存在54H~59H单元的原密码重新送入密码区48H~4DH

MOVR1,#54H

HUIMI1:

MOVA,@R1

MOV@R0,A

INCR0

INCR1

CJNER0,#4EH,HUIMI1

RET

CHA:

PUSHPSW;查键子程序,在有键按下时使用,累加器A返回的值为1~16,对应十六个键

SETBRS0

CLRRS1

MOVR2,#00H;行数存于R2

MOVR3,#00H;列数存于R3

MOVA,#0FEH;扫描初值为0FEH

CHA1:

MOVR4,A;行扫描

MOVP1,A

MOVA,P1

ANLA,#0F0H

XRLA,#0F0H

JZHAN

JBACC.4,SUAN;根据A的高四位判断按键位于第几列

INCR3

JBACC.5,SUAN

INCR3

JBACC.6,SUAN

INCR3

JBACC.7,SUAN

MOVA,#00H

CHA3:

POPPSW

RET

SUAN:

MOVB,#04H;计算键码程序段,根据行数和列数计算键码

MOVA,R2

MULAB

ADDA,R3

INCA

LJMPCHA3

HAN:

INCR2;修改扫描值程序段,将后一行置为低电平

MOVA,R4

RLA

CJNER2,#04H,CHA1

MOVA,#00H

LJMPCHA3

CPAN:

MOVP1,#0F0H;粗判键子程序,有键按下则A非零,无键按下则A为零

MOVA,P1

ANLA,#0F0H

XRLA,#0F0H

RET

PAN:

LCALLCPAN;细判键子程序,包含消抖,并调用了查键子程序,无键按下时A返回0,有键按下则A返回键码1~16,对应十六个按键

JZPAN1

LCALLXIAN

LCALLCPAN

JZPAN1

LCALLCHA

PUSHACC

PAN2:

LCALLXIAN

LCALLCPAN

JNZPAN2

POPACC

PAN1:

RET

YAN:

PUSHPSW;延时子程序,延时1ms

SETBRS0

CLRRS1

MOVR7,#02H

YAN1:

MOVR6,#00H

DJNZR6,$

DJNZR7,YAN1

POPPSW

RET

XIAN:

PUSHPSW;显示子程序,根据内部RAM的40H~47H单元内容显示

PUSHDPH

PUSHDPL

PUSHACC

CLRRS1

SETBRS0

MOVR0,#40H

MOVR2,#00H

XIAN1:

MOVP0,#0FFH;消影,将数码管全部熄灭

MOVDPTR,#WEI;先送位码

MOVA,R2

MOVCA,@A+DPTR

MOVP2,A

MOVDPTR,#DUAN;后送段码

MOVA,@R0

MOVCA,@A+DPTR

MOVP0,A

INCR0

INCR2

LCALLYAN

CJNER2,#08H,XIAN1

MOVP0,#0FFH;显示小数点,小数点固定在八位数码管的倒数第二位上

MOVDPTR,#WEI

MOVA,#06H

MOVCA,@A+DPTR

MOVP2,A

MOVDPTR,#DUAN

MOVA,#11H

MOVCA,@A+DPTR

MOVP0,A

LCALLYAN

POPACC

POPDPL

POPDPH

POPPSW

RET

;24C04芯片相关程序

I2CS:

SETBSDA

LCALLYYAN

SETBSCL

LCALLYYAN

CLRSDA

LCALLYYAN

CLRSCL

LCALLYYAN

RET

I2CP:

CLRSDA

LCALLYYAN

SETBSCL

LCALLYYAN

SETBSDA

LCALLYYAN

RET

I2CW:

PUSHPSW

MOVR3,#08H

I2CW1:

RLCA

MOVSDA,C

LCALLYYAN

SETBSCL

LCALLYYAN

CLRSCL

LCALLYYAN

DJNZR3,I2CW1

SETBSDA

LCALLYYAN

SETBSCL

LCALLYYAN

CLRSCL

LCALLYYAN

POPPSW

RET

I2CR:

PUSHPSW

MOVR3,#08H

I2CR1:

SETBSCL

LCALLYYAN

MOVC,SDA

RLCA

LCALLYYAN

CLRSCL

LCALLYYAN

SETBSDA

LCALLYYAN

DJNZR3,I2CR1

CLRSDA

LCALLYYAN

SETBSCL

LCALLYYAN

CLRSCL

LCALLYYAN

POPPSW

RET

I2CWQ:

PUSHPSW

MOVR0,#48H

LC

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1