标题:
简易18b20温度采集与控制 设置模式按数字键可直接修改上下限
[打印本页]
作者:
重口辣泡菜
时间:
2018-7-1 14:53
标题:
简易18b20温度采集与控制 设置模式按数字键可直接修改上下限
进入设置模式按数字键可直接修改上下限
单片机源程序如下:
/*
*Target:功能描述
* 模拟“温度采集与控制装置”用于实现温度的实时监测与控制。单片机采集DS18B20温度传感器
* 的输出信号,并送到数码管进行显示;通过传感器得到的温度数据将与用户设定温度上限、下
* 限做比较,再由单片机启动或控制报警电路。
*Author:作者:重口辣泡菜
*Date:日期: 2018/7/1
*/
#include <reg52.h>
#include "display.h"
#include "delay.h"
#include "18b20.h"
#include "key.h"
/*******************函数申明**********************/
void Timer0_Init(void);
void Temp_deal(void);
void Display_mod1(void);
void Display_mod2(void);
void key_deal(void);
/*******************led引脚**********************/
sbit led1=P2^7;
sbit led2=P2^6;
/*******************数码管显示变量**********************/
unsigned char mod,level,m=3,n=0,p=2,q=0,i;
/*******************温度读取变量**********************/
unsigned int Temp_read_value,temp;
unsigned char Tmax=30,Tmin=20;
bit ReadTempFlag;
bit clearflag;
/*******************按键值变量**********************/
unsigned char key_read_value,key_value;
unsigned char templimit[8];
/*******************主函数**********************/
void main()
{
Timer0_Init();
while(1)
{
Temp_deal();
if( mod==0 ) Display_mod1();
else Display_mod2();
key_deal();
}
}
void key_deal(void) //按键消息处理
{
key_read_value = key_read();
if( key_read_value!=0xFF )
{
switch( key_read_value )
{
case 13: mod++; if( mod==2 ) mod = 0; break;
case 14: clearflag = 1; break;
case 0: key_value = 0; i++; break;
case 1: key_value = 1; i++; break;
case 2: key_value = 2; i++; break;
case 3: key_value = 3; i++; break;
case 4: key_value = 4; i++; break;
case 5: key_value = 5; i++; break;
case 6: key_value = 6; i++; break;
case 7: key_value = 7; i++; break;
case 8: key_value = 8; i++; break;
case 9: key_value = 9; i++; break;
default:
break;
}
}
}
void Temp_deal(void)
{
if( ReadTempFlag==1 ) //18b20读取温度值处理
{
ReadTempFlag = 0;
Temp_read_value = ReadTemperature();
temp = Temp_read_value>>4;
}
if( temp<Tmin ) level = 1; //温度区间判断
else if( (temp>=Tmin)&&(temp<=Tmax) ) level = 2;
else if( temp>Tmax ) level = 3;
if( Tmin>Tmax ) led2=0; //下限大于上限led2常亮提示
else led2=1;
}
void Display_mod1(void) //正常显示状态
{
TempData[0] = 0x40;
TempData[1] = tabledu[ level ];
TempData[2] = 0x40;
TempData[6] = tabledu[ (temp%100)/10 ];
TempData[7] = tabledu[ (temp%100)%10 ];
}
void Display_mod2(void) //设置模式
{
TempData[0] = 0x40;
TempData[1] = tabledu[ Tmax/10 ];
TempData[2] = tabledu[ Tmax%10 ];
TempData[5] = 0x40;
TempData[6] = tabledu[ Tmin/10 ];
TempData[7] = tabledu[ Tmin%10 ];
if( (mod==1)&&(dispcom==1)&&(i==1) ) m = key_value; //按键值0~9改变上下限,设置模式下才能更改
if( (mod==1)&&(dispcom==2)&&(i==2) ) n = key_value;
if( (mod==1)&&(dispcom==6)&&(i==3) ) p = key_value;
if( (mod==1)&&(dispcom==7)&&(i==4) ) q = key_value;
if( (mod==1)(clearflag==1) ) //输入错误按下清零
{ clearflag = 0; m = 0; n = 0; p = 0; q = 0; i=0; }
Tmax = (10*m)+n; Tmin = (10*p)+q;
}
void Timer0_Init(void)
{
TMOD = 0x01;
EA=1;
ET0=1;
TR0=1;
}
void Timer0(void) interrupt 1
{
static unsigned int count,ledcount;
TH0 = (65536-2200)/256;
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
简易18b20温度采集与控制.zip
(53.51 KB, 下载次数: 47)
2018-7-1 14:51 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
王大鹏
时间:
2018-12-31 12:41
学习一下
作者:
ideapad110
时间:
2019-1-1 14:06
啥都不说,先收藏一波,感谢楼主分享
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1