单片机的数字温度计谁会设计
本帖最后由 cwz8632 于 2021-6-15 17:18 编辑要求:将温度显示在LCD1602上,当温度超过或低于设定的阈值是,能通过LED闪烁b报警
设计思路:采用单总线数字温度传感器DS1305提供温度值。显示模块采用LCD1602,将温度显示在第一行。温度超过或低于设定的阈值,分别用两个LED进行闪烁报警。会的大神麻烦加下我Q1095360407,我还有一些资料。谢谢。 你确定数字温度传感器是DS1305?
我怎么记得这是个时钟芯片啊。。。 我会,DS18B20典型温度感应器,我有源码胆没写温度报警程序。DS13系列是时钟芯片吧! #include <reg52.h>//
#include <intrins.h>
#define uint unsigned int //宏定义
#define uchar unsigned char
//数码管段码
uchar code seg[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
uchar smg_wei[] = {0xe3, 0xe7, 0xeb, 0xef, 0xf3, 0xf7, 0xfb, 0xff};
uchar DisplayData={0};
sbit DQ = P3^7;
//延时函数
void delay_ms(uint n)
{
uint i,j;
for(i = n; i > 0; i--)
{
for(j = 0; j < 114; j++);
}
}
//延时10*n微秒
void delay_10um(uint n)
{
while(n--);
}
uchar DS18B20Init()
{
uchar flag_DQ;
DQ = 0; //将总线拉低 480us~960us
delay_10um(50); //延时 500us
DQ = 1; //然后释放总线,
//如果DS18B20做出反应会将在15us~60us后总线拉低
delay_10um(6); //延时60us
flag_DQ = DQ;
while(!DQ);
//delay_10um(50); //延时 500us
return flag_DQ;
}
//先写低位再读高位
void DS18B20WriteByte(uchar dat)
{
uchar j;
for(j=0;j<8;j++)
{
DQ = 0;
//_nop _: 51单片机中封装好的函数,用于延时,大约1us,需包含#includc“intrins.h”
_nop_();//延时1微秒
_nop_();//延时1微秒
DQ = dat & 0x01;
delay_10um(6);//延时 60us
DQ = 1;
dat = dat >> 1;//右移一位
}
}
//先读低位再读高位
uchar DS18B20ReadByte()
{
uchar i,byte=0;
for(i=0;i<8;i++)
{
DQ = 0;
_nop_();
_nop_();
byte = byte >> 1;
DQ = 1;
_nop_();
_nop_();
//byte = byte >> 1;
if(DQ)
{
byte |= 0x80;
}
delay_10um(5);//延时 50us
}
return byte;
}
//读取温度
uint DS18B20ReadTemp()
{
uint temp = 0;
uchar tmh,tml;
//1.初始化DS18B20
DS18B20Init();
//2.执行ROM指令
DS18B20WriteByte(0xcc); //跳过ROM
//3.执行RAM指令——启动温度测量
DS18B20WriteByte(0x44); //启动温度转换(测量)
delay_10um(75);//延时 750ms
//4.初始化DS18B20
DS18B20Init();
//5.执行ROM指令
DS18B20WriteByte(0xcc); //跳过ROM
//6.执行RAM指令——读取温度数据
DS18B20WriteByte(0xbe); //读取暂存器中的温度数据
tml = DS18B20ReadByte();//读取byte0低位温度值
tmh = DS18B20ReadByte();//读取byte1高位温度值
//7.将低温温度和高位温度组合
temp = tmh;
temp <<= 8;
temp |= tml;
//8.温度转换
temp = temp *0.0625 + 0.5;
return temp;
}
void main()
{
uchar i,temp;
while(1)
{
temp = DS18B20ReadTemp();
DisplayData = seg;
DisplayData = seg;
for(i = 0; i < 8; i++)
{
P2 = smg_wei;/n码
P0 = DisplayData; //取段码
delay_ms(1);
P0 = 0x00;
}
}
} wpp123456 发表于 2021-12-29 20:09
#include //
#include
#define uint unsigned int //宏定义
ds18b20 才是温度传感器{:5_90:}
页:
[1]