LED1 EQU 30H ;初始化定義 LED2 EQU 31H LED3 EQU 32H ;存放三個數(shù)碼管的段碼 ADC EQU 35H ;存放轉換后的數(shù)據(jù) ST BIT P3.2 OE BIT P3.0 EOC BIT P3.1 ;定義ADC0809的功能控制引腳 ORG 0000H LJMP MAIN ;跳轉到主程序執(zhí)行 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中,準備個位數(shù)據(jù)轉換 MOV B,#50 ;變換個位調整值50送B DIV AB MOV LED1,A ;將變換后的個位值送顯示緩沖區(qū)LED1 MOV A,B ;將變換結果的余數(shù)放入A中,準備十分位變換 MOV B,#5 ;變換十分位調整值5送B DIV AB MOV LED2,A ;將變換后的十分位值送LED2 MOV LED3,B ;最后的余數(shù)作百分位值送LED3 LCALL DISP ;調用顯示程序 AJMP WAIT DISP:MOV R1,#LED1 ; 顯示子程序 CJNE @R1,#5,GO ;@R1=5V?是往下執(zhí)行,否,則到GO MOV LED2,#0H ;是5V,即最高值,將小數(shù)的十分位清零 MOV LED3,#0H ;將小數(shù)的百分位清零 GO:MOV R2,#3 ;顯示位數(shù)賦初值,用到3位數(shù)碼管 MOV R3,#0FDH ;掃描初值送R3 DISP1:MOV P2,#0FFH ;關閉顯示,目的防止亂碼 MOV A,@R1 ;顯示值送A MOV DPTR,#TAB ;送表首地址給DPTR MOVC A,@A+DPTR ;查表取段碼 CJNE R2,#3,GO1 ;判斷是否個位數(shù)碼管?否則跳到GO1 ORL A,#80H ;將整數(shù)的數(shù)碼管顯示小數(shù)點 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;共陰極數(shù)碼管顯示0-4 ;顯示數(shù)據(jù)表: DB 6DH,7DH,07H,7FH,6FH;顯示5-9 END
|