登录
|
立即注册
|
使用QQ帐号登录
论坛
>
51单片机
发帖
|
单片机MQ-2烟雾检测+ADC0809 AD转换+lcd1602显示程序
看4448
|
回1
|
收藏
楼主
ID:605277
只看他
2019-11-10 17:43
单片机源程序如下:
代码:
/*============================================================
//
//程序编写:刘先生
接线:D0--D7接P0.0-P0.7
ST---P2.3
EOC--P2.2
OE---P2.1
CLK--P2.0
本程序源码只供学习参考,不得应用于商业用途,如有需要请联系作者。
[注:使用12M或11.0592M晶振,实测使用11.0592M]
=============================================================*/
#include <reg52.H> //器件配置文件
#include <intrins.h>
#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
}
}
全部资料51hei下载地址:
烟雾检测+ADC0809AD转换+lcd1602显示.7z
(2.68 MB)
(下载次数: 183, 2019-11-10 22:21 上传)
下载积分: 黑币 -5
沙发
ID:701939
只看他
2020-3-17 15:41
感谢楼主的热心分享,下来研究
51黑电子论坛
Powered by
Discuz!
X3.1
首页
|
标准版
|
触屏版
|
电脑版