新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ADC0809電壓表 數(shù)據(jù)采集與處理方法

        ADC0809電壓表 數(shù)據(jù)采集與處理方法

        作者: 時間:2016-11-28 來源:網(wǎng)絡 收藏
        使用ADC0809制作5V電壓表時,遇到新的知識——模數(shù)轉(zhuǎn)換,趕緊記下自己的心得以供以后參考。
        ADC0809數(shù)據(jù)8位輸出OUT1~OUT8,與單片機硬件連接時最好為整個8位PX(P0、P1、P2、P3)口,下面為數(shù)據(jù)采集與處理參考程序分析:
        假設使用void ADC(unsigned char ad_dat)函數(shù)來進行轉(zhuǎn)換,那么在main中調(diào)用時可以直接寫ADC(PX);將整個PX口的數(shù)據(jù)以unsigned char(uchar)類型讀取進來。在ADC函數(shù)里這樣寫(此處只寫出對已收到的數(shù)據(jù)處理,省略了芯片的啟動電平和是否完成轉(zhuǎn)換判別等等):
        float temp;//浮點保留小數(shù)點后面六位,最后一位四舍五入
        uchar val_int;//用于存儲整數(shù)位
        uint val_decimal;//存小數(shù)位
        temp = ad_dat * (5/255);//主要是這個地方的原理比較重要:首先輸出數(shù)據(jù)的8個口,能夠表示的無符號整數(shù)范圍是0~255。而測量電壓的范圍是0~5V(以參考電壓連接決定),所以接收到的整數(shù)與想要得到的電壓值存在 5/255 的數(shù)量關系。為了保持精度,所以temp用的是float類型。
        val_int = (uchar) temp;//強制轉(zhuǎn)換,保留temp的整數(shù)部分,注意,這里并不會改變temp的數(shù)據(jù)
        val_decimal = (uint) ((temp - val_int) * 100);//把整數(shù)部分減去為0之后。把想要保留的小數(shù)提上來,這樣數(shù)碼管顯示的時候當做整數(shù)來處理。
        雖然程序沒仿真過,目前也還沒出成品,不過這個新的知識,感覺挺理論的,不能忘了
        更正錯誤:temp = ad_dat * (5/255);這條語句中,(5/255)必須用算出值0.0196078。原句改為:temp = ad_dat * 0.0196078; 否則轉(zhuǎn)換值全是0。原因還未探明,相信與數(shù)據(jù)類型有關系。


        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 广灵县| 疏附县| 宁夏| 绍兴县| 申扎县| 建湖县| 信丰县| 夏河县| 余庆县| 温州市| 宝清县| 河南省| 湘西| 阿荣旗| 建始县| 兴海县| 乌拉特后旗| 金堂县| 丹寨县| 安岳县| 井研县| 潢川县| 文登市| 高碑店市| 张北县| 南丹县| 南昌县| 桃园市| 永德县| 金山区| 合山市| 左权县| 金沙县| 肥东县| 鹤庆县| 秦皇岛市| 临沧市| 康保县| 安图县| 澄城县| 佳木斯市|