一个只显示千、百位的,0.6秒取样一次。
a_bit EQU 20h ;数码管百位数存放内存位置
b_bit EQU 21h ;数码管千位数存放内存位置
ORG 0000H
AJMP START
ORG 001BH
LJMP CESU
ORG 30H
START: MOV SP,#5FH
MOV TMOD,#00010101B
MOV TH0,#0
MOV TL0,#0
MOV TH1,#3CH ;100毫秒(6M)
MOV TL1,#0B0H
MOV B,#10
MOV R7,#00H
SETB EA
SETB ET1
SETB TR1
SETB TR0
LOOP: ACALL DISP ;显示子程序
AJMP LOOP
CESU: INC R7
MOV A,R7
CJNE A,#6,ZAILAI
CLR TR0 ;关记数器T0
MOV A,TL0 ;计数有限,只用了低8位
DIV AB ;转十进制
MOV A_BIT,B
MOV B_BIT,A
MOV R7,#0
MOV B,#10
MOV TH0,#0
MOV TL0,#0
SETB TR0 ;开记数器T0
ZAILAI: MOV TH1,#3CH
MOV TL1,0B0H
RETI
DISP: MOV A,A_BIT ;取个位数
MOV DPTR,#numta ;指定查表启始地址
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P1,A ;送出个位的7段代码
CLR P3.3 ;开个位显示
ACALL D2MS ;显示2毫秒
SETB P3.3 ;关闭个位显示
MOV A,B_BIT ;取十位数
MOV DPTR,#numtb
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P1,A ;送出十位的7段代码
CLR P3.7 ;开十位显示
ACALL D2MS ;显示2毫秒
SETB P3.7 ;关闭十位显示
RET
D2MS: MOV R0,#50 ;2MS延时
D1: MOV R1,#10
DJNZ R1,$
DJNZ R0,D1
RET
numta: DB 30H,0FCH,0A2H,0A4H,06CH,25H,21H,0BCH,20H,24H
numtb: DB 10H,0DCH,82H,84H,4CH,5H,1H,9CH,0H,4H
END
[ 本帖最后由 laobo 于 2009-4-27 17:38 编辑 ] |