标题:
单片机数字温度计(高于10度,低于-3.5度时报警)代码与仿真
[打印本页]
作者:
m0ck
时间:
2017-11-20 14:28
标题:
单片机数字温度计(高于10度,低于-3.5度时报警)代码与仿真
(收集加修改)当温度高于10度,低于-3.5度时,报警指示灯(红灯)亮。
0.png
(15.51 KB, 下载次数: 76)
下载附件
2017-11-20 21:05 上传
0.png
(10.02 KB, 下载次数: 46)
下载附件
2017-11-20 21:05 上传
单片机源程序如下:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code lednum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//数码管字0~9
uint temp;
uchar g,s,b,q; //个十百千位
//uchar data disdata[5];
uint Tvalue; //温度值
uchar Tflag; //温度正负标志
char t=0;//温度 ,初始设定0
sbit p0=P0^0;//控制红色报警灯
sbit P34=P3^4;
sbit P35=P3^5;
sbit P36=P3^6;
sbit DQ=P3^7;//ds18b20与单片机连接口
sbit P17=P1^7;
sbit P24=P2^4;
/*****************延时函数********************/
void delay(uint x)
{ uchar k;
while(x--)
for(k=0;k<250;k++) ;
}
/*****************数码管扫描********************/
void ledscan(void)
{ uchar k;
for(k=0;k<150;k++)
{ //显示DS18B20 小数点一位,含负温度显示
P1=lednum[g];P2=0x0e;delay(1);P1=0x00;
P1=lednum[s];P17=1;P2=0x0d;delay(1);P1=0x00;
P1=lednum[b];P2=0x0b;delay(1);P1=0x00;
P1=lednum[q];P2=0x07;delay(1);P1=0x00;
}
}
/******************************DS18B20程序(定义开始)***************************************/
void delay_18B20(unsigned int i)//延时2微秒
{
while(i--);
}
/*****************ds1820复位****************/
void DS18B20_RST()
{ unsigned char x=0;
DQ = 1; //DQ复位
delay_18B20(8); //延时
DQ = 0; //DQ拉低
delay_18B20(80); //精确延时大于480us
DQ = 1; //拉高
delay_18B20(14);
x=DQ;
delay_18B20(20);
}
/*****************读数据*******************/
uchar DS18B20_RD()
{ unsigned char i=0;
unsigned char R_data= 0;
for (i=8;i>0;i--)
{ DQ = 0; //给脉冲信号
R_data>>=1; //
DQ = 1; //给脉冲信号
if(DQ)
R_data|=0x80;
delay_18B20(4);
}
return(R_data);
}
/*******************写数据*******************/
void DS18B20_WR(uchar W_data)
{
unsigned char i=0;
for (i=8; i>0; i--)
{ DQ = 0;
DQ = W_data&0x01;
delay_18B20(5);
DQ = 1;
W_data>>=1; //
}
delay_18B20(4);
}
/****************读取温度值并转换***************/
read_temp()
{ uchar a,b;
DS18B20_RST();
DS18B20_WR(0xcc); //*跳过读序列号*/
DS18B20_WR(0x44); //*启动温度转换*/
DS18B20_RST();
DS18B20_WR(0xcc); //*跳过读序列号*/
DS18B20_WR(0xbe); //*读取温度*/
a=DS18B20_RD();
b=DS18B20_RD();
Tvalue=b;
Tvalue<<=8; //
Tvalue=Tvalue|a;
if(Tvalue<0x0fff)
Tflag=0;
else
{
Tvalue=~Tvalue+1;
Tflag=1;
}
Tvalue=Tvalue*(0.625);//温度值扩大10倍,精确到1位小数
return(Tvalue);
}
/****************温度值显示***************/
void DS1820disp()
{
b=Tvalue/100%10;//十位数
s=Tvalue/10%10; //个位数
g=Tvalue%10; //小数位
t=b|s;//t中是温度的整数部分
if(Tflag==0)
q=Tvalue/1000; //正温度不显示符号,显示百位数
else
q=10;//负温度显示负号:-
}
/******************************DS18B20程序(定义结束)***************************************/
/*****************主函数********************/
void main()
{
P0=0xff;
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
数字温度计.rar
(67.52 KB, 下载次数: 36)
2017-11-20 14:27 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
zzt123
时间:
2018-4-22 17:48
有电路图嘛?
作者:
linfangjun
时间:
2018-4-25 21:08
不错不错,学习的好资料
作者:
daydayup68
时间:
2018-5-8 15:06
非常不错,赞
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1