📄 定时记数器.asm
字号:
ORG 0000H
AJMP BEGIN
ORG 000BH
AJMP COUNT
ORG 0030H
BEGIN: MOV DPTR,#8003H
MOV A,#80H
MOVX @DPTR,A
MOV SP,#50H
MOV 08H,#4H ;控制记数
MOV R1,#21H ;R1指向21H单元
MOV TMOD,#01H ;若是功能键则
MOV TH0,#3CH
MOV TL0,#0B0H
MOV IE,#82H
RETURN: ACALL SCAN ;键盘扫描
CJNE A,#0FFH,NEXT ;如果有键按下则转移
SJMP RETURN
NEXT: CJNE A,#0AH,NEXT1 ;判断键型
NEXT1: LCALL DELAY200MS ;延时等待,以防键盘多次反应
JC NUM
CJNE A,#0Ah,RESENT ;若是复位键则转移到复位程序
JB 00H,TT1 ;开记时程序
SETB 00H
SETB TR0
MOV R4,#14H
SJMP RETURN
TT1: CLR 00H ;暂停记时
CLR TR0
SJMP RETURN ;继续扫描
RESENT: CLR TR0
SJMP BEGIN
NUM: DJNZ 08H,GOTO ;检验数字位如已经输入三个数字则不在允许用户键数字
MOV 08H,#1H
SJMP RETURN
GOTO: LCALL DISPLAY1 ;显示数字
LCALL DELAY200MS
SJMP RETURN ;继续扫描
COUNT:
XXXXXX: MOV A,0CH
MOV B,#100
MUL AB
MOV 0CH,A ;
MOV A,0BH ;
MOV B,#10
MUL AB
ADD A,0CH
ADD A,0AH
MOV R3,A
CJNE A,#100,THEN1
THEN1: JC ERROR
ERROR:
SCAN: CLR P1.0 ;键盘扫描子程序**********************************************
CLR P1.1 ; 占用资源RO,A,26H,字型码出口为26H
CLR P1.2 ; 数字出口为A. 堆栈2字节
CLR P1.3 ; **********************************************
MOV A,P1
ANL A,#0F0H
CJNE A,#0F0H,KEYSCAN ;如有键按下则转移
SJMP EXIT
KEYSCAN:ACALL DLY20MS ;延时
MOV R0,#00H ;列数用R0来记录
CLR P1.0
SETB P1.1
SETB P1.2
SETB P1.3
MOV A,P1
ANL A,#0F0H
CJNE A,#0F0H,TTTT1 ;若在本行则转移
MOV A,R0 ;扫描下一行
ADD A,#4H
MOV R0,A
SETB P1.0
CLR P1.1
SETB P1.2
SETB P1.3
MOV A,P1
ANL A,#0F0H
CJNE A,#0F0H,TTTT1 ;若在本行则转移
MOV A,R0 ;扫描下一行
ADD A,#4H
MOV R0,A
SETB P1.0
CLR P1.1
SETB P1.2
SETB P1.3
MOV A,P1
ANL A,#0F0H
CJNE A,#0F0H,TTTT1 ;若在本行则转移
EXIT: MOV A,#0FFH ;如无键按下则推退出
SJMP DONE
TTTT1: JB P1.4,TTTT2 ;如按键不在本行则转移
MOV A,#00H ;在则将0放热A 中
AJMP TTTT5
TTTT2: JB P1.5,TTTT3 ;如按键不在本行则转移
MOV A,#01H ;在则将1放热A 中
AJMP TTTT5
TTTT3: JB P1.6,TTTT4 ;如按键不在本行则转移
MOV A,#02H ;在则将2放热A 中
AJMP TTTT5
TTTT4: JB P1.7,TTTT5 ;如按键不在本行则转移
MOV A,#03H ;在则将3放热A 中
AJMP TTTT5
TTTT5: ADD A,R0
MOV 25H,A
TEXT: MOV DPTR,#KEYTAB
MOVC A,@A+DPTR
MOV 26H,A
MOV A,25H
DONE: RET
KEYTAB:DB 3FH,06H,5BH,4FH
DB 66H,6DH,7DH,07H
DB 7FH,6FH,70H,40H
DLY20MS: MOV 22H,#70H ; 延时20毫秒子程序 *******占用资源22h,23h****************
DY1: MOV 23H,#69H
DY2: DJNZ 23H,DY2
DJNZ 22H,DY1
RET
DELAY200MS: MOV 22H,#25 ;延时0.5秒子程序 *****占用资源22h,23h,24h************
DL333: MOV 23H,#100
DL222: MOV 24H,#49
DL111: DJNZ 24H,DL111
DJNZ 23H,DL222
DJNZ 22H,DL333
RET
DISPLAY1:
MOV 09H,25H ;将数字保存
MOV A,R6
MOV R7,A
MOV A,R5
MOV R6,A
MOV R5,26H ;将字型码送r5
MOV A,0BH
MOV 0CH,A
MOV A,0AH ;数字百位在0Ch ,十位送0Bh ,个位送0AH
MOV 0BH,A ;****************************************************************
MOV 0AH,09H ; 本子程序占用资源:R5,R6,25H,26H,27H,28H,29H,2AH,2BH,2C.
SJMP TTPLAY ; 程序出口:29h,28h为被##,2ch,2bh中为##
;****************************************************************
TTPLAY: MOV DPTR,#8002H ;显示子程序
MOV A,R5
MOVX @DPTR,A
MOV DPTR,#8001H
MOV A,R6
MOVX @DPTR,A
MOV DPTR,#8000H
MOV A,R7
MOVX @DPTR,A
RET
DONGTAI: MOV @R1,#0E0H ;动态显示数据显示输入时由右向左显示频率
MOV A,10H
XCHD A,@R1
MOV DPTR,#6000H
MOV A,@R1
MOVX @DPTR,A
MOV @R1,#0D0H
MOV A,11H
XCHD A,@R1
MOV DPTR,#6000H
MOV A,@R1
MOVX @DPTR,A
MOV @R1, #0B0H
MOV A,12H
XCHD A,@R1
MOV DPTR,#6000H
MOV A,@R1
MOVX @DPTR,A
MOV @R1,#70H
MOV A,13H
XCHD A,@R1
MOV DPTR,#6000H
MOV A,@R1
MOVX @DPTR,A
THEN: AJMP dongtai
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -