发布网友 发布时间:2022-12-05 02:19
共1个回答
热心网友 时间:2024-05-11 14:48
5、汇编语言程序
ORG 0000H
LJMP START
ORG 000BH
LJMP INIT0
START:MOV R0,#70H;主程序开始
MOV R7,#0CH
INIT:MOV @R0,#00H
INC R0
DJN Z R7,INIT
MOV 72H,#10;对连字符进行装值
MOV 75H,#10
MOV TMOD,#01H;选择定时器/计数器T0的方式1
MOV TL0,#0B0H;对低位赋初值
MOV TH0,#03CH;高位赋初值
SETB EA
SETB ET0
SETB TR0
START1:LCALL SCAN
LCALL KEYSCAN
SJMP START1
DL1MS:MOV R6,#14H;延时1子程序
DL1:MOV R7,#19H
DL2:DJNZ R7,DL2
DJNZ R6,DL1
RET
DL20MS:ACALL SCAN;延时20ms子程序
ACALL SCAN
ACALL SCAN
RET ;数码管显示程序开始
SCAN:MOV A,78H
MOV B,#0AH
DIV AB ;时间秒的十位送给A,时间秒的个位送B
MOV 71H,A;时间秒要显示的十位
MOV 70H,B;时间秒要显示的个位
MOV A,79H
MOV B,#0AH
DIV AB;时间分的十位送给A,时间分的个位送B
MOV 74H,A;时间分要显示的十位送地址
MOV 73H,B;时间分要显示的个位送地址
MOV A,7AH
MOV B,#0AH
DIV AB;时间时的十位送给A,时间时的个位送B
MOV 77H,A;时间时显示的十位送地址
MOV 76H,B;时间时要显示的个位送地址
MOV R1,#70H
MOV R5,#01H
MOV R3,#09H
SCAN1:MOV A,R5;数码管的显示程序
MOV P2,A
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR;对字段表取值显示
MOV P0,A
LCALL DL1MS
INC R1
MOV A,R5
RL A
MOV R5,A
DJNZ R3,SCAN1
MOV P2,#0FFH
MOV P0,#0FFH
RET ;"0~9"和"-"的字段表
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH
;定时/计数器T0中断程序
INIT0:PUSH ACC
PUSH PSW
CLR ET0
CLR TR0
MOV TL0,#0B0H
MOV TH0,#03CH
SETB TR0
INC 7BH
MOV A,7BH
CJNE A,#14H,OUTT0;50ms是否到20次,没有到就继续执行50ms的延时
MOV 7BH,#00
INC 78H
MOV A,78H
CJNE A,#3CH,OUTT0;一秒的延时是否计到60次,没有就继续执行
MOV 78H,#00
INC 79H
MOV A,79H
CJNE A,#3CH,OUTT0
MOV 79H,#00
INC 7AH
MOV A,7AH
CJNE A,#18H,OUTT0;60分钟的延时是否计到24次,没有就
继续执行程序
MOV 7AH,#00
OUTT0:SETB ET0;启动定时器T0
POP PSW
POP ACC
RETI
;按键处理程序
KEYSCAN:CLR EA
JNB P1.0,KEYSCAN0;P1.0有按键按下则跳转到子程序
JNB P1.1,KEYSCAN1;P1.1有按键按下则跳转到子程序
JNB P1.2,KEYSCAN2;P1.2有按键按下则跳转到子程序
KEYOUT:SETB EA
RET
KEYSCAN0:LCALL DL20MS;20ms的延时消抖
JB P1.0,KEYOUT
WAIT0:JNB P1.0,WAIT0;判断按键是否松手, 松手就往下执行程序
INC 7CH
MOV A,7CH
CLR ET0
CLR TR0
CJNE A,#03H,KEYOUT;按下第一次和第二次对时、分选定
MOV 7CH,#00;按下第三次时就启动计时
SETB ET0
SETB TR0
SJMP KEYOUT
KEYSCAN1:LCALL DL20MS;按键加一的程序
JB P1.1,KEYOUT
WAIT1:JNB P1.1,WAIT1
MOV A,7CH
CJNE A,#02H,KSCAN11;如果功能键按下则对时加一调整
INC 79H
CJNE A,#3CH,KEYOUT;如果加到60则清零
MOV 79H,#00
SJMP KEYOUT
KSCAN11:INC 7AH;如果功能键是按下第
二次则对分进行加一调整
MOV A,7AH
CJNE A,#18H,KEYOUT
MOV 7AH,#00
SJMP KEYOUT
KEYSCAN2:LCALL DL20MS;延时消抖程序
JB P1.2,KEYOUT
WAIT2:JNB P1.2,WAIT2;判断是否放开按键
MOV A,7CH
CJNE A,#02H,KSCAN21;如果功能键是按下第一次对时进行减一
DEC 79H
MOV A,79H
CJNE A,#0FFH,KEYOUT
MOV 79H,#3BH
SJMP KEYOUT
KSCAN21:DEC 7AH;如果功能键是按下第二次则对分进行减一
CJNE A,#0FFH,KEYOUT
MOV 7AH,#17H
SJMP KEYOUT
END
追问是用数电的 不是用单片机控制