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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機ADC0809中斷模式循環采集電壓源程序+Proteus仿真

[復制鏈接]
跳轉到指定樓層
樓主
51單片機和ADC0809循環采集電壓,實時刷新,proteus仿真


單片機源程序如下:
  1. /********************   
  2. * 程序說明:設計一個中斷模式的ADC0809 通道循環采樣
  3. * 摘要: ADC0809數據手冊
  4. **********************************/       
  5. #include <reg51.h>   //頭文件
  6. #include <intrins.h>
  7. #define uchar unsigned char
  8. #define uint  unsigned int
  9. uchar code Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  10. uchar code Tab1[]={0xbf,0x086,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
  11. uchar code Seg_WEI[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  12. uchar dat[]={0,0,0,0};               
  13. uchar  adc;       
  14. uint  V=0;
  15. char IN=0;
  16. uchar num;
  17. long int time;

  18. /*****************P2特殊寄存器*******************/
  19. sbit ADDA=P2^1;
  20. sbit ADDB=P2^2;
  21. sbit ADDC=P2^3;
  22. sbit ST=P2^4;                 //定義ADC0809位
  23. sbit EOC=P2^5;
  24. sbit OE=P2^6;
  25. sbit CLK =P2^7;
  26. /************        數碼管位碼****************/
  27. /***********P3特殊寄存器*****************/        
  28. sbit WEI=P3^6;
  29. sbit DUAN=P3^7;

  30. void nop(uchar xus);
  31. void display();
  32. void add(uchar c,uchar b,uchar a);
  33. void init();
  34. void gather();
  35. /******************************
  36. * 函數名稱: 主函數
  37. * 函數功能: 程序主體
  38. ***************************************/
  39. void main()
  40. {
  41.         init();
  42.         gather();
  43. }


  44. /******************************
  45. * 函數名稱: 數碼管顯示電壓
  46. * 函數功能: 顯示電壓
  47. ***************************************/
  48. void display()
  49. {
  50.         dat[0]=V/1000;
  51.         dat[1]=V%1000/100;
  52.         dat[2]=V%1000%100/10;
  53.         dat[3]=V%10;


  54.         P0=Seg_WEI[0];                         //P0特殊寄存器
  55.         WEI=1;
  56.         WEI=0;
  57.         P0=0Xff;
  58.         P0=Tab[IN];
  59.         DUAN=1;
  60.         DUAN=0;
  61.         nop(30);

  62.         P0=Seg_WEI[1];
  63.         WEI=1;
  64.         WEI=0;
  65.         P0=0XFF;
  66.         P0=0x40;
  67.         DUAN=1;
  68.         DUAN=0;
  69.         nop(30);

  70.         P0=Seg_WEI[2];
  71.         WEI=1;
  72.         WEI=0;
  73.         P0=0XFF;
  74.         P0=Tab1[dat[0]];
  75.         DUAN=1;
  76.         DUAN=0;
  77.         nop(30);

  78.         P0=Seg_WEI[3];
  79.         WEI=1;
  80.         WEI=0;
  81.         P0=0XFF;
  82.         P0=Tab[dat[1]];
  83.         DUAN=1;
  84.         DUAN=0;
  85.         nop(30);


  86.         P0=Seg_WEI[4];
  87.         WEI=1;
  88.         WEI=0;
  89.         P0=0XFF;
  90.         P0=Tab[dat[2]];
  91.         DUAN=1;
  92.         DUAN=0;
  93.         nop(30);

  94.         P0=Seg_WEI[5];
  95.         WEI=1;
  96.         WEI=0;
  97.         P0=0XFF;
  98.         P0=Tab[dat[3]];
  99.         DUAN=1;
  100.         DUAN=0;
  101.         nop(30);


  102. }

  103. /******************************
  104. * 函數名稱: 延時函數
  105. * 函數功能:  延時
  106. ***************************************/  
  107. void nop(uchar xus)
  108. {
  109.         uint i;
  110.         for(i=0;i<xus;i++)
  111.         {
  112.                 _nop_();
  113.         }
  114. }
  115. /******************************
  116. * 函數名稱: 通道選擇函數
  117. * 函數功能: 確定ADC的通道
  118. ***************************************/               
  119. void add(uchar c,uchar b,uchar a)
  120. {
  121.         ADDA=a;
  122.         ADDB=b;
  123.         ADDC=c;
  124. }
  125. /******************************
  126. * 函數名稱: 初始化
  127. * 函數功能: 中斷初始化
  128. ***************************************/
  129. void init()
  130. {
  131.         TMOD=0x01;                                //設置定時器0為工作方式1
  132.         TH0=(65536-2)/256;          //200us定時,裝入初值
  133.         TL0=(65536-2)%256;                               
  134.         EA=1;                                        //開總中斷
  135.         ET0=1;                                   //開定時器0中斷
  136.         TR0=1;                                         //啟動定時器0
  137. }
  138. /******************************
  139. * 函數名稱: 定時器
  140. * 函數功能: 定時器0工作
  141. ***************************************/
  142. void T0_time() interrupt 1
  143. {
  144.         TH0=(65536-2)/256;          //重裝初值
  145.         TL0=(65536-2)%256;
  146.         CLK=~CLK;
  147. }
  148. /******************************
  149. * 函數名稱: 采集電壓
  150. * 函數功能: 采集電壓
  151. ***************************************/
  152. void gather()
  153. {
  154.         uchar i;
  155.           while(1)
  156.           {
  157.                   for(i=0;i<8;i++)
  158.                 {
  159.                         if(i==0)
  160.                         {
  161.                                         IN=0;
  162.                                         add(0,0,0);
  163.                                         ST=0;
  164.                                 OE=0;
  165.                                 ST=1;
  166.                                 ST=0;
  167.                                        while(EOC==0);
  168.                                 OE=1;
  169.                                         adc=P1;
  170.                                         V=adc*20;
  171.                                         for(time=20;time>0;time--)
  172.                                         {       
  173.                                                 display();
  174.                                         }       
  175.                         }
  176.                          else if(i==1)
  177.                         {
  178.                                         IN=1;
  179.                                         add(0,0,1);
  180.                                         ST=0;
  181.                                 OE=0;
  182.                                 ST=1;
  183.                                 ST=0;
  184.                                        while(EOC==0);
  185.                                 OE=1;
  186.                                         adc=P1;
  187.                                         V=adc*20;
  188.                                         for(time=20;time>0;time--)
  189.                                         {       
  190.                                                 display();
  191.                                         }       
  192.                         }
  193.                         else if(i==2)
  194.                         {
  195.                                         IN=2;
  196.                                         add(0,1,0);
  197.                                         ST=0;
  198.                                 OE=0;
  199.                                 ST=1;
  200.                                 ST=0;
  201.                                        while(EOC==0);
  202.                                 OE=1;
  203.                                         adc=P1;
  204.                                         V=adc*20;
  205.                                         for(time=20;time>0;time--)
  206.                                         {       
  207.                                                 display();
  208.                                         }       
  209.                         }
  210.                         else if(i==3)
  211.                         {
  212.                                         IN=3;
  213.                                         add(0,1,1);
  214.                                         ST=0;
  215.                                 OE=0;
  216.                                 ST=1;
  217.                                 ST=0;
  218.                                        while(EOC==0);
  219.                                 OE=1;
  220.                                         adc=P1;
  221.                                         V=adc*20;
  222.                                         for(time=20;time>0;time--)
  223.                                         {       
  224.                                                 display();
  225.                                         }
  226.                         }
  227.                         else if(i==4)
  228.                         {
  229.                                         IN=4;
  230.                                         add(1,0,0);
  231.                                         ST=0;
  232.                                 OE=0;
  233.                                 ST=1;
  234.                                 ST=0;
  235.                                        while(EOC==0);
  236.                                 OE=1;
  237.                                         adc=P1;
  238.                                         V=adc*20;
  239.                                         for(time=20;time>0;time--)
  240.                                         {       
  241.                                                 display();
  242.                                         }
  243.                         }
  244.                         else if(i==5)
  245.                         {
  246.                                         IN=5;
  247.                                         add(1,0,1);
  248.                                         ST=0;
  249.                                 OE=0;
  250.                                 ST=1;
  251.                                 ST=0;
  252.                                        while(EOC==0);
  253.                                 OE=1;
  254.                                         adc=P1;
  255.                                         V=adc*20;
  256.                                         for(time=20;time>0;time--)
  257.                                         {       
  258.                                                 display();
  259.                                         }       
  260.                         }
  261.                         else if(i==6)
  262.                         {
  263.                                         IN=6;
  264.                                         add(1,1,0);
  265.                                         ST=0;
  266.                                 OE=0;
  267.                                 ST=1;
  268.                                 ST=0;
  269.                                        while(EOC==0);
  270.                                 OE=1;
  271.                                         adc=P1;
  272.                                         V=adc*20;
  273.                                         for(time=20;time>0;time--)
  274.                                         {       
  275.                                                 display();
  276.                                         }
  277.                         }
  278.                         else if(i==7)
  279.                         {
  280.                                         IN=7;
  281.                                         add(1,1,1);
  282.                                         ST=0;
  283.                                         OE=0;
  284.                                         ST=1;
  285.                                         ST=0;
  286.                                         while(EOC==0);
  287.                                         OE=1;
  288.                                         adc=P1;
  289.                                         V=adc*20;
  290.                                         for(time=20;time>0;time--)
  291.                                         {       
  292.                                                 display();
  293.                                         }
  294.                         }
  295.                
  296.                 }
  297.   }
  298. }
復制代碼

所有資料51hei提供下載:
ADC0809.zip (111.51 KB, 下載次數: 77)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲天天干 | 美女黄18岁以下禁止观看 | 女同久久 | 亚洲欧美日韩精品久久亚洲区 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 综合中文字幕 | 欧美日韩亚洲一区 | 日韩在线视频免费观看 | 欧美在线观看网站 | av资源中文在线天堂 | 97人人澡人人爽91综合色 | 日本精品久久 | 欧美精品一区二区三区在线播放 | 国产一级在线视频 | 日韩中文字幕 | 日韩成人性视频 | 成人片免费看 | 国产高清91| 在线观看成人小视频 | 成人精品国产一区二区4080 | 欧美综合国产精品久久丁香 | 日韩国产一区二区 | 秋霞a级毛片在线看 | 亚洲精品一区在线 | 一区二区在线不卡 | 97国产精品| 91久久国产精品 | 精品1区 | 天堂av影院 | 国产精品久久国产愉拍 | 成人av片在线观看 | 午夜久久久 | 国产欧美在线观看 | 欧美视频三区 | 在线一区 | 一区二区精品 | jvid精品资源在线观看 | 欧美三级在线 | 91精品国产综合久久婷婷香蕉 | 国产精品亚洲精品日韩已方 | 欧洲国产精品视频 |