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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機雙積分式AD轉換電路源程序及Proteus仿真

  [復制鏈接]
跳轉到指定樓層
樓主
給大家分享一個51單片機雙積分式AD轉換的Proteus仿真,下面是原理圖:

單片機雙積分式AD轉換的所有資料下載(包含源程序和proteus仿真):
單片機雙積分式AD轉換電路源程序Proteus仿真.rar (63.1 KB, 下載次數: 170)

單片機源程序:
  1. /*-------------------------------------------------------------------
  2.                       LCD1602.c      1602用的函數
  3.       
  4.                 作者:liunian     

  5.                 郵箱:liunian_leon@sohu.com

  6.                 日期:7.13
  7.               
  8.                 版本:V1.0 適合初學者使用
  9. -------------------------------------------------------------------*/

  10. #include<reg51.h>
  11. #include<absacc.h>
  12. #include<intrins.h>


  13. #define uint unsigned int
  14. #define uchar unsigned char

  15. sbit EN=P2^2;         //使能信號
  16. sbit RW=P2^1;         //讀寫控制信號
  17. sbit RS=P2^0;         //數據命令選擇端口
  18. sbit P34=P3^4;
  19. sbit P35=P3^5;

  20. #define D_port P0      //傳送數據的端口設為P0,以上端口根據實際硬件電路圖可做修改

  21. uint ss,lo,loo;
  22. uchar kl = 0;
  23. unsigned char code love[]="Dual Integral AD";
  24. unsigned char code no[]="                ";

  25. unsigned char code time[]="0123456789ABCDEF:MinHour ";

  26. unsigned char code tin[]= "Vin:";
  27. unsigned char code tvref[]="Vref:";




  28. /****************1MS延時函數******************************/

  29. void delay(unsigned int n)

  30. {

  31.     unsigned int i,j;

  32.     for(j=n;j>0;j--)

  33.     for(i=112;i>0;i--);

  34. }

  35. /*液晶***************查詢液晶是否忙*************************/

  36. void Checkbusy()
  37. {   
  38.    
  39.         D_port=0xff;                   //P0全部置1,可以查詢判斷P0口狀態,讀取液晶的命令
  40.         RS=0;
  41.         RW=1;
  42.         EN=1;
  43.         _nop_();                       //讀液晶命令時各控制位的狀態幾時序
  44.         while(D_port&0x80)             //判斷最高位狀態,最高位是液晶忙的狀態位
  45.         {
  46.                 EN=0;
  47.                 _nop_();
  48.                 _nop_();
  49.                 EN=1;
  50.                 _nop_();
  51.                 _nop_();
  52.         }                             //如果液晶忙,則循環查詢
  53.         EN=0;

  54. }

  55. /*液晶***************寫數據到液晶***************************/

  56. D_write(uchar a)
  57. {   
  58.      Checkbusy();        //檢查忙標志位
  59.      D_port=a;
  60.      RS=1;               
  61.      RW=0;
  62.      EN=1;               //寫數據各控制位的值既對應的時序
  63.      _nop_();
  64.      _nop_();
  65.      _nop_();           //發送數據,此處是發送到P0口,程序前已經定義
  66.      EN=0;
  67. }

  68. /*液晶***************寫指令到液晶***************************/

  69. C_write(uchar a)
  70. {
  71.      Checkbusy();        //檢查忙標志位
  72.      D_port=a;
  73.      RS=0;
  74.      RW=0;
  75.      EN=1;               //寫指令各控制位的值既對應的時序
  76.      
  77.      _nop_();
  78.      _nop_();
  79.      _nop_();           //發送指令,此處是發送到P0口,程序前已經定義
  80.      EN=0;
  81. }

  82. /*液晶**************液晶初始化******************************/

  83. Initial()
  84. {
  85.      D_port=0;
  86.      delay(20);
  87.      C_write(0x38);
  88.      delay(10);
  89.      C_write(0x38);
  90.      delay(10);
  91.      C_write(0x38);
  92.      delay(10);
  93.      Checkbusy();
  94.      C_write(0x38);
  95.      Checkbusy();
  96.      C_write(0x08);        //關閉顯示
  97.      Checkbusy();      
  98.      C_write(0x01);        //清屏
  99.      Checkbusy();
  100.      C_write(0x06);        //顯示光標右移設置
  101.      Checkbusy();
  102.      C_write(0x0c);        //顯示開,光標不顯示,不閃爍
  103.      delay(5);
  104. }                          //根據1602初始化的指令順序來初始化LCD,相關初始化步驟可查閱相關資料

  105. /*液晶**************設定顯示位置函數************************/

  106. setpos(uchar posx,uchar posy)
  107. {
  108.      posx=posx&0xf;                         //將顯示在第幾位置轉為二十六進制,每行總共16個位置
  109.      posy=posy&0x1;                         //設置顯示在第幾行
  110.      C_write(posx|posy*0x40+0x80);          //設置位置命令最高位必須為一,所以要加0x80
  111. }


  112. /*液晶**************顯示一個字符子程序**********************/

  113. displaychar(uchar x,uchar y,uchar a)
  114. {   
  115.      Checkbusy();          //檢查忙標志位
  116.      setpos(x,y);          //設置顯示位置
  117.      D_write(a);           //將要顯示的數據寫到液晶
  118. }

  119. /*液晶**************顯示一串字符串**************************/

  120. displaystring(uchar x,uchar y,unsigned char code *string)
  121. {
  122.      uchar length=0;       //定義一個字符串長度
  123.      Checkbusy();         
  124.      while(string[length]!='\0')     //字符串是以'\0'結束的,因此只要每結束就顯示下一字符
  125.      {
  126.      displaychar(x,y,string[length++]);  //顯示一個字符子程序
  127.      x++;                               //液晶顯示的位置+1
  128.      }
  129. }

  130. /*液晶**************顯示個數**************************/

  131. void lcd_byte(unsigned char  x, unsigned char  y ,unsigned int byte_data)                //以十進制的方式顯示一個字符變量
  132. {
  133.   unsigned int temp_data;  

  134.     temp_data=byte_data/10000;                            //求萬位數
  135.   displaychar(x+0,y,temp_data+48);                                                  //轉化為ASCII值再顯示

  136.     temp_data=byte_data % 10000 /1000;                            //求千位數
  137.   displaychar(x+1,y,temp_data+48);                                                   //轉化為ASCII值再顯示
  138.    
  139.   temp_data=byte_data%1000/100;                            //求百位數
  140.   displaychar(x+2,y,temp_data+48);                          //轉化為ASCII值再顯示
  141.    
  142.   temp_data=byte_data%100/10;                          //求十位數
  143.   displaychar(x+3,y,temp_data+48);                          //轉化為ASCII值再顯示
  144.    
  145.   temp_data=byte_data%10;                             //求個位數
  146.   displaychar(x+4,y,temp_data+48);                          //轉化為ASCII再再顯示
  147.   }

  148. void my_t0(void) interrupt 1  //定時器0中斷用于固定時間對輸入待測電壓進行積分
  149. {
  150.   TR0 = 0;    //T0中斷關
  151.   P34=1;      //選擇-2.5V基準
  152.   TH0 = 0;
  153.   TL0 = 0;
  154.   //lo=lo+1;
  155.   //TMOD=TMOD | 0x8;
  156.   //TF0 = 0;   //清除T0中斷標志  
  157.   TR0 = 1;    //T0中斷開
  158.   EX0 = 1;    //INT0中斷開

  159. }

  160. void my_int0(void) interrupt 0          //外部中斷 用于反積分過程結束檢測
  161. {
  162.   TR0 = 0;    //T0中斷關
  163.   TF0 = 0;   //清除T0中斷標志
  164.   EX0 = 0;    //INT0中斷關
  165.   ss = TH0 * 256 + TL0;
  166.   P34=1;   //選擇-2.5V基準
  167. // P35=1;   //選擇放電
  168.   TH0 = 0;
  169.   TL0 = 0;
  170.   kl = 0;
  171.   }

  172. main()
  173. {
  174. Initial();
  175. P34=1;   //選擇-2.5V基準
  176. //P35=1;   //選擇放電
  177. displaystring( 0, 0, love);
  178. delay(500);
  179. displaystring( 0, 0, no);
  180. displaystring( 0, 1, tvref);

  181. EA =  1;   //中斷開
  182. ET0 = 1;   //定時計數0中斷開        
  183. IP  = 1;    //定時0中斷最高優先級 =2
  184. TMOD = 1;        //定時0模式1 2個16位定時/計數器
  185. TCON=0x00;  //INT0負邊緣觸發或低電平觸發在此好象作用相同
  186. displaystring( 0, 0, tin);
  187. while(1)
  188. {
  189. if(kl==0)
  190. {
  191. P34=1;   //選擇-2.5V基準
  192. //P35=1;   //選擇放電
  193. delay(26);
  194. TMOD = 1;
  195. TH0 = 0x63;
  196. TL0 = 0xC0;
  197. //loo=loo+1;
  198. P34=0;   //選擇輸入電壓基準
  199. //P35=0;   //選擇測量
  200. kl = 1;
  201. TR0 = 1;   //定時計數0起動
  202. TF0 = 0;   //清除T0中斷標志
  203. }
  204. delay(500);
  205. //lo=ss*0.0773;
  206. loo=ss-lo;
  207. if(loo>32767)
  208.   {loo=65535-loo;}
  209. lo=ss;
  210. lcd_byte(5,0,ss);
  211. lcd_byte(5,1,loo);
  212. //lcd_byte(11,1,loo);

  213. }
  214. }
復制代碼

評分

參與人數 2威望 +3 黑幣 +35 收起 理由
xiaogueiee + 5 共享資料的黑幣獎勵!
木木de + 3 + 30 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

來自 2#
ID:392914 發表于 2021-9-12 21:33 | 只看該作者
我有一只-20~100度溫控儀表.型號XMTA-6000.新唐N79E825.只用二個運放.二個IO口.分別TO.RXD.進行AD轉換.切斷2個IO口也能自個在80度左右動態顯示.一直琢磨不透該原理.望高手給指點下.
回復

使用道具 舉報

板凳
ID:198395 發表于 2017-5-8 22:04 | 只看該作者
謝謝分享。
回復

使用道具 舉報

地板
ID:191745 發表于 2017-6-24 15:51 | 只看該作者
片機雙積分式AD轉換的所有資料下片機雙積分式AD轉換的所有資料下片機雙積分式AD轉換的所有資料下
回復

使用道具 舉報

5#
ID:68356 發表于 2017-6-24 19:35 | 只看該作者
感謝分享
回復

使用道具 舉報

6#
ID:17144 發表于 2017-6-25 08:33 | 只看該作者
謝謝分享@
回復

使用道具 舉報

7#
ID:246123 發表于 2017-11-4 22:59 | 只看該作者
謝謝!
回復

使用道具 舉報

8#
ID:250483 發表于 2017-11-17 17:31 | 只看該作者
很好的程序,謝謝分享!
回復

使用道具 舉報

9#
ID:282784 發表于 2018-2-7 11:00 | 只看該作者
不錯。。。。
回復

使用道具 舉報

10#
ID:86577 發表于 2018-4-23 17:55 | 只看該作者
不錯,謝謝樓主
回復

使用道具 舉報

11#
ID:325516 發表于 2018-5-8 21:52 | 只看該作者
很有用,謝謝樓主
回復

使用道具 舉報

12#
ID:114814 發表于 2018-5-18 23:07 | 只看該作者
剛好需要  謝謝
回復

使用道具 舉報

13#
ID:349838 發表于 2018-6-11 21:50 | 只看該作者
膜拜大佬
回復

使用道具 舉報

14#
ID:351570 發表于 2018-6-14 08:42 | 只看該作者
感謝大神分享
回復

使用道具 舉報

15#
ID:70035 發表于 2018-9-6 10:52 | 只看該作者
己下載仿真,確實不錯。
回復

使用道具 舉報

16#
ID:412379 發表于 2018-10-19 17:08 | 只看該作者
謝謝分享。
回復

使用道具 舉報

17#
ID:495129 發表于 2019-3-21 08:52 | 只看該作者
謝謝分享
回復

使用道具 舉報

18#
ID:536124 發表于 2019-5-12 14:46 | 只看該作者
想問問大佬,這個顯示的值和真正的電壓并不匹配是怎么回事?
回復

使用道具 舉報

19#
ID:241434 發表于 2019-7-14 08:59 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

20#
ID:86577 發表于 2021-4-10 13:28 | 只看該作者
不錯的電路
回復

使用道具 舉報

21#
ID:839438 發表于 2021-9-19 14:33 | 只看該作者
不知道,有沒有用先下載了再說
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久天堂网| 久久免费香蕉视频 | 日韩成人av在线 | 国产精品久久久久久久久久久免费看 | 精品亚洲一区二区 | 色偷偷噜噜噜亚洲男人 | 国产精品区二区三区日本 | 国产精品视频一区二区三区四蜜臂 | 91 中文字幕 | 中文字幕视频免费 | 有码在线 | 久久精品国产亚洲夜色av网站 | 久久伊人影院 | 水蜜桃亚洲一二三四在线 | 久久不射网 | 亚洲天堂精品久久 | 免费在线黄 | 国产精品久久久久久二区 | 亚洲女人的天堂 | 欧美精品欧美精品系列 | 免费h在线 | h视频免费在线观看 | 久草新在线 | 国产精品一区网站 | 久优草 | 亚洲精品久久久久久下一站 | 日日干干| www.成人.com| 草久网 | 狠狠久久综合 | 欧美久久久久久久久 | 精品国产色| 国产日韩一区二区三区 | 国产精品久久久 | 麻豆亚洲| 亚洲一区 | 日韩一区中文字幕 | 精品一二区 | 国产精品久久久久久 | 天天干天天操天天射 | 亚洲精品久久久久中文字幕二区 |