說明:此程序通過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

