温度检测与声光报警

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

#define uint unsigned int

#define uchar unsigned char

sbit rs=P1^0;

sbit rw=P1^1;

sbit en=P1^2;

sbit DQ =P2^2;

sbit beep=P2^1;

sbit LED1=P2^0;

sbit LED2=P2^3;

sbit k1=P3^2;

sbit k2=P1^4;

sbit k3=P1^5;

sbit k4=P1^6;

uchar table[]={"TEMP:"};

uchar table1[]={" Current Temp :"};

uchar table2[]={0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9}; uchar table3[]={"Htemp:Ltemp:"};

uchar table4[]={"Warning:The Low Temp "}; uchar table5[]={"Warning:The High Temp "}; uchar temp[2],current;

uchar Htemp=29,Ltemp=26;

uchar num1=0,num2=0;

uchar flog=0,flog1=0;

void delay(uint x)

{

while(x--);

}

void delay1(uint x)

{

uchar y;

while(x--)

for(y=0;y<120;y++);

}

void BEEP() //模仿报警声{

beep=1;

delay1(500);

beep=0;

delay1(500);

}

void write_com(uchar com)

{

rs=0;

rw=0;

P0=com;

en=1;

delay(500);

en=0;

}

void write_dat(uchar date)

{

rs=1;

rw=0;

P0=date;

en=1;

delay(500);

en=0;

}

void init()

{

write_com(0x38);

write_com(0x06);

write_com(0x0c);

write_com(0x01);

write_com(0x80);

beep=0;

LED1=1;

LED2=1;

}

void init_1820()

{

unsigned char x=0;

DQ = 1; //DQ复位

delay(8); //稍做延时

DQ = 0; //单片机将DQ拉低

delay(80); //精确延时大于480us

DQ = 1; //拉高总线

delay(10);

x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay(5);

}

void write_1820(uchar dat)

{

unsigned char i=0;

for (i=8; i>0; i--)

{

DQ = 0;

DQ = dat&0x01;

delay(5);

DQ = 1;

dat>>=1;

}

delay(5);

}

uchar read_1820()

{

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(5);

}

return(dat);

}

void read_temp() //读出温度

{

init_1820();

write_1820(0xcc);

write_1820(0x44);

init_1820();

write_1820(0xcc);

write_1820(0xbe);

temp[0]=read_1820();

temp[1]=read_1820();

current=(((temp[1]&0x07)<<4)|((temp[0]&0xf0)>>4)); }

void display() //显示当前温度

{

uchar i;

LED1=LED2=1;

if(current>=Ltemp&¤t

{

if(flog==1)

{

write_com(0x01);

flog=0;

}

write_com(0x80);

for(i=0;i<16;i++)

write_dat(table1[i]);

write_com(0x80+0x40);

for(i=0;i<5;i++)

write_dat(table[i]);

write_dat(' ');

write_dat(' ');

write_dat(' ');

write_com(0x80+0x40+8);

write_dat(current%100/10+'0');

write_dat(current%10+'0');

write_dat('.');

write_dat(table2[temp[0]&0x0f]+'0');

相关文档
最新文档