• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > ADC0809電壓表 數據采集與處理方法

    ADC0809電壓表 數據采集與處理方法

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


    評論


    技術專區

    關閉
    主站蜘蛛池模板: 三门县| 西乌| 安远县| 连城县| 西安市| 杭锦后旗| 星座| 莱阳市| 开平市| 长沙县| 诏安县| 即墨市| 彩票| 恩平市| 历史| 商河县| 攀枝花市| 文登市| 阿合奇县| 大洼县| 泗洪县| 揭东县| 方城县| 平遥县| 安新县| 牙克石市| 乳源| 洛阳市| 临高县| 兰坪| 恩施市| 杨浦区| 全州县| 安图县| 孟连| 舟山市| 宁德市| 龙海市| 临沧市| 政和县| 永川市|