教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 建筑文档 >

基于单片机设计的智能温度报警器(4)

来源:网络收集 时间:2026-04-07
导读: /***********************18b20初始化函数*****************************/ void init_18b20() { } /*************写18b20内的数据***************/ void write_18b20(uchar dat) { } /*************读取18b20内的数

/***********************18b20初始化函数*****************************/ void init_18b20() { }

/*************写18b20内的数据***************/ void write_18b20(uchar dat) { }

/*************读取18b20内的数据***************/ uchar read_18b20() {

uchar i,value; for(i=0;i<8;i++) {

dq = 0;

//把总线拿低读时间隙开始

value >>= 1; //读数据是低位开始 uchar i; for(i=0;i<8;i++) { }

//写数据是低位开始 //把总线拿低写时间隙开始

dq = 0; bit q; dq = 1; dq = 0; dq = 1; q = dq; dq = 1;

//把总线拿高 //给复位脉冲 //750us

//把总线拿高 等待 //110us

//读取18b20初始化信号 //200us

//把总线拿高 释放总线

delay_uint(1); //15us delay_uint(80); delay_uint(10); delay_uint(20);

dq = dat & 0x01; //向18b20总线写数据了 delay_uint(5); // 60us dq = 1; dat >>= 1;

//释放总线

}

}

dq = 1; if(dq == 1)

//释放总线 //开始读写数据

value |= 0x80;

delay_uint(5); //60us 读一个时间隙最少要保持60us的时间

//返回数据

return value;

/*************读取温度的值 读出来的是小数***************/ uint read_temp() { }

/*************定时器0初始化程序***************/ void time_init() {

EA = 1;

//开总中断

value <<= 8; value |= low; value *= 0.625; return value;

//把温度的高位左移8位

//把读出的温度低位放到value的低八位中 //转换到温度值 小数 //返回读出的温度 带小数

low = read_18b20();

//读温度低字节

value = read_18b20(); //读温度高字节 init_18b20(); EA = 0;

write_18b20(0xcc); //跳过64位ROM write_18b20(0xbe); //发出读取暂存器命令 EA = 1;

//初始化18b20

uint value; uchar low;

//在读取温度的时候如果中断的太频繁了,就应该把中断给

关了,否则会影响到18b20的时序

init_18b20();

//初始化18b20

write_18b20(0xcc); //跳过64位ROM write_18b20(0x44); //启动一次温度转换命令 delay_uint(50);

//500us

}

TMOD = 0X01; ET0 = 1; TR0 = 1;

//定时器0、定时器1工作方式1 //开定时器0中断 //允许定时器0定时

/****************独立按键处理函数************************/ void key() {

static uchar key_new = 0,key_old = 0,key_value = 0; if(key_new == 0) { } else {

if((P2 & 0x0f) != 0x0f) {

key_value = 0; key_new = 0;

flag_lj_en = 1; //连加使能

zd_break_en = 1; //自动退出设置界使能 zd_break_value = 0; //自动退出设置界变量清零 key_value ++; //按键按下的时候 key_value = 0; else

if(key_value >= 7) { }

write_eepom(); key_value = 0; key_new = 1; flag_lj_en = 0; flag_value = 0;

//关闭连加使能

//清零

flag_lj_3_en = 0; //关闭3秒后使能

//按键松开的时候做松手检测

if((P2 & 0x0f) == 0x0f)

key_value ++; key_value = 0; else

if(key_value >= 10)

}

}

}

key_time = 0;

key_can = 20; if(key_500ms == 1) { }

if((key_new == 0) && (key_old == 1)) { }

switch(P2 & 0x0f) { }

case 0x0e: key_can = 4; break; case 0x0d: key_can = 3; break; case 0x0b: key_can = 2; break; case 0x07: key_can = 1; break;

//得到k1键值 //得到k2键值 //得到k3键值 //得到k4键值

key_500ms = 0; key_new = 0; key_old = 1;

key_old = key_new;

/****************按键处理数码管显示函数***************/ void key_with() {

if(key_can == 4) {

menu_1 ++; if(menu_1 >= 3) { }

if(menu_1 == 0) { }

if(menu_1 == 1)

write_com(0x0c); //关闭光标 menu_1 = 0;

}

{ }

if(menu_1 == 2) { }

menu_shudu = 20;

//设置高温报警

write_sfm3_18B20(2,10,t_low);

write_com(0x80+0x40+10); //将光标移动到秒个位 write_com(0x0f); //显示光标并且闪烁 write_sfm3_18B20(2,2,t_high);

write_com(0x80+0x40+2); //将光标移动到秒个位 write_com(0x0f); //显示光标并且闪烁

if(menu_1 == 1) {

if(key_can == 3) { }

if(key_can == 2) {

if(flag_lj_3_en == 0)

t_high -- ;

//按键按下未松开自动加三次

else

t_high -= 10; //按键按下未松开自动减三次之后每次自动减10 t_high = t_low + 1; if(t_high <= t_low)

write_sfm3_18B20(2,2,t_high); if(flag_lj_3_en == 0)

t_high ++ ;

//按键按下未松开自动加三次

else

t_high += 10; //按键按下未松开自动加三次之后每次自动加10 t_high = 990; if(t_high > 990)

write_sfm3_18B20(2,2,t_high);

write_com(0x80+0x40+2); //将光标移动到秒个位 write_com(0x0f); //显示光标并且闪烁

…… 此处隐藏:1137字,全部文档内容请下载后查看。喜欢就下载吧 ……
基于单片机设计的智能温度报警器(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/438888.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)