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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2953|回復(fù): 1
收起左側(cè)

單片機(jī)雙積分AD-數(shù)碼管 Proteus仿真程序

[復(fù)制鏈接]
ID:312135 發(fā)表于 2020-1-4 12:14 | 顯示全部樓層 |閱讀模式
使用兩個(gè)運(yùn)放組成積分電路,比較器電路,結(jié)合單片機(jī)定時(shí)器計(jì)數(shù),測量ADC,并使用protues仿真實(shí)現(xiàn)
視頻連接:https://www.bilibili.com/video/av81800813/

51hei.png

單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. //#include<absacc.h>
  3. //#include<intrins.h>
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. #define GPIO_DIG P0      //傳送數(shù)據(jù)的端口設(shè)為P0,以上端口根據(jù)實(shí)際硬件電路圖可做修改

  7. sbit S4=P2^3;
  8. sbit S3=P2^2;         //使能信號
  9. sbit S2=P2^1;         //讀寫控制信號
  10. sbit S1=P2^0;         //數(shù)據(jù)命令選擇端口

  11. sbit P30=P3^0;
  12. sbit P31=P3^1;
  13. sbit P33=P3^3;
  14. uint ss,vin;
  15. uchar lo,kl = 0;

  16. //--定義全局變量--//
  17. unsigned char code DIG_CODE[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  18. //0、1、2、3、4、5、6、7、8、9的顯示碼
  19. unsigned char DisplayData[4];
  20. //用來存放要顯示的4位數(shù)的值

  21. /****************10MS延時(shí)函數(shù)******************************/
  22. void Delay10ms()                //@12.000MHz
  23. {
  24.         unsigned char i, j;

  25.         i = 20;
  26.         j = 113;
  27.         do
  28.         {
  29.                 while (--j);
  30.         } while (--i);
  31. }


  32. /****************1MS延時(shí)函數(shù)******************************/

  33. void delay(unsigned int n)
  34. {
  35.     unsigned int i,j;
  36.     for(j=n;j>0;j--)
  37.     for(i=112;i>0;i--);
  38. }


  39. void led_byte(unsigned int byte_data)                //以十進(jìn)制的方式顯示一個(gè)字符變量
  40. {

  41.           DisplayData[0] = ~DIG_CODE[(byte_data % 10000 /1000)];                            //求千位數(shù)   
  42.           DisplayData[0] |= 0x80;         //小數(shù)點(diǎn)
  43.           DisplayData[1] = ~DIG_CODE[(byte_data%1000/100)];                            //求百位數(shù)   
  44.           DisplayData[2] = ~DIG_CODE[(byte_data%100/10)];                          //求十位數(shù)   
  45.           DisplayData[3] = ~DIG_CODE[(byte_data%10)];                             //求個(gè)位數(shù)
  46. }

  47. /*******************************************************************************
  48. * 函 數(shù) 名         : DigDisplay
  49. * 函數(shù)功能                   : 使用數(shù)碼管顯示
  50. * 輸    入         : 無
  51. * 輸    出         : 無
  52. *******************************************************************************/
  53. void DigDisplay()
  54. {
  55.         unsigned char i;

  56.         led_byte(vin);
  57.         for(i=0;i<4;i++)
  58.         {
  59.                 switch(i)         //位選,選擇點(diǎn)亮的數(shù)碼管,
  60.                 {
  61.                         case(0):
  62.                                 S1=0;S2=1;S3=1;S4=1; break;//顯示第0位
  63.                         case(1):
  64.                                 S1=1;S2=0;S3=1;S4=1; break;//顯示第1位
  65.                         case(2):
  66.                                 S1=1;S2=1;S3=0;S4=1; break;//顯示第2位
  67.                         case(3):
  68.                                 S1=1;S2=1;S3=1;S4=0; break;//顯示第3位
  69.                 }
  70.                 GPIO_DIG=DisplayData[i];//發(fā)送段碼
  71.                 delay(10);                                         //掃描間隔時(shí)間設(shè)定
  72.                 GPIO_DIG=0x00;//消隱
  73.         }
  74. }
  75. /**************數(shù)碼管顯示*************************/


  76. void my_t0(void) interrupt 1  //定時(shí)器0中斷用于固定時(shí)間對輸入待測電壓進(jìn)行積分
  77. {
  78.           TR0 = 0;    //T0中斷關(guān)                                               ///
  79.           TH0 = 0;
  80.           TL0 = 0;
  81.           lo++;                                                                                ///
  82.           TF0 = 0;   //清除T0中斷標(biāo)志                                          ///
  83.           TR0 = 1;    //T0中斷開
  84. }

  85. void my_int0(void) interrupt 0          //外部中斷 用于反積分過程結(jié)束檢測
  86. {
  87.           EX0 = 0;    //INT0中斷關(guān)
  88.           TR0 = 0;    //T0中斷關(guān)
  89.           TF0 = 0;   //清除T0中斷標(biāo)志
  90.           ss = TH0 * 256 + TL0;
  91.                   if(ss == 5) ss = vin;  //解決數(shù)據(jù)緩存溢出BUG
  92.           else  {
  93. //                ss = ss/10 + lo*6553 ;  //計(jì)算電壓
  94. //          ss = ss/10 + lo*6553 + 37;  //補(bǔ)償系統(tǒng)誤差
  95.                        
  96.                         if((ss % 10000 /1000) < 4)
  97.           vin = ss/10 + lo*6553 + ss/1000;  //補(bǔ)償系統(tǒng)誤差
  98.                         else
  99.                                    vin = ss/10 + lo*6553 + ss/2000;
  100.                 }
  101.           TH0 = 0;
  102.           TL0 = 0;
  103.           kl = 1;                                        
  104.                 lo = 0;               
  105.                 ss = 0;
  106.           EA = 0;
  107. }

  108. void main()
  109. {
  110.   char i = 0;
  111.         P33 = 0;
  112.         P31 = 0;                            ///
  113.         P30 = 1;
  114.         kl = 0;
  115.         EA =  1;   //中斷開
  116.         ET0 = 1;   //定時(shí)計(jì)數(shù)0中斷開       
  117.         //IP  = 1;    //定時(shí)0中斷最高優(yōu)先級 =2
  118.         TMOD = 0x01;        //定時(shí)0,1模式1 2個(gè)16位定時(shí)/計(jì)數(shù)器
  119.         EX0 = 1;    //INT0中斷開

  120.         TCON=0x01;  //INT0負(fù)邊緣觸發(fā)或低電平觸發(fā)在此好象作用相同
  121.         IT0 = 1;

  122.         while(1)
  123.         {

  124.                 if(kl == 1 && i == 20)
  125.                 {
  126.                         ss = 0;
  127.                         lo = 0;
  128.         //                vin = 0;
  129.                           TR0 = 0;
  130.                                 P31 = 0;
  131.                                 P33 = 0;
  132.                                 P30 = 1;   //選擇放電                                                ///
  133.                                 delay(100);               
  134.                        
  135.                            kl = 0;
  136.                                 P30 = 0;
  137.                                 P33 = 0;
  138.                                 P31 = 1;    //選擇輸入電壓
  139.                                 Delay10ms();
  140.                        
  141.                                 TH0 = 0;
  142.                                 TL0 = 0;       
  143.                                 P31 = 0;
  144.                                 P33 = 1;     //選擇比較電壓
  145.                                 TF0 = 0;   //清除T0中斷標(biāo)志
  146.                                 TR0 = 1;   //定時(shí)計(jì)數(shù)0起動
  147.                           EX0 = 1;
  148.                                 EA =  1;
  149.                 }
  150.             i++;
  151.                 if(i==21) i=0;  //徹底完成第一次轉(zhuǎn)換后進(jìn)行下一次轉(zhuǎn)換,防止互相干擾
  152.                  // delay(1);
  153.                
  154.                
  155.                 delay(1);
  156.     DigDisplay();
  157.                        
  158.         }
  159. }
復(fù)制代碼
51hei.png
所有資料51hei提供下載:
單片機(jī)雙積分AD-數(shù)碼管.rar (89.47 KB, 下載次數(shù): 49)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:658684 發(fā)表于 2021-3-22 15:48 | 顯示全部樓層
你好,可以問問你這個(gè)雙積分程序的思路么?
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产一区亚洲 | 中文字幕在线观看一区二区 | 亚洲精品视频在线播放 | 国产美女特级嫩嫩嫩bbb片 | 久久精品免费观看 | 黄色大片观看 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 国产精品久久久久久238 | 美女一区二区在线观看 | 毛片毛片毛片毛片毛片 | 婷婷久久网 | 亚洲欧洲一区 | 亚洲国产成人精品久久久国产成人一区 | 亚洲精品一区二区三区在线观看 | 色网站在线免费观看 | 欧美黄色一区 | 欧美视频区| 免费看a| 免费观看黄a一级视频 | 亚洲视频二区 | 日韩欧美在线观看视频 | 亚洲欧美日韩精品久久亚洲区 | 欧美精品一区二区三区蜜臀 | 国产丝袜人妖cd露出 | 久久精品成人热国产成 | 97超碰人人草 | 日韩免费三级 | 日韩午夜一区二区三区 | 精品亚洲一区二区 | 色精品视频 | 超碰高清 | 成人妇女免费播放久久久 | 日韩和的一区二区 | 日韩三级在线观看 | 高清免费av | 国产精品久久久久久久久久久免费看 | 日中文字幕在线 | 欧美亚洲国产一区二区三区 | 国产亚洲精品区 | 国产精品美女一区二区三区 | 国产精品一区二区三 |