久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6580|回復: 5
打印 上一主題 下一主題
收起左側

單片機+ADC0832實現量程0~25V數字電壓表的仿真程序設計

  [復制鏈接]
跳轉到指定樓層
樓主
第一次接觸模數轉換,做了這么一個小仿真,測量0~25V的輸入電壓,以4位數(兩位小數)的形式顯示在一個四位共陽數碼管上,測量誤差不大于0.1V。
ADC0832只是一個對0~5V電壓進行模擬轉數字的器件,分辨率8位,即有從0到255個擋位,每一檔約為(5/255)V,即0.02V,為了實現0~25V的轉換,先將待測電壓通過電位器(滑動電阻)縮小5倍,保證其始終處于0~5V內再輸入ADC0832(ADC0832實際轉換的模擬量在0~5V之內),然后再將ADC0832轉換后的數值*5,即可獲知待測電壓的實際值。


但這種取巧的方式雖然能在不換器件的前提下實現量程的擴充,但缺陷是誤差值也隨之放大(因為先把電壓通過電位器幾乎零誤差的縮小1/5,然后再把ADC0832的轉換結果放大5倍),ADC0832的誤差值大約0.02V,電壓表實際測量的誤差值大約0.1V

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

源碼:
  1. #include<reg51.h>
  2. #include<intrins.h>

  3. sbit CS=P3^5;
  4. sbit CLK=P3^3;
  5. sbit DI=P3^4;
  6. sbit DO=P3^4;
  7. sbit dot=P0^5;      //小數點

  8. unsigned char dat=0x00;
  9. unsigned char nums[]={0x00,0x00,0x00,0x00};
  10. unsigned char channel;      //轉換通道
  11. unsigned char LEDS[]={0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xB8,0x20,0x28};       //共陽4位數碼管段碼,字符顯示從'0'到'9'

  12. unsigned char ADC0832(unsigned char channel)        //模數轉換
  13. {
  14.     unsigned char i;
  15.     unsigned char x=0x00;
  16.     unsigned char y=0x00;

  17.     CLK=0;      //初始化
  18.     DI=1;
  19.     _nop_();
  20.     CS=0;
  21.     _nop_();
  22.     CLK=1;
  23.     _nop_();

  24.     if(channel==0x00)       //通道選擇
  25.     {       //通道0
  26.         CLK=0;
  27.         DI=1;
  28.         _nop_();
  29.         CLK=1;
  30.         _nop_();
  31.         CLK=0;
  32.         DI=0;
  33.         _nop_();
  34.         CLK=1;
  35.         _nop_();
  36.     }
  37.     else        //通道1
  38.     {
  39.         CLK=0;
  40.         DI=1;
  41.         _nop_();
  42.         CLK=1;
  43.         _nop_();
  44.         CLK=0;
  45.         DI=1;
  46.         _nop_();
  47.         CLK=1;
  48.         _nop_();
  49.     }

  50.     CLK=0;
  51.     DI=1;
  52.     for(i=0;i<8;i++)        //讀取ADC0832輸出的前8位數據
  53.     {
  54.         x<<=1;
  55.         _nop_();
  56.         CLK=1;
  57.         _nop_();
  58.         CLK=0;
  59.         if(DO==1)
  60.         {
  61.             x|=0x01;
  62.         }
  63.         else
  64.         {
  65.             x|=0x00;
  66.         }
  67.     }
  68.     for(i=0;i<8;i++)        //讀取ADC0832輸出的后8位數據
  69.     {
  70.         y>>=1;
  71.         if(DO==1)
  72.         {
  73.             y|=0x80;
  74.         }
  75.         else
  76.         {
  77.             y|=0x00;
  78.         }
  79.         _nop_();
  80.         CLK=1;
  81.         _nop_();
  82.         CLK=0;
  83.     }
  84.     if(x==y)        //校驗,比較前8位與后8位的值
  85.     {
  86.         dat=x;
  87.     }
  88.     _nop_();
  89.     CS=1;       //釋放ADC0832
  90.     DO=1;
  91.     CLK=1;
  92.     return dat;
  93. }

  94. void Convert(unsigned char dat0)        //數據處理
  95. {
  96.     unsigned int x;
  97.     x=dat0*0.0196*100*5;
  98.     nums[0]=x/1000;
  99.     nums[1]=x%1000/100;
  100.     nums[2]=x%1000%100/10;
  101.     nums[3]=x%1000%100%10;
  102. }

  103. void Delay()        //數碼管顯示
  104. {
  105.     unsigned char i,j;
  106.     for(i=0;i<1;i++)
  107.     {
  108.         for(j=0;j<121;j++);
  109.     }
  110. }

  111. void Display()
  112. {
  113.     P0=LEDS[nums[0]];
  114.     P2=0xFE;
  115.     Delay();
  116.     P2=0xFF;

  117.     P0=LEDS[nums[1]];
  118.     dot=0;
  119.     P2=0xFD;
  120.     Delay();
  121.     P2=0xFF;

  122.     P0=LEDS[nums[2]];
  123.     P2=0xFB;
  124.     Delay();
  125.     P2=0xFF;

  126.     P0=LEDS[nums[3]];
  127.     P2=0xF7;
  128.     Delay();
  129.     P2=0xFF;
  130. }

  131. void main()
  132. {
  133.     while(1)
  134.     {
  135.         dat=ADC0832(channel);
  136.         Convert(dat);
  137.         Display();
  138.     }
  139. }
復制代碼



上圖仿真工程文件和.c文件51hei附件下載:
ADC0832數字電壓表(0~25V).zip (43.82 KB, 下載次數: 177)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂1 踩
回復

使用道具 舉報

來自 2#
ID:262 發表于 2022-9-19 22:16 | 只看該作者
634658537 發表于 2022-9-19 15:54
仿真圖為什么打不開

要用Proteus8.8版本,你看我用這個版本的打開效果,動圖

51hei.gif (315.33 KB, 下載次數: 129)

51hei.gif
回復

使用道具 舉報

板凳
ID:1011897 發表于 2022-4-14 15:46 | 只看該作者
您好  如果我想制成0-200的 縮小40倍嗎  精度我這把可以不考慮 1v都可以 需要怎么修改程序
回復

使用道具 舉報

地板
ID:622274 發表于 2022-9-19 15:54 | 只看該作者
仿真圖為什么打不開
回復

使用道具 舉報

5#
ID:579397 發表于 2022-9-20 00:55 | 只看該作者
kinghhback 發表于 2022-4-14 15:46
您好  如果我想制成0-200的 縮小40倍嗎  精度我這把可以不考慮 1v都可以 需要怎么修改程序

是的,把R1 R2的電阻修改,用分壓公式

數據修改如下:
void Convert(unsigned char dat0)        //數據處理
{
    unsigned int x;
    x=dat0*0.0196*100*5;
    nums[0]=x/1000;
    nums[1]=x%1000/100;
    nums[2]=x%1000%100/10;
    nums[3]=x%1000%100%10;
}
回復

使用道具 舉報

6#
ID:183990 發表于 2024-7-9 21:27 | 只看該作者
你好,問下10V一下10位數的0如何不顯示呢
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久伊人精品一区二区三区 | 日韩欧美国产电影 | 国内精品久久久久 | 欧美八区 | 黑人精品| 欧美一级全黄 | 超碰8| 免费成人在线网站 | 国产精品123区 | 99精品久久 | 欧美日韩在线观看一区 | 91在线看视频 | 午夜精品久久久久久久久久久久久 | 亚洲精品电影在线 | 99精品在线 | 夜夜精品浪潮av一区二区三区 | 久久国产精品视频 | 九九九久久国产免费 | 欧美日韩精选 | 激情av网站| 红桃视频一区二区三区免费 | 国产免费av网 | 亚洲一区二区三区在线免费观看 | 国产精品精品3d动漫 | 国产在线一区观看 | 亚洲一区国产 | 国产精品不卡一区 | 中文字幕日本一区二区 | 久久久精品网站 | 国产视频中文字幕在线观看 | 国产日韩欧美一区二区在线播放 | 久久高清精品 | 欧美日韩在线一区二区三区 | 亚洲视频一区二区 | 天天操夜夜操 | 成人精品一区二区三区 | 国产一区二区三区欧美 | 羞羞视频免费在线观看 | 成人免费一级 | 成人精品免费视频 | 久久久新视频 |