找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2525|回复: 0
收起左侧

51单片机实时数据采集ADC0809与报警系统源程序

[复制链接]
ID:528775 发表于 2019-11-22 17:06 | 显示全部楼层 |阅读模式
51实时数据采集ADC0809与报警系统

单片机源程序如下:
  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. [注:使用12M或11.0592M晶振,实测使用11.0592M]
  10. =============================================================*/
  11. #include <reg52.H>                //器件配置文件
  12. #include <intrins.h>
  13. #include "lcd.h"

  14. #define adc0809_data  P3 //单片机P0接模块D0~D7引脚

  15. sbit STR = P2^3; //单片机P2.3接模块STR引脚, 启动转换信号
  16. sbit EOC = P2^2; //单片机P2.2接模块EOC, 转换结束信号,高电平有效
  17. sbit OE  = P2^1; //单片机P2.1接模块OE,输出允许信号,高电平有效
  18. sbit CLK = P2^0; //单片机P2.0接CLK ,ADC0809时钟,输入50-800KHZ的频率
  19.                  //一般选用500K

  20.                                  //将短接片去掉开启位选功能,否则默认IN0为输入引脚
  21. sbit AA = P2^6;         //单片机P2.6接模块A引脚
  22. sbit BB = P2^5;         //单片机P2.6接模块B引脚
  23. sbit CC = P2^4;         //单片机P2.6接模块C引脚

  24. unsigned char AD_DATA[1]; //保存IN0通道转换后的数据
  25. unsigned char disbuff[4] = { 0,0,0,0,};
  26. unsigned char Disp[]="0123456789";         //使用字符串保存数字0~9所对应的ASCLL码
  27. unsigned char I_Disp[]="Smoke_C : ";           //初始显示值
  28. unsigned char i;



  29. /***********************************
  30. 函数名:  AD()
  31. 功能:    启动AD转换将值储存于 AD_DATA[0]

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

  36.    STR=1; //启动AD转换

  37.    STR=0;  
  38.    while(0==EOC);//等待转换结束
  39.    OE=1;  
  40.    AD_DATA[0]=adc0809_data; //读取AD数据,数据范围为0-255
  41.    OE=0;  
  42. }
  43. /***********************************
  44. 函数名:  t0()
  45. 功能:    产生ADC0809CLK所需要的时钟

  46. ***********************************/
  47. void t0(void) interrupt 1 using 0
  48. {  
  49.    CLK=~CLK;
  50. }
  51. /***********************************
  52. 函数名:  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. 函数名:  delayms()
  63. 功能:    延时 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. 函数名:  LcdDisplay()
  80. 功能:    用lcd显示数组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. 函数名:  Analog_IO_Sel()
  92. 参数说明: m 的值对应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; //开总中断
  112.     TMOD=0x02; //设定定时器 T0工作方式
  113.     TH0=216; //利用T0中断产生CLK信号
  114.     TL0=216;  
  115.     TR0=1; //启动定时器T0
  116.     ET0=1;
  117.     STR=0;
  118.     OE=0;
  119.         Analog_IO_Sel(0);  //设置为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();                        //计算
  129.                  LcdDisplay();                //lcd显示
  130.                  delayms(10);                //10MS         
  131.           }         
  132. }
复制代码

所有资料51hei提供下载:
单片机控制系统综合实训.7z (181.49 KB, 下载次数: 58)
捕获.PNG

评分

参与人数 1黑币 +5 收起 理由
tanxin19991120 + 5 很给力!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表