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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

ad0832采集5V電壓

[復制鏈接]
跳轉到指定樓層
樓主

  1. #include <reg52.h>
  2. #include<intrins.h>
  3. #include<math.h>
  4. #include <stdio.h>

  5. char data str[]="                ";
  6. /**********************************/
  7.   /**********LCD1602接口程序**********/

  8. #define DD P2
  9. sbit Rs=P3^0;
  10. sbit Rw=P3^1;
  11. sbit E=P3^2;

  12. /********************************/
  13. void delay_1ms(unsigned char i)   //最小延時1ms
  14. {
  15.         unsigned char j;
  16.         while(i--)
  17.         for(j=0;j<125; j++);
  18. }
  19. void delay_10us(unsigned char i) //最小延時10us
  20. {
  21.         unsigned char j;
  22.         while(i--)
  23.         for(j=0;j<10; j++);
  24. }

  25. void write_com(unsigned char com)   //寫指令
  26. {
  27.         delay_10us(5);
  28.         E=0;
  29.         Rs=0;
  30.         Rw=0;
  31.         DD=com;
  32.         delay_10us(50); //>40us
  33.         E=1;
  34.         delay_1ms(2); //>150us
  35.         E=0;
  36.         delay_10us(4); //>25+10us
  37. }

  38. void write_data(unsigned char DATA)   //寫數據
  39. {
  40.         delay_10us(50);
  41.         E=0;
  42.         Rs=1;
  43.         Rw=0;
  44.         DD=DATA;
  45.         delay_10us(50);
  46.         E=1;
  47.         delay_10us(50);
  48.         E=0;
  49.         delay_10us(4);
  50. }


  51. void addr_x_y(unsigned char x,bit y)   //寫坐標,定位置
  52. {
  53.         unsigned char temp=0x80;                        //默認最高位:D7為1 即以0x80開始。         
  54.         if(y)                                                                //y :0為第一行  1為第二行
  55.                    {
  56.                            temp|=0x40;
  57.                    }
  58.                            temp|=x;
  59.         write_com(temp);
  60. }


  61. void Show_Char(unsigned char x,bit y,unsigned char p)

  62. //在指定位置顯示一個字符。
  63. {
  64.         addr_x_y(x,y);
  65.         write_data(p);
  66. }

  67. void Show_String(unsigned char x,bit y,char *ptr)
  68. {
  69.          unsigned char i;
  70.         for (i=0;i<16;i++)
  71.          Show_Char(x++,y,*(ptr+i));//循環顯示16個字符
  72. }


  73. void init(void)                 //1602初始化代碼
  74. {
  75.         delay_1ms(1500);
  76.         write_com(0x38);
  77.         delay_1ms(5);
  78.         write_com(0x38);
  79.         delay_1ms(5);
  80.         write_com(0x38);
  81.         delay_1ms(5);
  82.         write_com(0x38);
  83.         write_com(0x08);
  84.         write_com(0x06);
  85.         write_com(0x0c);
  86.         write_com(0x01);
  87. }
  88. void xs_int(unsigned int shuju,bit t)   //數據顯示
  89. {
  90.         unsigned char huancun[6]={0};
  91.         unsigned char biaozhi=0,i;
  92.         if   (shuju < 10) biaozhi = 1;
  93.         else if(shuju < 100) biaozhi = 2;
  94.         else if(shuju < 1000) biaozhi = 3;
  95.         else if(shuju < 10000) biaozhi = 4;
  96.         else if(shuju < 65535) biaozhi = 5;
  97.         switch(biaozhi)                        //這里沒有break,因此從標識匹配的入口直接執行到最后,完成整數各位的提取到數組。
  98.            {
  99.            case 5:huancun[5] = shuju/10000;
  100.             case 4:huancun[3] = shuju%10000/1000;
  101.             case 3:huancun[2] = shuju%1000/100;
  102.             case 2:huancun[1] = shuju%100/10;
  103.             case 1:huancun[0] = shuju%10;        break;
  104.             default:break;
  105.                 }
  106.         for(i=0;i<6;i++)
  107.                    {
  108.                            if(i==1)Show_Char(i,1,'.');                 //加入小數點,縮小了10000倍,因此AD采樣后的值需要乘上10000*5V/256=196(V)
  109.                 else Show_Char(i,t,0x30+huancun[6-i-1]);
  110.                 }
  111.         Show_Char(6,t,'V');
  112. }


  113. /************************************************************/
  114. /**********ADC0832接口程序************************************/
  115. sbit ADC_CS =P3^4;
  116. sbit ADC_CLK=P3^5;
  117. sbit ADC_DO =P3^6;
  118. sbit ADC_DI =P3^7;
  119. /*******************************************************************/
  120. void Delay(unsigned char j)
  121. {
  122.          unsigned char i;
  123.          for(i=0;i<j;i++); //延時,脈沖一位持續的時間
  124. }

  125. unsigned char ADC0832(void) //把模擬電壓值轉換成8位二進制數并返回
  126. {
  127.          unsigned char i,data_c;
  128.          data_c=0;
  129.          ADC_CS=0;
  130.          ADC_CLK=1;
  131.          ADC_DO=0;//片選,DO為高阻態
  132.          //ADC_DI=0;        //先拉低
  133.         
  134.          for(i=0;i<10;i++)
  135.                     {;}
  136.         
  137.         ADC_CLK=0;
  138.         Delay(2);
  139.         ADC_CLK=1;
  140.         ADC_DI=1; //啟始位         
  141.         Delay(2);
  142.         
  143.         ADC_CLK=0;          //第一個脈沖下降沿,DI=1為起始位
  144.         Delay(2);
  145.         ADC_CLK=1;
  146.         ADC_DI=1;          //1
  147.         Delay(2);
  148.         
  149.         ADC_CLK=0;           //第二個脈沖下降沿,DI=1
  150.         Delay(2);
  151.         ADC_DI=1;  //1        若為0則選擇CH0
  152.         ADC_CLK=1;
  153.         Delay(2);
  154.         
  155.         ADC_CLK=0;          //第三個脈沖下降沿,DI=1,選擇 ADC0832 的CH1(1 1)
  156.         Delay(2);
  157.         ADC_DI=1;          //已不關心
  158.         ADC_DO=1;        //高阻
  159.         ADC_CLK=1;
  160.         Delay(2);
  161.         
  162.         for (i=0; i<8; i++)
  163.             {
  164.                         ADC_CLK=0;         //第四個開始讀數據
  165.                         Delay(2);
  166.                     data_c=(data_c<<1)|ADC_DO;//在每個脈沖的下降沿DO輸出一位數據,最終ch為8位二進制數
  167.                         ADC_CLK=1;
  168.                         Delay(2);
  169.                    }
  170.         ADC_CS=1;//取消片選,一個轉換周期結束
  171.         return(data_c);//把轉換結果返回
  172. }

  173. void main(void)
  174. {
  175.         unsigned int data_temp=0;
  176.         while(1)
  177.         {
  178.                 data_temp=ADC0832();
  179.                 sprintf(str,"The voltage is:"); //the first line
  180.                    init();
  181.                 Show_String(0,0,str);
  182.                 xs_int(196*data_temp,1);           //10000*5V/256=196(V),把采樣值放大10000倍后再處理,移動小數點4位。 4位有效數字,其實用不到,因為8位采樣精度為:0.019V
  183.                 delay_1ms(1500);
  184.    }
  185. }
復制代碼


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本精品久久久久久久 | www.国产日本 | 中文天堂在线一区 | 欧美精品三区 | 亚洲aⅴ精品 | 亚洲电影成人 | 亚州精品天堂中文字幕 | 久久久久国产精品 | 国产精品美女久久久久久免费 | 五月激情六月婷婷 | 亚洲日本一区二区三区四区 | 少妇一区二区三区 | 成人在线精品视频 | 亚洲黄色一级 | 毛片黄片| 国产 日韩 欧美 在线 | 精精国产xxxx视频在线播放 | av官网在线 | 国产在线中文字幕 | 全部免费毛片在线播放网站 | 久久久这里都是精品 | 日韩羞羞| 99这里只有精品视频 | 国产精品视频一区二区三 | 欧美精品一区二区三区在线 | 国产精品99久久久久久宅男 | 欧美乱码精品一区二区三区 | 免费一级网站 | 国产精品美女久久久久aⅴ国产馆 | 中文字幕免费观看 | 在线观看中文字幕 | 欧美一级视频免费看 | 欧美一级欧美三级在线观看 | 天天操天天拍 | 久久久久久国模大尺度人体 | 日本久久福利 | 亚洲视频免费观看 | 国产精品久久免费观看 | 日韩一区中文字幕 | 欧美不卡网站 | 亚洲精品一区二区在线观看 |