标题:
单片机危险气体检测仪程序
[打印本页]
作者:
12323ff
时间:
2019-5-9 20:17
标题:
单片机危险气体检测仪程序
程序设计
IMG_2305.JPG
(2 MB, 下载次数: 47)
下载附件
2019-5-9 20:14 上传
单片机源程序如下:
//程序头函数
#include <reg52.h>
//显示函数
#include <display.h>
//宏定义
#define uint unsigned int
#define uchar unsigned char
#define Data_ADC0809 P1
//管脚声明
sbit LED_R= P2^2;//红灯
sbit FENG = P2^5;//蜂鸣器
//ADC0809
sbit ST=P3^3;
sbit EOC=P3^6;
sbit OE=P3^2;
//按键
sbit Key1=P2^6; //取消按键
bit bdata flag; //报警标志位
uchar set;
//函数声明
extern uchar ADC0809();
extern void Key();
//酒精含量变量
uchar temp=0;
uchar BJ=30; //报警值
void init() //初始化函数
{
TMOD=0x01; //工作方式
TL0=0xb0;
TH0=0x3c; //赋初值(12MHz晶振的50ms)
EA=1; //打开中断总开关
ET0=1; //打开中断允许开关
TR0=1; //打开定时器开关
}
void main() //主函数
{
Init1602();//初始化显示
init(); //初始化定时器
while(1) //进入循环
{
temp=ADC0809(); //读取酒精浓度值
if(set==0) //只有在非设置状态时,
Display_1602(temp,BJ); //才刷新显示实时浓度值
if(temp<BJ&&set==0) //非设置时当浓度值小于报警值时
{
flag=0; //报警标志位置0,不报警
}
else if(temp>BJ&&set==0) //非设置时当浓度值大于报警值时
{
flag=1; //报警标志位置1
}
Key(); //扫描按键
}
}
//ADC0809读取信息
uchar ADC0809()
{
uchar temp_=0x00;
//初始化高阻太
OE=0;
//转化初始化
ST=0;
//开始转换
ST=1;
ST=0;
//外部中断等待AD转换结束
while(EOC==0)
//读取转换的AD值
OE=1;
temp_=Data_ADC0809;//将0809的数值读入单片机
OE=0;
return temp_; //返回读到的数据
}
void Key() //按键函数
{
if(Key1==0) //设置键按下时
{
while(Key1==0); //检测按键是否释放
FENG=1; //蜂鸣器不响
flag=0; //停止报警
TR0=0; //定时器停止
}
}
void time1_int(void) interrupt 1 //定时器函数
{
uchar count;
TL0=0xb0;
TH0=0x3c; //重新赋初值
count++; //计时变量加
if(count==10)//定时器定时是50ms,此处计数10次,正好是500ms,用于报警时 灯亮和蜂鸣器响
{
if(flag==0) //报警标志为0时
{
LED_R=1; //红灯灭
FENG=1; //蜂鸣器不响
}
if(flag==1) //报警标志位为1时
{
LED_R=0; //红灯亮
FENG=0; //蜂鸣器响
}
}
if(count==20) //计数到20时,正好是1000ms,就是1s,这里就是让灯灭,蜂鸣器不响,从而做出闪烁的效果
{
count=0; //计到1s时,将count清零,准备重新计数
if(flag==0)
{
LED_R=1;
FENG=1;
}
if(flag==1)
{
LED_R=1;
FENG=1;
}
}
}
复制代码
所有资料51hei提供下载:
程序设计.zip
(46.41 KB, 下载次数: 38)
2019-5-9 20:17 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
为了通过
时间:
2019-5-30 10:04
电路图什么样子啊?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1