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
追问是用数电的 不是用单片机控制