⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 szpb.asm

📁 时间跑表二合一程序(此程序在自制的单片机板上运行通过)
💻 ASM
字号:
ORG 0000H    ;六位数码管显示时间与跑表,用p3.2,p3.3,p3.4,p3.5控制。
AJMP MAIN    
ORG 000BH
AJMP TIME
ORG 001BH
LJMP TIME2

ORG 0300H
MAIN: 
mov 20h,#00h 
MOV 21H,#00H
MOV 22H,#00H
MOV 23H,#00H
MOV IP,#02H ;IP,IE初始化
MOV IE,#8AH
MOV TMOD,#11H ;设定定时器工作方式
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR0 ;启动定时
MOV SP,#55H ;重设堆栈指针
NEXT: LCALL DISP ;调用显示子程序
LCALL KEY ;调用时间按键检测子程序(A键被按下即进入调时模式)
JZ NEXT ;
LCALL ANKEY2 ;调用跑表按键检测程序(B键被按下即进入跑表模式)
LCALL ANKEY ;调用按键处理子程序
SJMP NEXT ;重新循环

ANKEY2:       ;(ACC.4=B键)
MOV A,R6
JB ACC.4,PB
RET

PB:            ;跑表程序初始化
MOV TH1,#0D8H
MOV TL1,#0F0H ;10ms定时
MOV 41H,#00H
MOV 42H,#00H
MOV 43H,#00H

NEXT2:
LCALL DISP2
LCALL KEY
JB ACC.4,RET2
JB ACC.3,CPL2
JB ACC.2,CLR2
SJMP NEXT2

RET2:
CLR TR1
RET

CPL2:
CPL TR1
SJMP NEXT2

CLR2:
MOV 41H,#00H
MOV 42H,#00H
SJMP NEXT2


TIME2:
PUSH ACC
PUSH PSW
MOV TH1,#0D8H
MOV TL1,#0F0H ;10ms定时

MOV A,41H
ADD A,#01H
DA A
MOV 41H,A
CJNE A,#99H,RETI2
MOV 41H,#00H

MOV A,42H
ADD A,#01H
DA A
MOV 42H,A
CJNE A,#60H,RETI2
MOV 42H,#00H

MOV A,43H
ADD A,#01H
DA A
MOV 43H,A
CJNE A,#60H,RETI2
MOV 43H,#00H


RETI2:POP PSW
POP ACC
RETI



DISP2:
MOV A,41H
ANL A,#0FH
MOV 4FH,A
MOV A,41H
ANL A,#0F0H
SWAP A
MOV 4EH,A

MOV A,42H
ANL A,#0FH
ORL A,#10H
MOV 4DH,A
MOV A,42H
ANL A,#0F0H
SWAP A
MOV 4CH,A




MOV A,43H
ANL A,#0FH
ORL A,#10H
MOV 4BH,A
MOV A,43H
ANL A,0F0H
SWAP A
MOV 4AH,A


MOV R1,#4FH ;显示偏移量
MOV R7,#06H
MOV DPTR,#TABLE2
MOV A,#10111111B
LOOP8: MOV B,A ;
MOV P0,A
MOV A,@R1
MOVC A,@A+DPTR
MOV P2,A ;送显示
MOV R6,#80H ;延时
DJNZ R6,$
DEC R1
MOV A,B
RR A
DJNZ R7,LOOP8;循环显示
RET

TABLE2: 
DB 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8H,80H ,90H;不带小数点
DB 00h,00,00,00,00,00
DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H ;带小数点






;定时中断处理程序:
TIME: PUSH ACC ;保护现场
PUSH PSW
MOV TL0,#0B0H ;赋定时初值
MOV TH0,#3CH
INC 20H ;
MOV A,20H
CJNE A,#20,RETI1
MOV 20H,#00H ;一秒钟时间到
MOV A,21H
ADD A,#01H
DA A
MOV 21H,A
CJNE A,#60H,RETI1
MOV 21H,#00H ;一分钟时间到
MOV A,22H
ADD A,#01H
DA A
MOV 22H,A
CJNE A,#60H,RETI1
MOV 22H,#00H ;一小时时间到
MOV A,23H
ADD A,#01H
DA A
MOV 23H,A
CJNE A,#24H,RETI1
MOV 23H,#00H ;到时间达到24小时,清零.
RETI1: POP PSW ;恢复现场
POP ACC
RETI ;中断返回?


;显示子程序
DISP: ANL 2FH,#10H
MOV A,21H ;处理秒21H-->2DH,2EH
ANL A,#0FH
ORL A,2FH
MOV 2FH,A
MOV A,21H 
ANL A,#0F0H
SWAP A
MOV 2EH,A

ANL 2DH,#10H
MOV A,22H ;处理分钟22H-->2CH,2DH
ANL A,#0FH
ORL A,2DH
MOV 2DH,A
MOV A,22H
ANL A,#0F0H
SWAP A
MOV 2CH,A

ANL 2BH,#10H
MOV A,23H ;处理小时23H-->2AH,2BH
ANL A,#0FH
ORL A,#2BH
MOV 2BH,A
MOV A,23H
ANL A,#0F0H
SWAP A
MOV 2AH,A

MOV R0,#2FH ;显示偏移量
MOV R3,#06H
MOV DPTR,#TABLE
MOV A,#0BFH
LOOP1: MOV B,A ;
MOV P0,A
MOV A,@R0
MOVC A,@A+DPTR
MOV P2,A ;送显示
MOV R2,#80H ;延时
DJNZ R2,$
DEC R0
MOV A,B
RR A
DJNZ R3,LOOP1 ;循环显示
RET

TABLE: 
DB 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8H,80H ,90H;不带小数点
DB 00h,00,00,00,00,00
DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H ;带小数点

;按键判断程序
KEY: MOV P3,#0FFH ;
MOV A,P3
CPL A
ANL A,#18H
JZ RETX ;无键按下则返回
LCALL DISP ;
LCALL DISP
MOV A,P3
CPL A
ANL A,#18H
JZ RETX ;键盘去抖动。
MOV R6,A ;将键值存入R6。
LOOP2: LCALL DISP ;
MOV A,P3
CPL A
ANL A,#18H
JNZ LOOP2 ;等待键释放
MOV A,R6
RETX: RET


;按键处理子程序
ANKEY: CLR EA ;关中断
LX: MOV A,R6
JB ACC.3,L1 ;是功能键转L1
JB ACC.4,L2 ;是确认键转L2
JB ACC.5,L3 ;是减1键转L3
JNB ACC.2,L4 ;是增1键转L4

L4:JB 2BH.4,L6 ;判断使哪一位(时、分、秒)的值加1
JB 2DH.4,L8
JB 2FH.4,L9
AJMP L12

L12: LCALL DISP 
LCALL DISP
LCALL KEY ;判断有无键按下。
JZ L12
LJMP LX

L2: MOV 25H,#00H ;确认键处理程序
CLR 2BH.4
CLR 2DH.4
CLR 2FH.4
SETB EA
RET

L3: JB 2BH.4,L61 ;增一键处理程序
JB 2DH.4,L81
JB 2FH.4,L91
AJMP L12

L1: MOV A,25H ;功能键处理程序
JZ LB1
JB ACC.0,LB2
JB ACC.1,LB3
JNB ACC.2,L12
LB1: MOV 25H,#01H ;25H单元是标志位,(25H)=01H调节时单元的值
SETB 2BH.4 
CLR 2DH.4
CLR 2FH.4
AJMP L12

LB3: MOV 25H,#04H ;25H单元是标志位,(25H)=01H调节秒单元的值
SETB 2FH.4
CLR 2DH.4
CLR 2BH.4
AJMP L12

LB2: MOV 25H,#02H ;25H单元是标志位,(25H)=01H调节分单元的值
SETB 2DH.4
CLR 2BH.4
CLR 2FH.4
AJMP L12

L61: AJMP L611 ; 
L81: AJMP L811 ;
L91: AJMP L911
L6: MOV A,23H ;时加一
ADD A,#01H
DA A
MOV 23H,A
CJNE A,#24H,L15
L15: JC L112
MOV 23H,#00H
L112: AJMP L12

L8: MOV A,22H ;分加一
ADD A,#01H
DA A
MOV 22H,A
CJNE A,#60H,L16
L16: JC L112
MOV 22H,#00H
AJMP L12

L9: MOV A,21H ;秒加一
ADD A,#01H
DA A
MOV 21H,A
CJNE A,#60H,L17
L17: JC L112
MOV 21H,#00H
AJMP L12

L611: MOV A,23H ;时减一
ADD A,#99H
DA A
MOV 23H,A
CJNE A,#99H,L112
MOV 23H,#23H
AJMP L12

L811: MOV A,22H ;分减一
ADD A,#99H
DA A
MOV 22H,A
CJNE A,#99H,L112
MOV 22H,#59H
AJMP L12

L911: MOV A,21H ;秒减一
ADD A,#99H
DA A
MOV 21H,A
CJNE A,#99H,L112
MOV 21H,#59H
AJMP L12
NOP
NOP 
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -