C51数码管动态显示+AD转换
老師讓做AD轉換的實驗,并把轉換結果用數碼管顯示出來。由于疫情的原因,沒有C51的小試驗箱,就只能用protues進行仿真。
一、AD部分
AD轉換我用的是ADC0808芯片。ADC0808的內部結構和外部引腳分別如下圖所示,內部各部分的作用和工作原理在內部結構圖中一目了然,下面對各引腳定義分述如下:
(1)IN~IN—8路模擬輸入,通過3根地址譯碼ADDA,ADDB,ADDC。來選通一路。
(2) D7-D0—A/D轉換后的數據輸出端,為三態可控輸出,8位排列順序是D7為最高位, D0為最低位。
(3) ADDA,ADDB,ADDC—模擬通道選擇地址信號,ADDA為低位,ADDC為高位。
(4) VR(+)、VR(-)—正、負參考電壓輸入端,用于提供片內DAC電阻網絡的基準電壓。在單極性輸入時, VR(+)=5V,VR(-)=0V。
(5) ALE—地址鎖存允許信號,高電平有效。當此信號有效時, A、B、C三位地址信號被鎖存,譯碼選通對應模擬通道。在使用時,該信號常和START信號連在一起。
(6) START— A/D轉換啟動信號,正脈沖有效。加于該端的脈沖的上升沿使逐次逼近寄存器清零,下降沿開始AD轉換。如正在進行轉換時又接到新的啟動脈沖,則原來的轉換進程被中止,重新從頭開始轉換。
(7) EOC—轉換結束信號,高電平有效。該信號在A/D轉換過程中為低電平,其余時間為高電平。該信號可作為被單片機查詢的狀態信號,也可作為對單片機的中斷請求信號。
(8) OE—輸出允許信號,高電平有效。當微處理器將該信號置高時, ADC0B808的輸出三態門被打開,使轉換結果通過數據總線輸出。
二、數碼管動態顯示
動態顯示的特點是將所有位數碼管的段選線聯在一起,由位選線控制是哪一位數碼管亮。所謂動態顯示即輪流向各位數碼管送出相應段碼,并一直循環。利用發光管的余輝和人眼視覺殘留作用,使人感覺好像各位數碼管同時都在顯示。也就是實際上每一時刻只有一個數碼管是亮的,但是只要更新頻率足夠快(>100Hz),肉眼看起來,這些數碼管就同時顯示我們需要的數字了。
這里我用了四個數碼管,將轉換的數據用毫伏顯示。
三、代碼部分
#include <REGX51.H> typedef unsigned char u8; typedef unsigned int u16; #define ALESTART P2_3 #define ADCBUSY P2_5 #define DATA P0 #define SEG_Port P1 //數碼管顯示 float Volt=0.0; u8 channel=0; u8 SEG_Sel[4]={0x08,0x04,0x02,0x01}; //數碼管位選數據 u8 SEG[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //數碼管段選數據 /*****函數聲明*****/ void ADC_Init(void); float Get_Vlot(void); void Delay(u8 time); void SEG_Show(void); /*****主函數*****/ void main(void) {ADC_Init();channel=4;while(1){Volt=Get_Vlot();SEG_Show();} } void ADC_Init(void) {DATA=0xff; //IO口用做輸入時,先輸出1ADCBUSY=1; //IO口用做輸入時,先輸出1ALESTART=0; } float Get_Vlot(void) {u16 num;P2&=0xf8;P2|=channel; //ADDA,ADDB,ADDC模擬通道選擇地址信號ALESTART=1;Delay(2);ALESTART=0;Delay(2);while(ADCBUSY==0); //等待EOC置高num=DATA; //讀取數據return (num*5000.0/255.0); //毫伏顯示 } void Delay(u8 time) {unsigned char i, j;for (i=0; i<time; i++)for (j=0; j<12; j++); } void SEG_Show(void) //數碼管顯示 {int temp;u8 ord;temp=(int)Volt; for(ord=0;ord<4;ord++) {P3=SEG_Sel[ord]; SEG_Port=SEG[temp%10]; Delay(10);SEG_Port=0xff;temp=temp/10;} }四、protues部分
ADC0808連接圖
C51部分連接圖
仿真結果(protues如何畫圖仿真以及如何與keil5聯調在這里我就說明了)
仿真結果還是很滿意的。
總結
以上是生活随笔為你收集整理的C51数码管动态显示+AD转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot理解
- 下一篇: css预编译的优缺点