用ADC0832制作數字電壓表
;**************************************************************
;* 描述: *
;* ADC0832數字電壓表數碼管顯示 *
;* *
;* 調節ADC0832旁邊的電位器,數碼管顯示 ADC0832 轉換值的大小 *
;* *
;* *
;******************************************************************
AD_CLK EQU P1.0
AD_DAT EQU P1.1
AD_CS EQU P3.4
DISSTART EQU 30H ;顯示單元首地址
LED_DATA EQU P0 ;數碼管數據定義
ORG 0000H
JMP START
;--------------------------------------------------------
START: MOV SP,#60H
MOV A,#00H
MOV 20H,A
MOV P0,#0FFH
MOV P2,#0FFH
START1: CALL AD_CONV
CALL AD_CHULI
CALL QUSHU
CALL ADPLAY
JMP START1
;---------------------------------------------------------
AD_CONV: ;ADC0832初始化
SETB AD_CS ;一個轉換周期開始
CLR AD_CLK
CLR AD_CS ;CS置0,片選有效
SETB AD_DAT ;DI置1,起始位
SETB AD_CLK ;第一個脈沖
CLR AD_DAT ;在負跳變之前加一個DI反轉操作
CLR AD_CLK
SETB AD_DAT ;DI置1,設為單通道
SETB AD_CLK ;第二個脈沖
CLR AD_DAT ;***
CLR AD_CLK ;
CLR AD_DAT ;DI置0,選擇通道0
SETB AD_CLK ;第三個脈沖
SETB AD_DAT ;***
CLR AD_CLK
NOP
SETB AD_CLK ; 第四個脈沖
MOV R1,#08H ;計數器初值,讀取8位數據,
AD_READ: CLR AD_CLK ;下降沿
MOV C,AD_DAT ;讀取DO端數據
RLC A ;C移入A,高位在前
SETB AD_CLK ;下一個脈沖
DJNZ R1,AD_READ ;沒讀完繼續
SETB AD_CS
MOV 20H,A ;轉換結果發給20H
RET
;------------------------------------------------------
AD_CHULI:
CLR C
MOV R5,#00H ;十進制轉換的低位寄存器
MOV R4,#00H ;十進制轉換的高位寄存器
MOV R3,#08H ;十進制調整的次數
MOV A,20H
AD_CHULI1:
RLC A
MOV R2,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
MOV R4,A
MOV A,R2
DJNZ R3,AD_CHULI1
MOV A,R5
ADD A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
RET
;-------------------------------------------------
QUSHU: MOV A,R5
ANL A,#0FH
MOV DISSTART,A
MOV A,R5
ANL A,#0F0H
SWAP A
MOV DISSTART+1,A
MOV A,R4
ANL A,#0FH
MOV DISSTART+2,A
MOV A,R4
ANL A,#0F0H
MOV DISSTART+3,A
RET
;---------------------------------------------------
ADPLAY: PUSH PSW
CLR PSW.3
SETB PSW.4
MOV R0,#DISSTART ;開始填充顯示單元
MOV R2,#03H ;共計填充 3 位
DISP1: MOV A,@R0 ;獲得當前位地址
MOV DPTR,#TAB_NU ;獲得表頭
MOVC A,@A+DPTR ;獲得編碼數據
MOV @R0,A ;保存編碼數據
INC R0 ;指向下一個帶轉換數據
DJNZ R2,DISP1 ;繼續轉換,直到完成
MOV R0,#DISSTART ;獲得顯示單元首地址
MOV R1,#07FH ;從第一個數碼管開始
MOV R2,#03H ;共顯示3位數碼管
DISP2: MOV LED_DATA,@R0 ;讀取顯示單元數據
MOV P2,R1 ;開始顯示當前位
MOV A,R1 ;準備顯示下一位
RR A ;
MOV R1,A ;下一位
INC R0 ;取下一個單元地址
JNB ACC.5,DISP3 ;第三位數碼管加小數點
JMP DISP4
DISP3: MOV A,@R0
ANL A,#7FH
MOV @R0,A
DISP4: LCALL DELAY5MS ;延時 2 MS
DJNZ R2,DISP2 ;重復顯示下一個
POP PSW
RET ;顯示完成,返回
;---------------------------------------------------
DELAY5MS:
MOV R6,#10
DEL1: MOV R7,#100
DJNZ R7,$
DJNZ R6,DEL1
RET
;-------------------------------------------------
TAB_NU:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH
評論
查看更多