找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3147|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)實(shí)時(shí)數(shù)據(jù)采集ADC0809與報(bào)警系統(tǒng)源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:528775 發(fā)表于 2019-11-22 17:06 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
51實(shí)時(shí)數(shù)據(jù)采集ADC0809與報(bào)警系統(tǒng)

單片機(jī)源程序如下:
  1. /*============================================================
  2. //
  3. //程序編寫(xiě):劉先生

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

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

  14. #define adc0809_data  P3 //單片機(jī)P0接模塊D0~D7引腳

  15. sbit STR = P2^3; //單片機(jī)P2.3接模塊STR引腳, 啟動(dòng)轉(zhuǎn)換信號(hào)
  16. sbit EOC = P2^2; //單片機(jī)P2.2接模塊EOC, 轉(zhuǎn)換結(jié)束信號(hào),高電平有效
  17. sbit OE  = P2^1; //單片機(jī)P2.1接模塊OE,輸出允許信號(hào),高電平有效
  18. sbit CLK = P2^0; //單片機(jī)P2.0接CLK ,ADC0809時(shí)鐘,輸入50-800KHZ的頻率
  19.                  //一般選用500K

  20.                                  //將短接片去掉開(kāi)啟位選功能,否則默認(rèn)IN0為輸入引腳
  21. sbit AA = P2^6;         //單片機(jī)P2.6接模塊A引腳
  22. sbit BB = P2^5;         //單片機(jī)P2.6接模塊B引腳
  23. sbit CC = P2^4;         //單片機(jī)P2.6接模塊C引腳

  24. unsigned char AD_DATA[1]; //保存IN0通道轉(zhuǎn)換后的數(shù)據(jù)
  25. unsigned char disbuff[4] = { 0,0,0,0,};
  26. unsigned char Disp[]="0123456789";         //使用字符串保存數(shù)字0~9所對(duì)應(yīng)的ASCLL碼
  27. unsigned char I_Disp[]="Smoke_C : ";           //初始顯示值
  28. unsigned char i;



  29. /***********************************
  30. 函數(shù)名:  AD()
  31. 功能:    啟動(dòng)AD轉(zhuǎn)換將值儲(chǔ)存于 AD_DATA[0]

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

  36.    STR=1; //啟動(dòng)AD轉(zhuǎn)換

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

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

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

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

  81. ***********************************/

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

  94. ***********************************/

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

  109. void main()
  110. {
  111.         EA=1; //開(kāi)總中斷
  112.     TMOD=0x02; //設(shè)定定時(shí)器 T0工作方式
  113.     TH0=216; //利用T0中斷產(chǎn)生CLK信號(hào)
  114.     TL0=216;  
  115.     TR0=1; //啟動(dòng)定時(shí)器T0
  116.     ET0=1;
  117.     STR=0;
  118.     OE=0;
  119.         Analog_IO_Sel(0);  //設(shè)置為IN0輸入

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

  125.         while(1)
  126.           {
  127.              AD();
  128.          Conut();                        //計(jì)算
  129.                  LcdDisplay();                //lcd顯示
  130.                  delayms(10);                //10MS         
  131.           }         
  132. }
復(fù)制代碼

所有資料51hei提供下載:
單片機(jī)控制系統(tǒng)綜合實(shí)訓(xùn).7z (181.49 KB, 下載次數(shù): 58)


捕獲.PNG (71.41 KB, 下載次數(shù): 114)

捕獲.PNG

評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
tanxin19991120 + 5 很給力!

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表