?? dyb.asm
字號:
;********************************************************************************
;* 標題: 數字電壓表 *
;* 顯示單元地址: 33H~通道指示,32H~個位,31H~十分位,30H~百分位. *
;********************************************************************************
LED EQU P0
AD_CS BIT P3.4
AD_CLK BIT P3.3
AD_DAT BIT P3.2
SDATA BIT P0.1
SCLK BIT P0.0
K1 BIT P3.0
CH_XZ BIT 40H
ORG 0000H
AJMP START
;--------------------------------------------------------
START: MOV SP,#60H
MOV A,#00H
MOV 20H,A
MOV 30H,A
MOV 31H,A
MOV 32H,A
MOV 33H,A
MOV P0,#0FFH
START2: JB K1,START3
CPL CH_XZ
JNB K1,$
START3: LCALL AD_CONV
LCALL AD_CHULI
LCALL ADPLAY
AJMP START
;---------------------------------------------------------
AD_CONV: SETB AD_CS ;ADC0832初始化,一個轉換周期開始
CLR AD_CLK
NOP
NOP
CLR AD_CS ;CS置0,片選有效
NOP
SETB AD_DAT ;DI置1,起始位
SETB AD_CLK ;第一個脈沖
NOP
NOP
CLR AD_DAT ;在負跳變之前加一個DI反轉操作
CLR AD_CLK
SETB AD_DAT ;DI置1,設為單通道
NOP
NOP
SETB AD_CLK ;第二個脈沖
NOP
NOP
CLR AD_CLK
NOP
JB CH_XZ,CH1_IN
CLR AD_DAT ;DI置0,選擇通道0
MOV 33H,#0AH
NOP
AJMP NEXT
CH1_IN: SETB AD_DAT
MOV 33H,#0BH
NEXT: NOP
SETB AD_CLK ;第三個脈沖
NOP
NOP
CLR AD_CLK
SETB AD_DAT
NOP
NOP
SETB AD_CLK ;第四個脈沖
NOP
NOP
MOV R1,#8 ;計數器初值,讀取8位數據,
AD_READ: CLR AD_CLK ;下降沿時,串行數據移出1位
NOP
NOP
MOV C,AD_DAT ;讀取DO端數據
RLC A ;C移入A,高位在前
SETB AD_CLK ;下一個脈沖
NOP
NOP
DJNZ R1,AD_READ ;沒讀完繼續
SETB AD_CS
CLR AD_CLK ;拉低CLK端
SETB AD_DAT ;拉高數據端,回到初始狀態
MOV 20H,A ;轉換結果發給20H
RET
;------------------------------------------------------
AD_CHULI: MOV A,20H
MOV B,#51
DIV AB
MOV 32H,A
MOV A,B
CLR F0
SUBB A,#1AH
MOV F0,C
MOV A,#10
MUL AB
MOV B,#51
DIV AB
JB F0,AD_CHULI1
ADD A,#5
AD_CHULI1: MOV 31H,A
MOV A,B
CLR F0
SUBB A,#1AH
MOV F0,C
MOV A,#10
MUL AB
MOV B,#51
DIV AB
JB F0,AD_CHULI2
ADD A,#5
AD_CHULI2: MOV 30H,A
RET
;---------------------------------------------------
ADPLAY: MOV R0,#30H ;獲得顯示單元首地址
MOV R4,#7FH ;從第一個數碼管開始
MOV DPTR,#TAB
DISP: MOV LED,#0F0H
MOV A,@R0
MOVC A,@A+DPTR
MOV 21H,R4
JB 21H.5,WORD
SETB ACC.7
WORD: MOV R5,#8
NEXTB: RLC A
MOV SDATA,C
SETB SCLK
NOP
CLR SCLK
DJNZ R5,NEXTB
INC R0
MOV A,R4
ANL LED,A
LCALL DELAY1MS
RR A
MOV R4,A
JB ACC.3,DISP ;4位數碼管
RET ;顯示完成,返回
;---------------------------------------------------
DELAY1MS: MOV R6,#5 ;延時子程序
DEL1: MOV R7,#100
DJNZ R7,$
DJNZ R6,DEL1
RET
;---------------------------------------------------
TAB: DB 3FH,06H,5BH,4FH,66H ;0~4
DB 6DH,7DH,07H,7FH,6FH ;5~9
DB 01H,08H ;通道指示符號
;---------------------------------------------------
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -