C81D6O6XU5IZW0{F[1H7ENM.png (38.24 KB, 下載次數: 82)
下載附件
2018-5-17 17:23 上傳
G0HLZD)TZ3NN%7QK%FZ]@VS.png (40.36 KB, 下載次數: 75)
下載附件
總顯示為0
2018-5-17 17:21 上傳
LED1 EQU 30H ;初始化定義 LED2 EQU 31H LED3 EQU 32H ;存放三個數碼管的段碼 ADC EQU 35H ;存放轉換后的數據 ST BIT P3.2 OE BIT P3.0 EOC BIT P3.1 ;定義ADC080... LED1 EQU 30H ;初始化定義
LED2 EQU 31H
LED3 EQU 32H ;存放三個數碼管的段碼
ADC EQU 35H ;存放轉換后的數據
ST BIT P3.2
OE BIT P3.0
EOC BIT P3.1 ;定義ADC0809的功能控制引腳
ORG 0000H
LJMP MAIN ;跳轉到主程序執行
ORG 0030H
MAIN: MOV LED1,#00H
MOV LED2,#00H
MOV LED3,#00H ;寄存器初始化
CLR P3.4
SETB P3.5
CLR P3.6 ;選擇ADC0809的通道2
WAIT: CLR ST
SETB ST
CLR ST ;在脈沖下降沿啟動轉換
JNB EOC,$ ;等待轉換結束
SETB OE ;允許輸出信號
MOV ADC,P1 ;暫存A/D轉換結果
CLR OE ;關閉輸出
MOV A,ADC ;將轉換結果放入A中,準備個位數據轉換
MOV B,#50 ;變換個位調整值50送B
DIV AB
MOV LED1,A ;將變換后的個位值送顯示緩沖區LED1
MOV A,B ;將變換結果的余數放入A中,準備十分位變換
MOV B,#5 ;變換十分位調整值5送B
DIV AB
MOV LED2,A ;將變換后的十分位值送LED2
MOV LED3,B ;最后的余數作百分位值送LED3
LCALL DISP ;調用顯示程序
AJMP WAIT
DISP:MOV R1,#LED1 ; 顯示子程序
CJNE @R1,#5,GO ;@R1=5V?是往下執行,否,則到GO
MOV LED2,#0H ;是5V,即最高值,將小數的十分位清零
MOV LED3,#0H ;將小數的百分位清零
GO:MOV R2,#3 ;顯示位數賦初值,用到3位數碼管
MOV R3,#0FDH ;掃描初值送R3
DISP1:MOV P2,#0FFH ;關閉顯示,目的防止亂碼
MOV A,@R1 ;顯示值送A
MOV DPTR,#TAB ;送表首地址給DPTR
MOVC A,@A+DPTR ;查表取段碼
CJNE R2,#3,GO1 ;判斷是否個位數碼管?否則跳到GO1
ORL A,#80H ;將整數的數碼管顯示小數點
GO1:MOV P0,A ;送段碼給P0口
MOV A,R3
MOV P2,A ;送位碼給P2口
LCALL DELAY ;調用延時
MOV R3,A
RL A ;改變位碼
MOV R3,A
INC R1 ;改變段碼
DJNZ R2,DISP1 ;三位是否顯示完?否則調到DISP1
RET
DELAY:MOV R6,#10 ;延時5S程序:
D1:MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
TAB: DB 3FH, 06H,5BH,4FH,66H;共陰極數碼管顯示0-4 ;顯示數據表:
DB 6DH,7DH,07H,7FH,6FH;顯示5-9
END
|