四位温度计 程序
WEI1 EQU P2.0
WEI2 EQU P2.1
WEI3 EQU P2.2
WEI4 EQU P2.3
DUAN EQU P1
ST EQU P3.0 ;定义几位信号
OE EQU P3.1
EOC EQU P3.2
CLK EQU P3.3
TEMP EQU 30H
DT1 EQU 31H ;温度显示位四位数据
DT2 EQU 32H
DT3 EQU 33H
DT4 EQU 34H
ORG 0000H
SJMP MAIN
ORG 000BH
AJMP CLOCKT ;定时0器中断
ORG 0030H
INIT :MOV TMOD,#01H
MOV TH0,#0FCH
MOV TL0,#18H
SETB EA
SETB ET0
SETB TR0
SETB EOC
CLR ST
SETB OE
SETB ST
RET
MAIN:ACALL INIT
M2:
JB EOC,CHULI
CLR ST
M0: MOV R5,#10 ;显示10次,采集一次数据
M1: ACALL DISP
DJNZ R5,M1
SJMP M2
DISP:MOV DPTR,#TAB0 ;显示数据消隐
MOV A,DT1
CJNE A,#0,DI0 ;首位为0消隐
MOV A,#10
DI0: SETB WEI1
MOVC A,@A+DPTR
MOV DUAN,A
ACALL DELAY
CLR WEI1
CJNE A,#0FFH,DI1
MOV A,DT2
CJNE A,#0,DI3 ;首位为0且第二位也为0消隐
MOV A,#10
SJMP DI3
DI1: MOV A,DT2
DI3: SETB WEI2
MOVC A,@A+DPTR
MOV DUAN,A
ACALL DELAY
CLR WEI2
MOV DPTR,#TAB1
SETB WEI3
MOV A,DT3
MOVC A,@A+DPTR
MOV DUAN,A
ACALL DELAY
CLR WEI3
MOV DPTR,#TAB0
SETB WEI4
MOV A,DT4
MOVC A,@A+DPTR
MOV DUAN,A
ACALL DELAY
CLR WEI4
RET
CHULI:SETB OE ;处理采集的数据温度从0到102度
MOV TEMP,P0 ;1个LSB为0.4°
MOV A,TEMP ;分别取出个,十,百位的值分别放入30h,31h,32h,33h内
MOV B,#100 ;如250 2 5 0分别存放
DIV AB
MOV DT2,A
MOV A,B
MOV B,#10
DIV AB
MOV DT3,A
MOV DT4,B
;进行温度转换,*4
MOV DT1,#00H
MOV R3,#3
MOV R1,#34H
CHU1: MOV A,@R1
MOV B,#4
MUL AB
MOV @R1,A
DEC R1
DJNZ R3,CHU1
MOV R3,#3
MOV R1,#34H
CHU2: MOV A,@R1
MOV B,#10
DIV AB
MOV @R1,B
DEC R1
ADD A,@R1
MOV @R1,A
DJNZ R3,CHU2
SETB ST
AJMP M0
RET
CLOCKT:MOV TH0,#0FCH
MOV TL0,#18H
CPL CLK
RETI
DELAY:MOV R6,#5
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
TAB0:DB 0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H,80H,90H,0ffH;不带小数点的共阳编码,下面是带小数点的
TAB1:DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H,0ffH ;
END