1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| ORG 0000H AJMP START
ORG 0030H START: MOV SP,#60H ;设置堆栈指针 MOV R6,#1 ;倒计时器十位初值 MOV R7,#0 ;倒计时器个位初值 LCALL LOAD ;调用LOAD子程序 LCALL DISPLAY ;调用DISPLAY子程序 SETB P3.0 ;P3.0 = 1,使LED灭灯 LOOP: SETB P1.1 ;P1.1 = 1 JB P1.1,GOON ;若P1.1 =1,则说明未按下装载按钮,跳转到GOON标号;否则进入WAIT0进行装载初值 WAIT0: SETB P1.1 ;P1.1 = 1 LCALL DELAY50ms ;调用DELAY50ms子程序延时50ms CPL P3.0 ;对P3.0位取反 JNB P1.1,WAIT0 ;当P1.1 = 0,跳转到WAIT0标号。这里跳转的意义是使得如果LOAD按钮按下未松开,则LED始终以10Hz频率闪烁 MOV R6,#1 ;倒计时器十位初值 MOV R7,#0 ;倒计时器个位初值 LCALL LOAD ;调用LOAD子程序 LCALL DISPLAY ;调用DISPLAY子程序 SETB P3.0 ;P3^0 = 1,关闭LED GOON: JB P1.0,$ ;若P1.0 = 1,则说明按下开始按钮为按下,等待按下开始计时按钮 WAIT1: SETB P1.0 ;P1.0 = 1 JNB P1.0,WAIT1 ;若P1.0 = 0,说明开始计时按钮按下未松开,等待按钮松开 ;以上代码为重载后按下并弹起开关
NEXT1: MOV R4,#20 ;R4 = 20 DELAY1s: LCALL DELAY50ms ;调用50ms延时程序 DJNZ R4,DELAY1s LCALL ADJUST ;调用调整数值子程序 LCALL DISPLAY ;调用数码管显示数值子程序 SJMP NEXT1 ;跳转到NEXT1
DELAY50ms: ;延时50ms子程序 MOV R7,#5 DL1: MOV R6,#100 DL2: MOV R5,#48 DJNZ R5,$ DJNZ R6,DL2 DJNZ R7,DL1 RET
ADJUST: ;调整数值子程序 MOV A,30H ;将30H单元的内容传给A JZ BRO ;如果内容为0则跳转到BRO DEC 30H ;否则让30H单元中的内容减1 SJMP RET1 ;无条件跳转到RET BRO: MOV A,31H ;将31H单元的内容传给A JZ WAIT2 ;如果内容为0则跳转到WAIT2 MOV 30H,#9 ;将30H单元的内容更新为9 DEC 31H ;31H单元中的内容减1 RET1: RET ;子程序返回 WAIT2: ;跳转到这里说明倒计时结束,使LED以10Hz频率闪烁并等待装载按钮按下 LCALL DELAY50ms CPL P3.0 JB P1.1,WAIT2 SJMP LOOP ;无条件跳转到LOOP
LOAD: ;装载子程序 MOV 30H,R7 ;将30H作为个位数据存储的地方 MOV 31H,R6 ;将31H作为十位数据存储的地方 CLR A ;A = 0 MOV DPTR,#TABLE ;使DPTR指向表格入口 MOVC A,@A+DPTR MOV DPTR,#D1sADD MOVX @DPTR,A MOV DPTR,#D10sADD MOVX @DPTR,A RET
DISPLAY: MOV A,30H MOV DPTR,#TABLE MOVC A,@A+DPTR ;将30H对应数字的7段LED共阳显示码传给A MOV DPTR,#D1sADD ;指向和1s七段LED相连的373 MOVX @DPTR,A ;将显示码传给373输出 MOV A,31H MOV DPTR,#TABLE MOVC A,@A+DPTR ;将31H对应数字的7段LED共阳显示码传给A MOV DPTR,#D10sADD ;指向和10s七段LED相连的373 MOVX @DPTR,A ;将显示码传给373输出 RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;7 段 LED 共阳显示码 D1sADD EQU 0FE00H D10sADD EQU 0FD00H
END
|