单片机
返回首页

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

2019-11-11 来源:51hei

单片机源程序如下:

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

//

//程序编写:刘先生


接线: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         

          }         

}



进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 用数字电路CD4069制作的万能遥控轻触开关

  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 带有短路保护系统的5V直流稳压电源电路图

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章