ORG 0000H LJMP MAIN ORG 000BH LJMP ZHONGD ORG 0100H
MAIN: MOV 20H,#0 ;清0寄存器 CLR P1.0
CLR P1.1 ;锁存复位
MOV TMOD,#01H ;定时器0工作于方式1 MOV TH0,#0F4H MOV TL0,#48H
SETB EA ;开启总开关 SETB ET0 ;开启定时开关 SETB TR0 ;启动中断 MOV SP,#60H MOV 20H,#00H MOV 21H,#06H MOV 22H,#05H MOV 23H,#04H MOV 24H,#03H MOV 25H,#02H MOV 26H,#01H MOV 27H,#00H MOV 28H,#07H SJMP $
ZHONGD: ;动态显示扫描程序
PUSH ACC ;将ACC压入堆栈 PUSH PSW ;将PSW压入堆栈 MOV TH0,#0F4H
MOV TL0,#48H ;给定时器重新赋值
MOV DPTR,#TABLE ;数码管显示码表地址送DPTR MOV A,20H ;将显示计数位送入A SCAN0:
CJNE A,#0,SCAN1 ;判断是否显示第一位数码管 MOV A,21H ;将要显示的数据送入A
MOVC A,@A+DPTR ;查表将显示的数据转换成显示码 MOV P0,A ;将显示码送入数据口 SETB P1.0
CLR P1.0 ;开段控制线
MOV P0,#01H ;将显示的扫描位送入数据口 SETB P1.1
CLR P1.1 ;开位控制线 AJMP SCAN8 SCAN1:
CJNE A,#1,SCAN2 ;判断是否显示第二位数码管 MOV A,22H ;将要显示的数据送入A
MOVC A,@A+DPTR ;查表将显示的数据转换成显示码 MOV P0,A ;将显示码送入数据口 SETB P1.0
CLR P1.0 ;开段控制线
MOV P0,#02H SETB P1.1
CLR P1.1 AJMP SCAN8 SCAN2:
CJNE A,#2,SCAN3 MOV A,23H MOVC A,@A+DPTR MOV P0,A SETB P1.0
CLR P1.0 MOV P0,#04H SETB P1.1
CLR P1.1 AJMP SCAN8 SCAN3:
CJNE A,#3,SCAN4 MOV A,24H MOVC A,@A+DPTR MOV P0,A SETB P1.0
CLR P1.0 MOV P0,#08H SETB P1.1
CLR P1.1 AJMP SCAN8 SCAN4:
CJNE A,#4,SCAN5 MOV A,25H MOVC A,@A+DPTR MOV P0,A SETB P1.0
CLR P1.0 MOV P0,#10H SETB P1.1
CLR P1.1 AJMP SCAN8 SCAN5:
;将显示的扫描位送入数据口 ;开位控制线 ;判断是否显示第三位数码管 ;将要显示的数据送入A
;查表将显示的数据转换成显示码 ;将显示码送入数据口 ;开段控制线
;将显示的扫描位送入数据口 ;开位控制线 ;判断是否显示第四位数码管 ;将要显示的数据送入A
;查表将显示的数据转换成显示码 ;将显示码送入数据口 ;开段控制线
;将显示的扫描位送入数据口 ;开位控制线 ;判断是否显示第五位数码管 ;将要显示的数据送入A
;查表将显示的数据转换成显示码 ;将显示码送入数据口 ;开段控制线
;将显示的扫描位送入数据口 ;开位控制线 CJNE A,#5,SCAN6 ;判断是否显示第六位数码管 MOV A,26H ;将要显示的数据送入A
MOVC A,@A+DPTR ;查表将显示的数据转换成显示码 MOV P0,A ;将显示码送入数据口 SETB P1.0
CLR P1.0 ;开段控制线
MOV P0,#20H ;将显示的扫描位送入数据口 SETB P1.1
CLR P1.1 ;开位控制线 AJMP SCAN8 SCAN6:
CJNE A,#6,SCAN7 ;判断是否显示第七位数码管 MOV A,27H ;将要显示的数据送入A
MOVC A,@A+DPTR ;查表将显示的数据转换成显示码 MOV P0,A ;将显示码送入数据口 SETB P1.0
CLR P1.0 ;开段控制线
MOV P0,#40H ;将显示的扫描位送入数据口 SETB P1.1
CLR P1.1 ;开位控制线 AJMP SCAN8 SCAN7:
CJNE A,#7,SCAN8 ;判断是否显示第八位数码管 MOV A,28H ;将要显示的数据送入A
MOVC A,@A+DPTR ;查表将显示的数据转换成显示码 MOV P0,A ;将显示码送入数据口 SETB P1.0
CLR P1.0 ;开段控制线
MOV P0,#80H ;将显示的扫描位送入数据口 SETB P1.1
CLR P1.1 ;开位控制线 MOV 20H,#0 ;清0显示计数位 AJMP SCAN_END SCAN8:
INC 20H ;显示计数位加1,扫描下一位 SCAN_END:
POP PSW ;将PSW弹出堆栈 POP ACC ;将ACC弹出堆栈 RETI
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H RET END