单片机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显示 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479579.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

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

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

avr单片机汇编参考程序
该AVR的汇编程序选自《M128》,程序中体现了AVR汇编的基本特点,仅供大家参考。该应用系统为一个带1/100秒的简易24小时制时钟,它在上电后能够自动从11时59分55秒00开始计时和显示时间。下图为简易时钟系统硬件电路图。                           图  简易24小时时钟硬件原理图系统使用8个LED数码管显示时、分、秒、1/100秒4个时段的数字,每个时段占用2个LED。显示方式采用动态扫描方式,ATme
发表于 2019-11-14
avr单片机汇编参考程序
AVR单片机一些学习笔记
下面是自己在学习AVR单片机时的学习经验,分享出来给大家,一起学习。1、AVR单片机采用RISC架构,8051单片机采用CISC架构。 前者速度为后者的2~4倍,为流水线操作指令。2、 AVR单片机有32个通用寄存器(地址在RAM区从$0000开始到$001F),其中有6个(最后6个)合并为3个16位的X,Y,Z寄存器,用来存放地址指针,Z寄存器还可以寻址程序存储器。3、 哈佛结构,131条机器指令。4、 延迟开机功能。5、 内部自带RC振荡器,可提供1/2/4/8MHZ的工作时钟。6、 FLASH+EEPROM+SRAM+SPI+USART+TWI+PWM+RTC+10位ADC+模拟比较器+JTAG。7、 堆栈指针向下增长,51
发表于 2019-11-14
avr单片机mega32之ADC程序
查手册,写程序,有问题再讨论*****************************************************************//CPU:mega32//编译器:iar#include <ioavr.h>#include "adc.h"int main(void){        int m;adc_init();             m = adc_get(0);     &n
发表于 2019-11-14
mega32单片机最简单的中断程序——外部中断
学单片机的第二条槛:中断,每次我都选最简单的中断——外部中断。*****************************************************************//CPU:mega32//编译器:iar#include <ioavr.h>void eint0_init(void);int main(void){    DDRD |= (1 << 7);     //PD7置为输出    eint0_init();    
发表于 2019-11-14
mega32单片机最简单的中断程序——外部中断
PIC单片机入门指南
;    把最下面的框钩上后点保存这时看到文本框内的字变成了蓝色了。开始编写程序最后点上面中间的那个红色的图标编译,在项目目录里面就会有个hex的文件,最后下载到单片机PIC10F200里面就可以用了!
发表于 2019-11-14
PIC单片机入门指南
单片机之间通信(类红外发送与接收)
void call_user_sent()   {       static bit data_flag=0;      static unsigned char a=0,b=0,c=0;      TRISB5=1;      TRISB2=0;      if(!data_flag)        //起始头    
发表于 2019-11-14
小广播
何立民专栏 单片机及嵌入式宝典

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

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