当前位置:文档之家› 基于AT89C52的八路温度巡检仪表程序

基于AT89C52的八路温度巡检仪表程序

;基于AT89C52的八路温度巡检仪表源程序


org 0000h
mov sp,#50h
LOOP1: MOV 3AH,#01H ;置路数为1
mov r0,#30h ;保存数据区首址给R0
mov dptr,#7ff0h ;P2.7=0,指向IN0(第一路)
mov 3bh,#08h ;通道总数为8
read:
movx @dptr,a ;启动A/D转换
nop
nop
nop
acall wait ;等待A/D转换
movx a,@dptr ;读转换结果
mov @r0,a ;保存转换结果
BIND: PUSH DPL ;取温度值
PUSH DPH
MOV DPTR,#0500H
MOV A,@R0
MOVC A,@A+DPTR
MOV 40H,A
BIN2BCD: ;二进值码转换BCD码程序
MOV R1,#43H
MOV 43H,#00H ;转换前将BCD码清零
MOV 44H,#00H
MOV R3,#8 ;移动8次,
START: MOV R1,#43H ;转换后BCD码地址
MOV A,40H
RLC A
MOV 40H,A
MOV R2,#02H ;转换后BCD码字节数
BCDCHG: MOV A,@R1
ADDC A,ACC
DA A
MOV @R1,A
INC R1
DJNZ R2,BCDCHG
DJNZ R3,START
pop dpH
POP DPL
chanf: mov a,3Ah ;显示缓冲区地址分配
anl a,#0FH
mov 48h,a
mov a,44h
anl a,#0FH
mov 4ah,a
mov a,43h
anl a,#0FH
mov 4ch,a
mov a,43h
swap a
anl a,#0Fh
mov 4bh,a
disp: acall sym ;调用判断热电阻是否正常或温度是否超限子程序
acall zero1 ;调用消隐“0”子程序
push dpl ;显示子程序
push dph
mov dptr,#tab ;取段码表首址
MOV 28H,#1eH
MOV 29H,#066H
dsp1: mov a,48h ;显示路数
movc a,@a+dptr ;查显示数据对应段码
mov p1,a ;送段码
clr p3.4
acall dll
setb p3.4
dsp2: clr c ;判断温度是否为负。如是,显示负号
mov a,@r0
subb a,#56h
jc plus
mov 49h,#0bfh
ajmp ka
plus: mov 49h,#0ffh
ka: mov a,49h
mov p1,a
clr p3.3
acall dll
setb p3.3
dsp3: mov a,4ah ;显示温度值百位
movc a,@a+dptr
mov p1,a
clr p3.2
acall dll
setb p3.2
dsp4: mov a,4bh ;显示温度值十位
movc a,@a+dptr
mov p1,a
clr p3.1
acall dll
setb p3.1
dsp5: mov a,4ch ;显示温度值个位
movc a,@a+dptr
mov p1,a
clr p3.0
acall dll
setb p3.0
DJNZ 29H,KK1
MOV 29H,#01H
DJNZ 28H,KK1 ;延时,时间未到,循环显示该路温度值
AJMP KK2
KK1: AJMP DSP1
KK2: pop dph ;时间到,显示下一路
pop dpl
inc r0
inc 3ah

inc dptr
djnz 3bh,fturn ;8路未显示完,显示下一路
ajmp loop1 ;8路显示完,从第一路开始显示
fturn: ajmp read
SYM: mov a,@r0 ;判断热电阻是否正常或温度是否超限子程序
clr c
subb a,#1eh
jnc sym1
mov 4ah,#0bh ;热电阻开路或温度超过50度,显示“HHH”
mov 4bh,#0bh
mov 4ch,#0bh
ajmp sym3
sym1: mov a,@r0
subb a,#0dbh
jc sym3
mov 4ah,#0ch ;热电阻短路或温度低于-120度,显示“-LLL”
mov 4bh,#0ch
mov 4ch,#0ch
sym3: Ret
zero1: ;消隐“0”子程序
mov a,4ah
jNz zero2
mov 4ah,#0Ah
mov a,4bH
jnz zero2
mov 4bh,#0ah
zero2: ret
wait: mov r4,#03ah ;等待子程序
djnz r4,$
ret
dll: MOV R7,#015H ;延时子程序
DL1: MOV R6,#01aH
DL2: DJNZ R6,DL2
DJNZ R7,DL1
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H
DB 99H,92H,82H,0F8H
DB 80H,90H,0ffh,89h,0C7h ;其中0FFH是消隐“0”用
ORG 051EH
TAB2: DB 32H,31H,30H,2FH,2EH,2DH,2CH,2BH,2AH,29H,28H,28H,27H,26H,25H,24H,23H,22H,21H,20H,1FH,1FH
DB 1EH,1DH,1CH,1BH,1AH,19H,18H,17H,16H,15H,14H,14H,13H,12H,11H,10H,0FH,0EH,0DH,0CH,0BH,0AH
DB 0AH,09H,08H,07H,06H,05H,04H,03H,02H,02H,01H,0H,01H,02H,03H,04H,05H,06H,07H,08H,09H,09H
DB 0AH,0BH,0CH,0DH,0EH,0FH,10H,11H,12H,12H,13H,14H,15H,16H,17H,18H,19H,1AH,1BH,1CH,1DH,1DH
DB 1EH,1FH,20H,21H,22H,23H,24H,25H,26H,27H,28H,28H,29H,2AH,2BH,2CH,2DH,2EH,2FH,30H,31H,31H
DB 32H,33H,34H,35H,36H,37H,38H,39H,3AH,3AH,3BH,3CH,3DH,3EH,3FH,40H,41H,42H,44H,45H,45H,46h
DB 47h,48h,49H,4AH,4BH,4CH,4DH,4DH,4EH,4FH,50H,51H,52H,52H,53H,54H,55H,56H,57H,58H,58H,59H
DB 5AH,5BH,5CH,5DH,5EH,5FH,60H,61H,61H,62H,63H,64H,65H,66H,67H,68H,69H,6AH
DB 6AH,6BH,6CH,6DH,6EH,6EH,6FH,70H,71H,72H,73H,73H,74H,75H,76H,77H,78H
END

相关主题
文本预览
相关文档 最新文档