久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
關于煤氣報警系統的一些問題請教
[打印本頁]
作者:
489667841
時間:
2017-8-7 10:14
標題:
關于煤氣報警系統的一些問題請教
我還是新手,不會寫程序,只能找網上已有的資料。
最近要做煤氣報警系統,所以找了一份資料。我要用到的是MQ-2氣敏傳感器、stc89c52單片機開發板(包含了蜂鳴器和LED等)、DS18B20溫度傳感器。
下面是程序,我的問題是這個程序好像沒有體現出氣敏傳感器的模數轉換、以及蜂鳴器報警,是這樣嗎?我需要再把這個程序完善一下嗎?特別是最后的主函數部分我看不大懂,有沒有好心人能給我解讀一下
。
程序:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P1^0;//定義18B20數據線引腳
sbit LED=P1^3;
sbit input=P1^1;
unsigned char flag;//負數標志
//行掃描數組
uchar code scan[4]={0xef,0xf7,0xfb,0xfd};
//數碼管顯示的段碼表
uchar code table[13]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x39,0x00};//,-,C,kong
//小數部分顯示查詢表
uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
uchar dispbuf[8];//顯示緩沖區
uchar temper[2];//存放溫度數組
uchar TCNT;
//******************************
//延時函數
//******************************
void delay (unsigned int us)
{
while(us--);
}
//******************************
//DS18B20復位函數
//******************************
void reset(void)
{
uchar x=0;
DQ=1;
delay(80);
DQ=0;
delay(80);
DQ=1;
delay(14);
x=DQ;
delay(20);
}
//******************************
//DS18B20中讀一個字節
//******************************
uchar readbyte(void)
{
uchar i=0;
uchar dat=0;
for(i=8;i>0;i--)
{
DQ=0; //拉低總線,啟動輸入
dat>>=1; //要返回的數據右移一位,先讀出來的是低位
DQ=1;
if(DQ==1) //當數據線為高時,證明該位數據為 1
dat|=0x80; //要傳輸數據的當前值置為 1,若不是,則為 0
delay(4);
}
return (dat);
}
//******************************
//向DS18B20中寫1個字節
//******************************
void writebyte(unsigned char dat)
{
uchar i=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01; //把dat第0位的狀態賦給DQ,其余位清零
delay(5);
DQ=1;
dat>>=1;
}
delay(4);
}
//******************************
//向DS18B20中讀取實時溫度值
//******************************
void readtemp(void)
{
uchar a=0,b=0;
reset();
writebyte(0xCC);//跳過序列號、寫指令:跳過rom檢測
writebyte(0x44);//啟動溫度轉換
reset();
writebyte(0xCC);//跳過序列號
writebyte(0xBE);//讀9個寄存器,前2個為溫度
a=readbyte();//低位
b=readbyte();//高位
if(b>0x0f) //判斷是否為負值 ;15
{
a=~a+1;
if(a==0)
b=~b+1;
else b=~b;
flag=10; //標志某種狀態
}
else flag=12;
temper[0]=a&0x0f;
a=a>>4;
temper[1]=b<<4;
temper[1]=temper[1]|a;
}
//******************************
//動態掃描顯示函數
//******************************
void scandisp()
{
unsigned char i,value; //value指濃度值?
for(i=0;i<4;i++)
{
P3=0xff; // 255
value=table[dispbuf[i]];
if(i==2)
value|=0x80; //-128;10000000b;把變量value的值的最高位寫成“1”,而不改變其它位的值
P2=value;
P3=scan[i];
delay(90);
}
}
//******************************
//定時中斷函數
//******************************
void Timer0(void)interrupt 1 using 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TCNT++;
if(TCNT==6)
{
TCNT =0;
LED=~LED; //若 LED = 0;低電平亮, ~取反 LED = 1;高電平LED滅
}
}
//******************************
//主函數
//******************************
void main()
{
uchar temp,temp1;
TCNT=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
IE=0x82;
while(1)
{
if(input==0)
TR0=1;
else
{
TR0=0;
LED=1;
}
readtemp();
temp1=temper[0];
temp=temper[1];
dispbuf[3]=ditab[temp1];
dispbuf[2]=temp%10;
temp=temp/10;
dispbuf[1]=temp%10;
dispbuf[0]=flag;
scandisp();
}
}
作者:
cjjcjj1
時間:
2017-8-7 17:38
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
tiantianhei
時間:
2017-8-7 20:30
delay 是延時函數
作者:
489667841
時間:
2017-8-8 09:13
cjjcjj1 發表于 2017-8-7 17:38
你好!你要把你的具體要求發出來。
然后根據你的要求去完善程序和原理圖;
還有,你這個是要做出實物的吧
對的,要做實物。
我的要求是要讓MQ-2傳感器檢測到設定的氣體濃度后進行模數轉換,然后通過單片機讓蜂鳴器響和LED燈亮,即報警。但我找的這個程序主要是DS18B20溫度傳感器的程序,因為是新手,所以不清楚要怎么修改。
作者:
cjjcjj1
時間:
2017-8-8 12:17
提示:
作者被禁止或刪除 內容自動屏蔽
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
91精品国产色综合久久不卡98
|
国产极品车模吞精高潮呻吟
|
欧美激情a∨在线视频播放 成人免费共享视频
|
国产精品视频一区二区三区
|
尤物在线精品视频
|
成人三级电影
|
蜜桃视频在线观看免费视频网站www
|
狠狠躁躁夜夜躁波多野结依
|
三级高清
|
男女羞羞视频在线观看
|
天天视频一区二区三区
|
国产精品a久久久久
|
欧美一区二区三区视频在线播放
|
欧美另类视频在线
|
欧美日韩国产一区二区三区
|
精品国产一区二区三区久久
|
天天综合网7799精品
|
国产精品国产
|
国产清纯白嫩初高生视频在线观看
|
国产91精品久久久久久久网曝门
|
久久国产精品无码网站
|
久久久久久网站
|
a级在线免费视频
|
日韩免费在线
|
日韩视频在线播放
|
日韩a
|
av黄色片在线观看
|
成人h片在线观看
|
亚洲视频在线免费
|
69精品久久久久久
|
超碰成人免费
|
中文一区
|
国产日产久久高清欧美一区
|
精品国产一区二区三区久久久四川
|
91pao对白在线播放
|
www.日韩高清
|
全免一级毛片
|
av一区二区三区四区
|
琪琪午夜伦伦电影福利片
|
日韩成年人视频在线
|
亚洲精品九九
|