;*****************************
;** 變量及常數項定義 ***
;*****************************
$INCLUDE(VARDFN.INC)
;*****************************
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
$INCLUDE(INITIAL.INC) ;添加初始化模塊
MLOOP: JNB TF0,$ ;4mS到?
CLR TF0 ;清定時標誌
MOV TH0,#0F0H ;4mS定時重設
MOV TL0,#60H
LCALL RDKEY ;調用讀鍵狀態及去抖處理
LCALL DISP ;調用數碼管動態顯示
LCALL ADC ;調用AD轉換子程序
LCALL ZH
LCALL WORK1
SJMP MLOOP
;******************************
;** 通道轉換程序段 *******
;**100單端通道0 101通道2 *****
;**110通道1 111通道3 *****
;**000差分 通道0+ 1- *****
;******************************
WORK1: JNB EK0,W11
MOV TDC,#11000000B ;通道0
MOV R2,#00H
W11:JNB EK1,W12
MOV TDC,#11100000B ;通道1
MOV R2,#01H
W12:JNB EK2,W13
MOV TDC,#11010000B ;通道2
MOV R2,#02H
W13:JNB EK3,W14
MOV TDC,#11110000B ;通道3
MOV R2,#03H
W14:JNB EK4,W15
MOV TDC,#10000000B ;通道0+ 1-
MOV R2,#08H
W15:JNB EK5,W16
MOV TDC,#10100000B ;通道1+ 0-
MOV R2,#09H
W16:LCALL CK
RET
;******************************
;** AD轉換子程序 ****
;******************************
ADC: MOV A,TDC ;工作方式設定
CLR CS ;選通
MOV R7,#04H
ADC1: CLR CLK
RLC A
MOV DI,C
SETB CLK
DJNZ R7,ADC1
SETB DO ;第五個脈衝
CLR CLK
SETB CLK
MOV R7,#08H
ADC2: CLR CLK
SETB CLK
MOV C,DO
RLC A
DJNZ R7,ADC2
MOV R7,#08H
ADC3: CLR CLK
SETB CLK
DJNZ R7,ADC3
CLR CLK
SETB CS
RET
;********************************
;**將讀到的DO數據轉換成電壓值****
;********************************
ZH: MOV DSB4,A ;將讀到的數據送DSB4
MOV B,#51
DIV AB
MOV DSB3,A ;取整數 即爲整數部分電壓
MOV R7,#3 ;小數點後三位循環計算三次
MOV R1,#33H ;用R3間接尋址DSB3~0顯
ZH1: MOV A,B
CLR C
SUBB A,#26
JC ZH2 ;C不等於1則於26跳轉直接計算
MOV B,#10
MUL AB
MOV B,#51
DIV AB
ADD A,#5
SJMP ZH3
ZH2: MOV A,B
MOV B,#10
MUL AB
MOV B,#51
DIV AB
ZH3: MOV @R1,A
DEC R1
DJNZ R7,ZH1
RET
;********************************
;** 串口顯示子程序 ****
;********************************
CK: MOV DPTR,#DTABT
MOV A,R2
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$ ;判斷中斷標誌位是否置1
CLR TI ;將中斷標誌位清零
JS2: RET
DTABT: DB 00000011B,10011111B,00100101B,00001101B,10011001B
DB 01001001B,01000001B,00011111B,00000001B,00001001B
;航碩工作室 http://hangshuo.blog.51cto.com/
$INCLUDE(RDKEY.INC);添加讀鍵狀態及去抖處理子程序
$INCLUDE(DISP.INC) ;添加數碼管動態掃描顯示子程序
END