说明:此程序通过AD转换器检测输入的电压,然后经过处理转换成3位十进制数由3个8段数码管输出显示.
注:此程序只适用于8位AD检测10V以内的电压,超出此范围都会显示错误的数据.ADC芯片检测脚要有1比3电阻分压.
adval equ 44H
org 0000H
ajmp main
main: mov adval,#00H
clr p2.5
main1: clr p3.6
nop
setb p3.6
clr p3.7
mov adval,p1
setb p3.7
mov a,adval
mov b,#04H
mul ab
mov r6,b
mov r7,a
CHANGE16_10:
CLR A ;BCD码初始化
MOV R3, A
MOV R4, A
MOV R5, A
MOV R2, #10H ;转换双字节十六进制整数
CHANG_1:
MOV A, R7 ;从高端移出待转换数的一位到CY中
RLC A
MOV R7, A
MOV A, R6
RLC A
MOV R6, A
MOV A, R5 ;BCD码带进位自身相加,相当于乘2
ADDC A, R5
DA A ;十进制调整
MOV R5, A
MOV A, R4
ADDC A, R4
DA A
MOV R4, A
MOV A, R3
ADDC A, R3
MOV R3, A ;双字节十六进制数的万位数不超过6,不用调整
DJNZ R2, CHANG_1 ;处理完16bit
mov 40h,r4
mov a,r5
anl a,#0fh
mov 42h,a
clr a
mov a,r5
anl a,#0f0h
rl a
rl a
rl a
rl a
mov 41h,a
mov r1,#20
loop1:call display
djnz r1,loop1
ajmp main1
display:
MOV DPTR,#TABLE1
clr p2.6
mov a,40h
MOVC a,@A+DPTR
mov p0,a
setb p2.6
clr p2.6
clr p2.7
mov P0,#7eh;
setb p2.7
clr p2.7
mov 50h,#5h
call delayxms
mov dptr,#table
clr p2.6
mov a,41h
MOVC a,@A+DPTR
mov p0,a
setb p2.6
clr p2.6
clr p2.7
mov P0,#7dh;
setb p2.7
clr p2.7
mov 50h,#5h
call delayxms
mov dptr,#table
mov a,42h
MOVC a,@A+DPTR
mov p0,a ;
setb p2.6
clr p2.6
clr p2.7
mov P0,#7bh;
setb p2.7
clr p2.7
mov 50h,#4h
call delayxms
ret
delayxms:mov 52h,#4
delaya: mov 51h,#60
djnz 51h,$
djnz 52h,delaya
djnz 50h,delayxms
ret
table:db 3fh,30h,5bh,4fh,66h,6dh,7dh,07h
db 7fh,6fh,77h,7ch,39h,5eh,79h,71h
table1:db 0bfh,0b0h,0dbh,0cfh,0e6h,0edh,0fdh,87h
db 0ffh,0efh
end
![](http://u.dianyuan.com/bbs/u/72/107361230127830.gif)
![](http://u.dianyuan.com/bbs/u/72/107361230127889.gif)