历史上的今天
返回首页

历史上的今天

今天是:2024年11月11日(星期一)

正在发生

2019年11月11日 | 单片机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         

          }         

}



推荐阅读

史海拾趣

德立电子(DDY)公司的发展小趣事

作为一家有远见的企业,德立电子深知绿色发展的重要性。公司积极响应国家环保政策,推行绿色生产和绿色供应链管理。同时,德立电子还积极参与社会公益事业,回馈社会,履行企业社会责任。

请注意,以上故事框架仅供参考,具体内容和细节需根据实际情况进行填充和完善。

Advanced Linear Devices公司的发展小趣事

在1991年,德立电子(DDY)在惠州市创立,以生产电感为核心产品,开启了其在电子行业的征程。当时,公司规模虽小,但凭借对技术的执着追求和对市场敏锐的洞察力,德立电子迅速在汽车电子、色环电感等领域取得突破。公司引进美国、日本、台湾等地的先进机械设备及检测仪器,确保产品质量,赢得了客户的信赖。

Gilway Technical Lamp公司的发展小趣事
根据实际需要合理调节冰箱温度,避免温度设置过低或过高。
ALPS公司的发展小趣事
定期清洁冰箱内外表面和门封条,保持清洁卫生。
Digitron公司的发展小趣事

Digitron公司始终将创新作为企业发展的核心驱动力。公司投入大量资金用于研发新技术和新产品,不断提升产品的性能和功能。XXXX年,Digitron公司成功研发出一款具有无线传输功能的数据记录器,用户可以通过手机或电脑实时查看和监控数据。这一创新产品受到了市场的热烈欢迎,为Digitron公司带来了显著的增长。

Ericsson公司的发展小趣事

在19世纪70年代,Ericsson公司主要以修理电报机和其他电器仪表为主要业务。然而,随着电话技术的引入和普及,Ericsson敏锐地捕捉到了这一新技术带来的商机。公司创始人Lars Magnus Ericsson通过购买、拆解和维修电话机,迅速掌握了电话机制造技术。1878年,Ericsson公司成功推出了自己的电话机,并凭借其经济耐用的特点迅速赢得了市场认可,为公司的发展奠定了坚实的基础。

问答坊 | AI 解惑

FIFO Design for High-speed network interface

FIFO Design for High-speed network interface…

查看全部问答>

TCPMP是按什么规则调解码Dll的(解码插件)?

一个地方下了一个WMV 解码的Dll. 另外一个地方下了一个TCPMP0.72, 它直接能用这个解码Dll播放WMV文件。(没有这个解码Dll,就不能播放WMV文件) TCPMP是按什么规则调解码Dll的(或解码插件)?    …

查看全部问答>

vxworks初学者求助

我把vxworks移植到了VMWARE的虚拟机上,编程时有两个问题想了解一下 1.我编译的VXWORKS内核是包含了target shell组件和一个host与target符号表同步的组件的,在TORNADO编好程序后download到虚拟机中,为什么在tornado的命令行下能运行程序中的函数 ...…

查看全部问答>

单片机晶振与电压

大家好:          请问加在单片机引脚上的晶振与电压存在关系吗?单位同事讲过,一般情况下,3.3V电压下晶振最高频率10 MHz为好.          还有,单片机上电后,为了验证晶振是否工作,用 ...…

查看全部问答>

玩转LaunchPad第一季_自编改进上下位机软件

 帖子更新历史:11.2 7:05暂停更新,附件删除。最近感到精力不济,再说还有一些个别有待进一步提高的地方。还是等全部完成以后源码和一些文档一并公布。10.28 11:25 附件中添加新下载的官方demo压缩包和一个烧写HEX的软件(我还没有试验可不 ...…

查看全部问答>

如何用手机蓝牙控制外部设备

  我想用手机蓝牙来控制灯牌的亮度,需要掌握什么知识?1,如何编写一个手机软件,来实现控制?2,在灯的硬件方面,用什么元件来接受蓝牙信号,蓝牙适配器? 求指教!!! …

查看全部问答>

F2802X怎么在CCS看到的FLASH数据和HEX文件看到的数据不一样啊。

我用CODESKIN下载了hex文件,但是通过CCS看FLASH数据,却发现它们并不一致。确实有相同的数据,但是他们的地址不一样。这是怎么回事啊?…

查看全部问答>

来迟了,求BBB板一块。

来迟了,求BBB板一块。…

查看全部问答>

关于DMX512控制RGB的控制器解码讨论

关于DMX512控制RGB的控制器解码网上似不多,灌灌水也无妨,谈谈各自的见解………

查看全部问答>

看到书店里的新书都突出了画PCB板的部分,那么学习C2000是否也要从学习画板子开始?

前些日子到书店看到,最近出版的有关卓越工程师的书籍,都突出了altium designer部分, 那么学习c2000 dsp是否也应该从学习PCB板的软件开始,那么现在是用altium的人多,还是 pads9.x的人多呢?…

查看全部问答>