欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機MQ-2煙霧檢測+ADC0809 AD轉換+lcd1602顯示程序

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

單片機源程序如下:
  1. /*============================================================
  2. //
  3. //程序編寫:劉先生

  4. 接線:D0--D7接P0.0-P0.7
  5.       ST---P2.3
  6.           EOC--P2.2
  7.           OE---P2.1
  8.           CLK--P2.0

  9. 本程序源碼只供學習參考,不得應用于商業用途,如有需要請聯系作者。

  10. [注:使用12M或11.0592M晶振,實測使用11.0592M]
  11. =============================================================*/
  12. #include <reg52.H>                //器件配置文件
  13. #include <intrins.h>
  14. #include "lcd.h"

  15. #define adc0809_data  P0  //單片機P0接模塊D0~D7引腳

  16. sbit STR = P2^3; //單片機P2.3接模塊STR引腳, 啟動轉換信號
  17. sbit EOC = P2^2; //單片機P2.2接模塊EOC, 轉換結束信號,高電平有效
  18. sbit OE  = P2^1; //單片機P2.1接模塊OE,輸出允許信號,高電平有效
  19. sbit CLK = P2^0; //單片機P2.0接CLK ,ADC0809時鐘,輸入50-800KHZ的頻率
  20.                  //一般選用500K

  21.                                  //將短接片去掉開啟位選功能,否則默認IN0為輸入引腳
  22. sbit AA = P2^6;         //單片機P2.6接模塊A引腳
  23. sbit BB = P2^5;         //單片機P2.6接模塊B引腳
  24. sbit CC = P2^4;         //單片機P2.6接模塊C引腳

  25. unsigned char AD_DATA[1]; //保存IN0通道轉換后的數據
  26. unsigned char disbuff[4] = { 0,0,0,0,};
  27. unsigned char Disp[]="0123456789";         //使用字符串保存數字0~9所對應的ASCLL碼
  28. unsigned char I_Disp[]="Smoke_C : ";           //初始顯示值
  29. unsigned char i;



  30. /***********************************
  31. 函數名:  AD()
  32. 功能:    啟動AD轉換將值儲存于 AD_DATA[0]

  33. ***********************************/
  34. void AD(void )
  35. {
  36.    STR=0;

  37.    STR=1; //啟動AD轉換

  38.    STR=0;  
  39.    while(0==EOC);//等待轉換結束
  40.    OE=1;  
  41.    AD_DATA[0]=adc0809_data; //讀取AD數據,數據范圍為0-255
  42.    OE=0;  
  43. }
  44. /***********************************
  45. 函數名:  t0()
  46. 功能:    產生ADC0809CLK所需要的時鐘

  47. ***********************************/
  48. void t0(void) interrupt 1 using 0
  49. {  
  50.    CLK=~CLK;
  51. }
  52. /***********************************
  53. 函數名:  Conut()
  54. 功能:    將AD_DATA[0]的各位拆分以方便lcd顯示

  55. ***********************************/
  56. void Conut(void)
  57. {
  58.          disbuff[0]=AD_DATA[0]/100;
  59.          disbuff[1]=AD_DATA[0]/10%10;
  60.          disbuff[2]=AD_DATA[0]%10;
  61. }
  62. /***********************************
  63. 函數名:  delayms()
  64. 功能:    延時 ms 毫秒

  65. ***********************************/
  66. void delayms(unsigned int ms)
  67. {
  68.         unsigned char j;
  69.         i=100;
  70.         for(;ms;ms--)
  71.         {
  72.                 while(--i)
  73.                 {
  74.                         j=10;
  75.                         while(--j);
  76.                 }
  77.         }
  78. }
  79. /***********************************
  80. 函數名:  LcdDisplay()
  81. 功能:    用lcd顯示數組disbuff[]中的值

  82. ***********************************/

  83. void LcdDisplay(void)
  84. {
  85.         LcdWriteCom(0x0b+0x80);
  86.         for(i=0;i<3;i++)
  87.         {
  88.                 LcdWriteData(Disp[disbuff[i]]);        
  89.         }                                
  90. }
  91. /***********************************
  92. 函數名:  Analog_IO_Sel()
  93. 參數說明: m 的值對應ADC0809芯片上模擬輸入的IO
  94. 功能:    確定模擬輸入位選

  95. ***********************************/

  96. void Analog_IO_Sel(unsigned char m)
  97. {
  98.         switch(m)
  99.         {
  100.                 case 0 : CC = 0; BB = 0; AA = 0; break;
  101.                 case 1 : CC = 0; BB = 0; AA = 1; break;
  102.                 case 2 : CC = 0; BB = 1; AA = 0; break;
  103.                 case 3 : CC = 0; BB = 1; AA = 1; break;
  104.                 case 4 : CC = 1; BB = 0; AA = 0; break;
  105.                 case 5 : CC = 1; BB = 0; AA = 1; break;
  106.                 case 6 : CC = 1; BB = 1; AA = 0; break;
  107.                 case 7 : CC = 1; BB = 1; AA = 1; break;
  108.         }
  109. }

  110. void main()
  111. {
  112.         EA=1; //開總中斷
  113.     TMOD=0x02; //設定定時器 T0工作方式
  114.     TH0=216; //利用T0中斷產生CLK信號
  115.     TL0=216;  
  116.     TR0=1; //啟動定時器T0
  117.     ET0=1;
  118.     STR=0;
  119.     OE=0;
  120.         Analog_IO_Sel(0);  //設置為IN0輸入

  121.         LcdInit();
  122.         for(i=0;i<10;i++)                  //顯示初始值
  123.         {
  124.                 LcdWriteData(I_Disp[i]);        
  125.         }

  126.         while(1)
  127.           {
  128.              AD();
  129.          Conut();                        //計算
  130.                  LcdDisplay();                //lcd顯示
  131.                  delayms(10);                //10MS         
  132.           }         
  133. }
復制代碼
全部資料51hei下載地址:
煙霧檢測+ADC0809AD轉換+lcd1602顯示.7z (2.68 MB, 下載次數: 183)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:701939 發表于 2020-3-17 15:41 | 只看該作者
感謝樓主的熱心分享,下來研究
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表