标题:
保温箱代码 温度过高或者偏低有报警功能 精度在0.05 温度在显示屏显示
[打印本页]
作者:
stubi
时间:
2018-4-25 11:48
标题:
保温箱代码 温度过高或者偏低有报警功能 精度在0.05 温度在显示屏显示
130436yf44l69igzltf44f.png
(66.65 KB, 下载次数: 33)
下载附件
2018-4-27 01:45 上传
单片机源程序如下:
#include<reg52.h> // 包含51单片机寄存器定义的头文件
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit BEEP=P3^7;
sbit DQ=P3^6;
sbit point=P0^7;
sbit motor=P1^5;
sbit lamp=P1^4;
uchar disbuf[3];
uchar code LEDData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//延时子函数//
void delay(uint num)
{
while(num--);
}
//*************初始化*************//
void Init_DS18B20(void)
{
unsigned char x=0;
DQ=1; //DQ先置高
delay(8); //稍延时
DQ=0; //发送复位脉冲
delay(80); //延时(>480us)
DQ=1; //拉高数据线
delay(5); //等待(15~60us)
x=DQ; //用X的值来判断初始化有没有成功,18B20存在的话X=0,否则X=1
delay(20);
}
//************读一个字节*************//
ReadOneChar(void) //主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号
{
unsigned char i=0; //每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期
unsigned char dat=0;
for (i=8;i>0;i--) //一个字节有8位
{
DQ=1;
delay(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay(4);
}
return(dat);
}
//****************写一个字节****************//
void WriteOneChar(unsigned char dat)
{
unsigned char i=0; //数据线从高电平拉至低电平,产生写起始信号。15us之内将所需写的位送到数据线上,
for(i=8;i>0;i--) //在15~60us之间对数据线进行采样,如果是高电平就写1,低写0发生。
{
DQ=0; //在开始另一个写周期前必须有1us以上的高电平恢复期。
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
delay(4);
}
//*****************读取温度******************//
uchar ReadTemperature(void)
{
uchar fg=0;
uchar tempL=0;
uchar tempH=0;
uint sdate;
uchar pointnum;
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0x44);
delay(125);
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0xbe);
tempL=ReadOneChar();
tempH=ReadOneChar();
if(tempH>0x7f)
{
tempL=~tempL;
tempH=~tempH+1;
fg=1;
}
sdate=tempL/16+tempH*16;
pointnum=(tempL&0x0f)*10/16;
if(fg==1)
{
sdate-=15;
pointnum=0;
}
if(!fg&&sdate>50)
{
BEEP=1;
motor=1;
}
else
{
BEEP=0;
motor=0;
}
if(fg==1&&sdate<10)
{
BEEP=1;
lamp=1;
}
else
{
BEEP=0;
lamp=0;
}
disbuf[0]=sdate/10;
disbuf[2]=sdate%10;
disbuf[1]=pointnum;
return fg;
}
//初始化定时器0//
//定时器0中断服务程序//
//外部中断0服务程序//
//外部中断1服务程序//
//读取温度//
//显示开机初始化等待画面//
//void Disp_init()
/* {
P2=0xf7;
P0=0x40;
delay(200);
P2=0xfb;
delay(200);
P2=0xfe;
delay(200);
P2=0xfd;
delay(200);
P2=0xff;//关闭显示
} */
//**************显示温度子函数****************//
void Display_Temperature(uchar key)
{
P2=0xf7;
P0=LEDData[disbuf[1]];//显示个位
delay(300);
P2=0xfb;
P0=LEDData[disbuf[2]];//显示十位
point=1;//显示小数点
delay(300);
P2=0xfd;
if(disbuf[0]>0)
P0=LEDData[disbuf[0]];//显示百位
else
P0=0x00;
delay(300);
P2=0xfe;
if(key==1)
P0=0x40;//显示负号
else
P0=0x00;
delay(300);
}
//显示报警温度子函数//
//***************报警子函数***************//
/* void Alarm()
{
unsigned int i;
{
for (i=0;i<200;i++)//发声时长
{
delay(80);//发声频率
BEEP=!BEEP;
}
BEEP=1;//蜂鸣器停止工作
delay(20000);//间歇时间
}
} */
//************主函数*************//
void main(void)
{
delay(300);
Init_DS18B20();
// Disp_init();
// delay(300);
while(1)
{
uchar flag=ReadTemperature();
Display_Temperature(flag);
}
}
复制代码
所有资料51hei提供下载:
build.rar
(31.07 KB, 下载次数: 41)
2018-4-25 11:47 上传
点击文件名下载附件
具体51代码
下载积分: 黑币 -5
作者:
admin
时间:
2018-4-25 18:01
楼主能分享一下原理图吗?
作者:
无时崩溃
时间:
2018-4-25 22:10
感谢楼主分享
作者:
mnbvcxzlkjhgfds
时间:
2018-7-19 10:23
感谢分享
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1