单片机MQ-2烟雾检测+ADC0809 AD转换+lcd1602显示程序

发布者:快乐舞蹈最新更新时间:2019-11-11 来源: 51hei关键字:单片机  MQ-2  烟雾检测  ADC0809  AD转换  lcd1602显示 手机看文章 扫描二维码
随时随地手机看文章

单片机源程序如下:

/*============================================================

//

//程序编写:刘先生


接线:D0--D7接P0.0-P0.7

      ST---P2.3

          EOC--P2.2

          OE---P2.1

          CLK--P2.0


本程序源码只供学习参考,不得应用于商业用途,如有需要请联系作者。


[注:使用12M或11.0592M晶振,实测使用11.0592M]

=============================================================*/

#include                //器件配置文件

#include

#include "lcd.h"


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


sbit STR = P2^3; //单片机P2.3接模块STR引脚, 启动转换信号

sbit EOC = P2^2; //单片机P2.2接模块EOC, 转换结束信号,高电平有效

sbit OE  = P2^1; //单片机P2.1接模块OE,输出允许信号,高电平有效

sbit CLK = P2^0; //单片机P2.0接CLK ,ADC0809时钟,输入50-800KHZ的频率

                 //一般选用500K


                                 //将短接片去掉开启位选功能,否则默认IN0为输入引脚

sbit AA = P2^6;         //单片机P2.6接模块A引脚

sbit BB = P2^5;         //单片机P2.6接模块B引脚

sbit CC = P2^4;         //单片机P2.6接模块C引脚


unsigned char AD_DATA[1]; //保存IN0通道转换后的数据

unsigned char disbuff[4] = { 0,0,0,0,};

unsigned char Disp[]="0123456789";         //使用字符串保存数字0~9所对应的ASCLL码

unsigned char I_Disp[]="Smoke_C : ";           //初始显示值

unsigned char i;




/***********************************

函数名:  AD()

功能:    启动AD转换将值储存于 AD_DATA[0]


***********************************/

void AD(void ) 

   STR=0; 


   STR=1; //启动AD转换


   STR=0;  

   while(0==EOC);//等待转换结束 

   OE=1;  

   AD_DATA[0]=adc0809_data; //读取AD数据,数据范围为0-255

   OE=0;  

}

/***********************************

函数名:  t0()

功能:    产生ADC0809CLK所需要的时钟


***********************************/

void t0(void) interrupt 1 using 0 

{  

   CLK=~CLK; 

}

/***********************************

函数名:  Conut()

功能:    将AD_DATA[0]的各位拆分以方便lcd显示


***********************************/

void Conut(void)

{

         disbuff[0]=AD_DATA[0]/100;

         disbuff[1]=AD_DATA[0]/10%10;

         disbuff[2]=AD_DATA[0]%10;

}

/***********************************

函数名:  delayms()

功能:    延时 ms 毫秒


***********************************/

void delayms(unsigned int ms)

{

        unsigned char j;

        i=100;

        for(;ms;ms--)

        {

                while(--i)

                {

                        j=10;

                        while(--j);

                }

        }

}

/***********************************

函数名:  LcdDisplay()

功能:    用lcd显示数组disbuff[]中的值


***********************************/


void LcdDisplay(void)

{

        LcdWriteCom(0x0b+0x80);

        for(i=0;i<3;i++)

        {

                LcdWriteData(Disp[disbuff[i]]);        

        }                                

}

/***********************************

函数名:  Analog_IO_Sel()

参数说明: m 的值对应ADC0809芯片上模拟输入的IO

功能:    确定模拟输入位选


***********************************/


void Analog_IO_Sel(unsigned char m)

{

        switch(m)

        {

                case 0 : CC = 0; BB = 0; AA = 0; break;

                case 1 : CC = 0; BB = 0; AA = 1; break;

                case 2 : CC = 0; BB = 1; AA = 0; break;

                case 3 : CC = 0; BB = 1; AA = 1; break;

                case 4 : CC = 1; BB = 0; AA = 0; break;

                case 5 : CC = 1; BB = 0; AA = 1; break;

                case 6 : CC = 1; BB = 1; AA = 0; break;

                case 7 : CC = 1; BB = 1; AA = 1; break;

        }

}


void main()

{

        EA=1; //开总中断

    TMOD=0x02; //设定定时器 T0工作方式

    TH0=216; //利用T0中断产生CLK信号

    TL0=216;  

    TR0=1; //启动定时器T0 

    ET0=1; 

    STR=0; 

    OE=0;

        Analog_IO_Sel(0);  //设置为IN0输入


        LcdInit();

        for(i=0;i<10;i++)                  //显示初始值

        {

                LcdWriteData(I_Disp[i]);        

        }


        while(1)

          {

             AD();

         Conut();                        //计算

                 LcdDisplay();                //lcd显示

                 delayms(10);                //10MS         

          }         

}



关键字:单片机  MQ-2  烟雾检测  ADC0809  AD转换  lcd1602显示 引用地址:单片机MQ-2烟雾检测+ADC0809 AD转换+lcd1602显示程序

上一篇:STC15w4k58s4单片机4串口同时收发例程
下一篇:BWT901CL的单片机和Arduino程序(蓝牙9轴)

推荐阅读最新更新时间:2024-11-13 07:26

AVR单片机下载烧录快速入门
存储器 锁定位(2)保护类型LB模式LB2LB1 111没有使能存储器保护特性210在并行和SPI/JTAG串行编程模式中Flash和EEPROM的进 一步编程被禁止,熔丝位被锁定。(1)300在并行和SPI/JTAG串行编程模式中Flash和EEPROM的进 一步编程及验证被禁止,锁定位和熔丝位被锁定(1)BLB0模式BLBO2BLB01 111SPM 和LPM 对应用区的访问没有限制210不允许SPM 对应用区进行写操作300不允许SPM 指令对应用区进行写操作,也不允许运行于 Boot Loader 区的LPM指令从应用区读取数据。若中断向量 位于Boot Loader 区,那么执行应用区代码时中断是禁止 的。401不允许运
[单片机]
AVR<font color='red'>单片机</font>下载烧录快速入门
MSP430初学:MSP430单片机C语言基础(一)
1.1标识符与 关键字 标识符用来标识程序中某个对象的名字,这些对象可以是语句、数据类型、函数、变量、常量、数组等。标识符由字母,数字或下画线构成,其第一个字符必须是字母或下画线。 例如,count_data,text2 是正确形式,而 2count 是错误形式。 哈哈,c语言有关的知识我就不记录那么多了,大家都会 1.2变量 在定义变量时,变量的类型必须与其被储存的数据类型相匹配,以保证程序中变量能够被正确地使用。当指定了变量的数据类型时,系统将为它分配若干相应字节的内存空间。 C430中变量类型以及描述如下: 这篇博客里,说明了一些其它的数据类型,在使用430的时候,会用到: c++ 基础数据类型 与
[单片机]
MSP430初学:MSP430<font color='red'>单片机</font>C语言基础(一)
STM8SF103单片机的ADC采样电压设计
硬件环境: STM8SF103 TSSOP20封装 因为项目需要用到AD采样电池电压,于是便开始了使用STM8S ADC进行采样,也就有了下文。 手册上对STM8S ADC的管脚描述如下: STM8SF103这款芯片是TSSOP 20管脚封装,如下: STM8SF103这款芯片能用的是5个AD采样通道,分别是 AI N2~AIN6。其实是还有一个通道AIN7,但手册并没有对其描述。 这里还有一个很奇怪的地方,从ST资料中找到一个与上面的表数据不同的地方,如: 很明显的说STM8S103是存在这个AIN7通道的,再加上另外5个通道,应该是6个通道才对。 要做AD采样,首先要解决的就是AD的参考电压
[单片机]
STM8SF103<font color='red'>单片机</font>的ADC采样电压设计
51单片机IO口直接驱动LED数码管方法
1.实验任务   如图13所示,利用AT89S51 单片机 的P0端口的P0.0-P0.7连接到一个共阴 数码管 的a-h的笔段上,数码管的公共端接地。在数码管上循环显示0-9数字,时间间隔0.2秒。 2. 电路 原理图             图4.7.1 3.系统板上硬件连线   把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个数码管的a-h端口上;要求:P0.0/AD0与a相连,P0.1/AD1与b相连,P0.2/AD2与c相连,……,P0.7/AD7与h相连。 4. 程序设计内容 (1). LED 数码显示原理   七段LED显示器内部由七个条形 发光
[单片机]
51<font color='red'>单片机</font>IO口直接驱动LED数码管方法
想要低功耗高效能车用MCU,不妨先看看这一款
在车用MCU领域,RENESAS公司无疑是世 界领先的厂商。其推出的RL78/F12系列微控制器(MCU)是一款具备业界领先的低耗电量及 高效能 MCU产品。作为瑞萨RL78新系列中的第1款F系 列产品,RL78/F12专为车载电子而设计,其有助于降低系统耗电量并提供更高效能,适合Keyless感应式遥控门锁、电动窗控制、电动后视镜控制及 其他汽车控制的应用。   图1:RL78/F12微控制器   随着汽车智能化的不断发展,车内使用的微控制器数量持续上升,使用功能也不断丰富和完善。对于可提供更低耗电量、能缩小印刷电路板安装面积,以及提供技术以 降低整体系统元件数量的MCU的市场需求逐渐明显。为了更好的适应市场新变
[嵌入式]
51单片机:LED灯流水灯
知道闪烁原理后,我们就可以将所有引脚依次输出0V、延时、输出5V,就能达到流水灯效果,但这样写太呆板,咱们利用C语言for循环,再进行位运算就可以简单达到效果,程序如下 #include reg52.h //引用头文件 void Delay(int time) { while(time--) //while循环一次需要10us { } } int main() { int i = 0; while(1) { for(i=0;i 8;i++) { P2=~(0x01 i); Delay(50000); } } return 0; } 实验现象如
[单片机]
51<font color='red'>单片机</font>:LED灯流水灯
C51单片机P4口使用
C51单片机(STC11L32/48XE)的P4可以像其他IO可以作为正常的IO来使用。 如图:
[单片机]
AVR单片机IO的使用方法详细资料概述
  主要内容详细介绍的是AVR单片机IO的使用方法详细资料   AVR单片机寄存器 DDRx PORTx PINx 与对应IO端口之间的关系(x代表某个端口,如A端口、B端口等)   下表以端口B的第2位PB2为例子加以说明,并且假设PB2为悬空状态 DDRB.2 PORTB.2 读取PINB.2的结果 引脚PB2的状态 1 1 1 PB2推挽输出 1 1 0 0 PB2推挽输出 0 0 1 1 PB2弱上拉,可作输入 0 0 × PB2高阻抗,可作输入   读取PINB.2时,就是读取PB2引脚的实际电平,   如果PB2直接接VCC,那么任何时候读取PINB.2的结果都是1   如果PB2直接接
[单片机]
AVR<font color='red'>单片机</font>IO的使用方法详细资料概述
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved