温度报警器制作Word格式文档下载.docx

上传人:b****5 文档编号:19491450 上传时间:2023-01-06 格式:DOCX 页数:10 大小:516.59KB
下载 相关 举报
温度报警器制作Word格式文档下载.docx_第1页
第1页 / 共10页
温度报警器制作Word格式文档下载.docx_第2页
第2页 / 共10页
温度报警器制作Word格式文档下载.docx_第3页
第3页 / 共10页
温度报警器制作Word格式文档下载.docx_第4页
第4页 / 共10页
温度报警器制作Word格式文档下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

温度报警器制作Word格式文档下载.docx

《温度报警器制作Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《温度报警器制作Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。

温度报警器制作Word格式文档下载.docx

编写:

JiangX.net

最后更新:

09/04/16晚于寝室

******************************************************************/

#include<

AT89X52.h>

#include"

DS18B20.h"

#defineuintunsignedint

#defineucharunsignedchar//宏定义

#defineSETP3_1//定义调整键

#defineDECP3_2//定义减少键

#defineADDP3_3//定义增加键

#defineBEEPP3_7//定义蜂鸣器

bitshanshuo_st;

//闪烁间隔标志

bitbeep_st;

//蜂鸣器间隔标志

sbitDIAN=P2^7;

//小数点

ucharx=0;

//计数器

signedcharm;

//温度值全局变量

ucharn;

ucharset_st=0;

//状态标志

signedcharshangxian=38;

//上限报警温度,默认值为38

signedcharxiaxian=5;

//下限报警温度,默认值为5

ucharcodeLEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};

/*****延时子程序*****/

voidDelay(uintnum)

{

while(--num);

}

/*****初始化定时器0*****/

voidInitTimer(void)

TMOD=0x1;

TH0=0x3c;

TL0=0xb0;

//50ms(晶振12M)

/*****定时器0中断服务程序*****/

voidtimer0(void)interrupt1

x++;

/*****外部中断0服务程序*****/

voidint0(void)interrupt0

EX0=0;

//关外部中断0

if(DEC==0&

&

set_st==1)

{

shangxian--;

if(shangxian<

xiaxian)shangxian=xiaxian;

}

elseif(DEC==0&

set_st==2)

xiaxian--;

if(xiaxian<

0)xiaxian=0;

/*****外部中断1服务程序*****/

voidint1(void)interrupt2

EX1=0;

//关外部中断1

if(ADD==0&

shangxian++;

if(shangxian>

99)shangxian=99;

elseif(ADD==0&

xiaxian++;

if(xiaxian>

shangxian)xiaxian=shangxian;

}

/*****读取温度*****/

voidcheck_wendu(void)

uinta,b,c;

c=ReadTemperature()-5;

//获取温度值并减去DS18B20的温漂误差

a=c/100;

//计算得到十位数字

b=c/10-a*10;

//计算得到个位数字

m=c/10;

//计算得到整数位

n=c-a*100-b*10;

//计算得到小数位

if(m<

0){m=0;

n=0;

}//设置温度显示上限

if(m>

99){m=99;

n=9;

}//设置温度显示上限

/*****显示开机初始化等待画面*****/

Disp_init()

P2=0xbf;

//显示-

P1=0xf7;

Delay(200);

P1=0xfb;

P1=0xfd;

P1=0xfe;

P1=0xff;

//关闭显示

/*****显示温度子程序*****/

Disp_Temperature()//显示温度

P2=0xc6;

//显示C

Delay(300);

P2=LEDData[n];

//显示个位

P2=LEDData[m%10];

//显示十位

DIAN=0;

//显示小数点

P2=LEDData[m/10];

//显示百位

/*****显示报警温度子程序*****/

Disp_alarm(ucharbaojing)

P2=LEDData[baojing%10];

P2=LEDData[baojing/10];

if(set_st==1)P2=0x89;

elseif(set_st==2)P2=0xc7;

//上限H、下限L标示

/*****报警子程序*****/

voidAlarm()

if(x>

=10){beep_st=~beep_st;

x=0;

if((m>

=shangxian&

beep_st==1)||(m<

xiaxian&

beep_st==1))BEEP=0;

elseBEEP=1;

/*****主函数*****/

voidmain(void)

uintz;

InitTimer();

//初始化定时器

EA=1;

//全局中断开关

TR0=1;

ET0=1;

//开启定时器0

IT0=1;

IT1=1;

check_wendu();

for(z=0;

z<

300;

z++)

Disp_init();

while

(1)

if(SET==0)

Delay(2000);

do{}while(SET==0);

set_st++;

shanshuo_st=1;

if(set_st>

2)set_st=0;

if(set_st==0)

//关闭外部中断0

//关闭外部中断1

Disp_Temperature();

Alarm();

//报警检测

elseif(set_st==1)

BEEP=1;

//关闭蜂鸣器

EX0=1;

//开启外部中断0

EX1=1;

//开启外部中断1

=10){shanshuo_st=~shanshuo_st;

if(shanshuo_st){Disp_alarm(shangxian);

elseif(set_st==2)

if(shanshuo_st){Disp_alarm(xiaxian);

/*****END*****/

DS18B20.h:

#defineDQP3_6//定义DS18B20总线I/O

voidDelay_DS18B20(intnum)

while(num--);

/*****初始化DS18B20*****/

voidInit_DS18B20(void)

unsignedcharx=0;

DQ=1;

//DQ复位

Delay_DS18B20(8);

//稍做延时

DQ=0;

//单片机将DQ拉低

Delay_DS18B20(80);

//精确延时,大于480us

//拉高总线

Delay_DS18B20(14);

x=DQ;

//稍做延时后,如果x=0则初始化成功,x=1则初始化失败

Delay_DS18B20(20);

/*****读一个字节*****/

unsignedcharReadOneChar(void)

unsignedchari=0;

unsignedchardat=0;

for(i=8;

i>

0;

i--)

//给脉冲信号

dat>

>

=1;

if(DQ)

dat|=0x80;

Delay_DS18B20(4);

return(dat);

/*****写一个字节*****/

voidWriteOneChar(unsignedchardat)

i>

i--)

DQ=dat&

0x01;

Delay_DS18B20(5);

unsignedintReadTemperature(void)

unsignedchara=0;

unsignedcharb=0;

unsignedintt=0;

floattt=0;

Init_DS18B20();

WriteOneChar(0xCC);

//跳过读序号列号的操作

WriteOneChar(0x44);

//启动温度转换

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1