//烟雾报警+灭火
// 毕设帮 2019.4.20
#include <reg52.h>
//显示函数
#include <display.h>
//宏定义
#define uint unsigned int
#define uchar unsigned char
#define Data_ADC0809 P1
//管脚声明
sbit LED_wendu= P2^2;
sbit LED_yanwu= P2^1;
sbit baojing= P2^5;
sbit DQ = P2^0;
sbit fs=P3^4;
//ADC0809
sbit ST=P3^3;
sbit EOC=P3^6;
sbit OE=P3^2;
//按键
sbit Key1=P2^6;
sbit Key2=P2^7;
sbit Key3=P3^7;
signed char w; //温度值全局变量
uint c; //温度值全局变量
bit bdata flag=0;
//烟雾浓度变量
uchar temp;
uchar yushe_wendu=50;
uchar yushe_yanwu=45;
//按钮模式|
uchar Mode=0;
//函数声明
extern uchar ADC0809();
extern void Key();
void delay(uint z)
{
uint i,j;
for(i=0;i<z;i++)
for(j=0;j<121;j++);
}
/*****延时子程序*****/
void Delay_DS18B20(int num)
{
while(num--) ;
}
/*****初始化DS18B20*****/
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
Delay_DS18B20(8); //稍做延时
DQ = 0; //单片机将DQ拉低
Delay_DS18B20(80); //精确延时,大于480us
DQ = 1; //拉高总线
Delay_DS18B20(14);
x = DQ; //稍做延时后,如果x=0则初始化成功,x=1则初始化失败
Delay_DS18B20(20);
}
/*****读一个字节*****/
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
Delay_DS18B20(4);
}
return(dat);
}
/*****写一个字节*****/
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
Delay_DS18B20(5);
DQ = 1;
dat>>=1;
}
}
/*****读取温度*****/
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0x44); //启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器
a=ReadOneChar(); //读低8位
b=ReadOneChar(); //读高8位
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5; //放大10倍输出并四舍五入
return(t);
}
//=====================================================================================
//=====================================================================================
//=====================================================================================
/*****读取温度*****/
void check_wendu(void)
{
c=ReadTemperature()-5; //获取温度值并减去DS18B20的温漂误差
if(c<0) c=0;
if(c>=999) c=999;
}
//ADC0809读取信息
uchar ADC0809()
{
uchar temp_=0x00;
//初始化高阻太
OE=0;
//转化初始化
ST=0;
//开始转换
ST=1;
ST=0;
//外部中断等待AD转换结束
while(EOC==0)
//读取转换的AD值
OE=1;
temp_=Data_ADC0809;
OE=0;
return temp_;
}
void Key()
{
//模式选择
if(Key1==0)
{
while(Key1==0);
if(Mode>=3) Mode=0;
else
{
write_com(0x38);//屏幕初始化
write_com(0x0d);//打开显示 无光标 光标闪烁
write_com(0x06);//当读或写一个字符是指针后一一位
Mode++;
switch(Mode)
{
case 1:
{
write_com(0x80+7);//位置
break;
}
case 2:
{
write_com(0x80+15);//位置
break;
}
case 3:
{
write_com(0x38);//屏幕初始化
write_com(0x0c);//打开显示 无光标 无光标闪烁
Mode=0;
break;
}
}
}
}
if(Key2==0&&Mode!=0)
{
while(Key2==0);
switch(Mode)
{
case 1:
{
yushe_wendu++;
if(yushe_wendu>=99)
yushe_wendu=99;
write_com(0x80+6);
write_data(0x30+yushe_wendu/10);
write_data(0x30+yushe_wendu%10);
break;
}
case 2:
{
yushe_yanwu++;
if(yushe_yanwu>=255)
yushe_yanwu=255;
write_com(0x80+13);
write_data(0x30+yushe_yanwu/100);
write_data(0x30+yushe_yanwu%100/10);
write_data(0x30+yushe_yanwu%10);
break;
}
}
}
if(Key3==0&&Mode!=0)
{
while(Key3==0);
switch(Mode)
{
case 1:
{
yushe_wendu--;
if(yushe_wendu<=0)
yushe_wendu=0;
write_com(0x80+6);
write_data(0x30+yushe_wendu/10);
write_data(0x30+yushe_wendu%10);
break;
}
case 2:
{
yushe_yanwu--;
if(yushe_yanwu<=0)
yushe_yanwu=0;
write_com(0x80+13);
write_data(0x30+yushe_yanwu/100);
write_data(0x30+yushe_yanwu%100/10);
write_data(0x30+yushe_yanwu%10);
break;
}
}
}
delay(200);
write_com(0x38);//屏幕初始化
write_com(0x0c);//打开显示 无光标 无光标闪烁
}
void main()
{
check_wendu();
check_wendu();
Init1602();
while(1)
{
temp=ADC0809();
check_wendu();
Key();
if(Mode==0)
{
Display_1602(yushe_wendu,yushe_yanwu,c,temp);
if(temp>=yushe_yanwu)
{
LED_yanwu=0;
baojing=0;
fs=0;
}
else
{
LED_yanwu=1;
}
if(c>=(yushe_wendu*10))
{
baojing=0;
LED_wendu=0;
}
else
{
LED_wendu=1;
}
if((temp<yushe_yanwu)&&(c<(yushe_wendu*10)))
{
baojing=1;
fs=1;
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于51/52单片机温度烟雾报警c语言代码+protus仿真
共23个文件
bak:7个
hex:2个
dsn:1个
需积分: 23 57 下载量 126 浏览量
2020-02-26
11:17:19
上传
评论 30
收藏 95KB RAR 举报
温馨提示
本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机 • 2.LCD1602液晶显示、DS18B20温度传感器、MQ-2烟雾传感器或MQ-5可燃气体传感器及ADC0809模数转换芯片 • 3.实时显示当前的烟雾值和温度值 • 4.温度和烟雾的报警值可以通过按键设定 • 5.当前温度值超过上限时,红灯亮,蜂鸣器响。 • 6.当前烟雾值超过上线时,黄灯亮,蜂鸣器响。
资源推荐
资源详情
资源评论
收起资源包目录
资料.rar (23个子文件)
1-c程序
yanwu.plg 565B
yanwu.OBJ 8KB
yanwu 6KB
yanwu_uvopt.bak 56KB
yanwu.M51 22KB
yanwu_Uv2.Bak 2KB
yanwu.hex 6KB
yanwu.c 5KB
display.h 2KB
yanwu.opt.bak 1KB
yanwu.Uv2.bak 2KB
yanwu_Opt.Bak 1KB
yanwu.lnp 27B
yanwu.uvopt 56KB
yanwu.LST 13KB
yanwu.uvproj 13KB
yanwu.bak 5KB
display.bak 2KB
5-温度烟雾报警protus仿真
yanwu.hex 6KB
Backup Of LCDShow.DBK 147KB
ISIS.dmp 42KB
LCDShow.PWI 1KB
LCDShow.DSN 150KB
共 23 条
- 1
资源评论
努力改掉拖延症的小白
- 粉丝: 3521
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功