📄 shukongdianyuan.asm
字号:
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TOF
ORG 001BH
LJMP T1F
ORG 0040H ;主程序存放地址
TAB1:DB 00H,03H,05H,08H,0AH,0DH,0FH ;对应3.3-3.9V
DB 12H,15H,17H,1AH,1CH,1FH,21H,24H,26H,29H ;对应4.0-4.9V
DB 2CH,2EH,31H,33H,36H,38H,3BH,3DH,40H,43H ;对应5.0-5.9V
DB 45H,48H,4AH,4DH,4FH,52H,55H,57H,5AH,5CH ;对应6.0-6.9V
DB 5FH,61H,64H,66H,69H,6CH,6EH,71H,73H,76H ;对应7.0-7.9V
DB 78H,7BH,7DH,80H,83H,85H,88H,8AH,8DH,8FH ;对应8.0-8.9V
DB 92H,95H,97H,9AH,9CH,9FH,0A1H,0A4H,0A6H,0A9H ;对应9.0-9.9V
DB 0ACH,0AEH,0B1H,0B3H,0B6H,0B8H,0BBH,0BDH,0C0H,0C3H ;对应10.0-10.9V
DB 0C5H,0C8H,0CAH,0CDH,0CFH,0D2H,0D5H,0D7H,0DAH,0DCH ;对应11.0-11.9V
DB 0DFH,0E1H,0E4H,0E6H,0E9H,0ECH,0EEH,0F1H,0F3H,0F6H ;对应12.0-12.9V
DB 0F8H,0FBH,0FDH,0FFH ;对应13.0-13.3V
TAB2:DB 0EEH,28H,0CDH,6DH,2BH,67H,0E7H,2CH,0EFH,6FH ;对应十位和小数位的数码0-9
TAB3:DB 0FEH,38H,0DDH,7DH,3BH,77H,0F7H,3CH,0FFH,7FH ;对应个位的数码0-9
MAIN:MOV SCON,#00H ;设置窜行口方式0
MOV 28H,#00H ;28H作为TAB1的数据跟表首的距离,TAB1存放的是Dn值
MOV 27H,#00H ;27H作为数码显示器的十位的字符跟TAB2表首的距离
MOV 26H,#00H ;26H作为数码显示器的个位的字符跟TAB3表首的距离
MOV 25H,#00H ;25H存放数码显示器的小数位的字符跟TAB2表首的距离
;初始显示输出9V
MOV 26H,#09H ;个位的字符数据"9"的偏移量存放入26H单元
MOV 28H,#39H ;9V对应的Dn值的偏移量存放入28H单元
SETB EA ;CPU开中断
;SETB ES ;开串行口中断
ACALL OUTPUT ;调用输出子程序
MOV TMOD,#66H ;定时/计数器T0,T1方式2
MOV TL0,#0FFH ;装载T0的初值
MOV TH0,#0FFH
MOV TL1,#0FFH ;装载T1的初值
MOV TH1,#0FFH
SETB TR0 ;启动T0
SETB ET0 ;开定时/计数器T0的中断
SETB TR1 ;启动T1
SETB ET1 ;开定时/计数器T1的中断
SETB EA ;CPU开中断
SJMP $ ;等待
;输出子程序
OUTPUT:MOV DPTR,#TAB1
MOV A,28H ;装载表TAB1的数据的偏移量
MOVC A,@A+DPTR ;输出
MOV P1,A
ACALL DISPLAY ;嵌套调用显示子程序
RET ;子程序返回
DISPLAY:MOV R3,#03H ;设定显示字符的个数
MOV R1,#25H ;R1存放直接地址25H
MOV A,25H ;发送小数位
MOV DPTR,#TAB2 ;装载表TAB2数据(十位和个位)指针
SEND: MOVC A,@A+DPTR
MOV SBUF,A ;装入发送缓冲
WAIT: JNB TI,WAIT ;未发完一帧,等等
CLR TI ;清发送中断标志
DJNZ R3,NEXT1 ;未显示完字符,继续
JMP END1 ;显示完
NEXT1: CJNE R3,#02H,NEXT2 ;是十位,转
MOV DPTR,#TAB3 ;是个位,装载表TAB3数据指针
JMP NEXT2
NEXT2: CJNE R3,#01H,NEXT3 ;数据指针没有更改过,转
MOV DPTR,#TAB2 ;数据指针改回来
NEXT3: INC R1
MOV A,@R1
JMP SEND
END1: RET ;子程序返回
; "+"键按下(对应T0)处理程序
TOF: CLR EA ;CPU关中断
MOV A,25H ;取小数位当前偏移量
CJNE A,#09H,L1 ;距离不为10,转L1
MOV 25H,#00H ;距离为10,有进位,偏移量归零
MOV A,26H ;取个位当前偏移量
CJNE A,#09H,L2 ;距离不为10,转L2
MOV 26H,#00H ;距离为10,有进位,偏移量归零
INC 27H ;十位增1
JMP END2
L1: INC 25H ;小数位增1
JMP END2
L2: INC 26H ;个位增1
JMP END2
END2: INC 28H
ACALL OUTPUT ;调用输出子程序
SETB EA ;CPU开中断
RETI ;中断返回
; "-"键按下(对应T1)处理程序
T1F:
CLR EA ;CPU关中断
MOV A,25H ;取小数位当前偏移量
CJNE A,#00H,L3 ;偏移量不是零,转L3
MOV 25H,#09H ;有借位,偏移量应是最大
MOV A,26H ;取个位当前偏移量
CJNE A,#00H,L4 ;偏移量不是零,转L4
MOV 26H,#09H ;有借位,偏移量应是最大
DEC 27H ;十位减1
JMP END3
L3: DEC 25H ;小数位减1
JMP END3
L4: DEC 26H ;个位减1
JMP END3
END3: DEC 28H
ACALL OUTPUT ;调用输出子程序
SETB EA ;CPU开中断
RETI ;中断返回
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -