日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C51数码管动态显示+AD转换

發布時間:2023/12/20 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。