数字温度计的程序keil(-55°~125°)
时间: 2023-07-31 18:01:26 浏览: 125
数字温度计是一种用于测量温度的仪器,其程序可以在Keil软件中进行编写。
首先,我们需要定义温度范围为-55°C到125°C,这是数字温度计可以测量的范围。接下来,我们可以设置一个变量来存储温度数值,例如temperature。
然后,我们可以使用Keil软件中的if语句或者switch语句来判断所测得的温度数值的范围,并作出相应的处理。例如,如果温度小于-55°C,可以输出“温度过低”;如果温度大于125°C,可以输出“温度过高”;否则,可以将温度输出到显示屏或者存储到存储器中。
除了基本的范围判断,我们还可以添加其他功能。例如,可以设置一个报警阈值,在温度超过或低于该阈值时触发报警,并给出相应的提示。这可以通过在if语句或者switch语句中添加额外的判断条件来实现。
值得注意的是,数字温度计的精度和测量范围可能会有所不同,具体的程序设计需要根据具体的温度计型号和要求进行调整。
总之,通过使用Keil软件,我们可以编写一个用于数字温度计的程序,实现温度的测量、显示和报警等功能。这个程序可以根据温度范围进行判断,并作出相应的处理和反馈。
相关问题
利用数字温度传感器DS18B20与单片机结合来测量温度。利用数字温度传感器DS18B20测量温度信号,计算后在LED数码管上显示相应的温度值。其温度测量范围为-55℃~125℃,精确到0.5℃。数字温度计所测量的温度采用数字显示,控制器使用单片机AT89C51,测温传感器使用DS18B20,共阴极LED数码管以SEG和LOC串口传送数据实现温度显示的keil代码
以下是基于AT89C51单片机的DS18B20数字温度传感器测量温度并在LED数码管上显示的Keil代码:
```
#include <reg51.h>
#define DQ P3_2 // 定义DS18B20的数据口
typedef unsigned char uchar;
typedef unsigned int uint;
void Delay10us() // 延时函数,用于DS18B20通信
{
uchar i;
for (i = 0; i < 2; i++);
}
uchar Init_DS18B20() // 初始化DS18B20,返回0表示初始化失败,返回1表示初始化成功
{
uchar flag;
DQ = 1; // DQ为高电平
Delay10us();
DQ = 0; // DQ为低电平
Delay10us();
DQ = 1; // DQ为高电平
Delay10us();
flag = DQ; // 判断DS18B20设备是否存在
Delay10us();
return flag;
}
void Write_DS18B20(uchar dat) // 向DS18B20写入一个字节的数据
{
uchar i;
for (i = 0; i < 8; i++)
{
DQ = 0; // DQ为低电平
Delay10us();
DQ = dat & 0x01; // 写入数据的最低位
Delay10us();
DQ = 1; // DQ为高电平
dat >>= 1; // 写入数据的下一位
Delay10us();
}
}
uchar Read_DS18B20() // 从DS18B20读取一个字节的数据
{
uchar i, dat = 0;
for (i = 0; i < 8; i++)
{
DQ = 0; // DQ为低电平
Delay10us();
DQ = 1; // DQ为高电平
Delay10us();
dat >>= 1; // 读取数据的下一位
if (DQ) dat |= 0x80; // 读取数据的最高位
Delay10us();
}
return dat;
}
void Convert() // DS18B20温度转换
{
Init_DS18B20(); // 初始化DS18B20
Write_DS18B20(0xcc); // 跳过ROM操作
Write_DS18B20(0x44); // 温度转换指令
}
void Read_Temp(uchar *temp) // 从DS18B20读取温度值
{
uchar th, tl;
Init_DS18B20(); // 初始化DS18B20
Write_DS18B20(0xcc); // 跳过ROM操作
Write_DS18B20(0xbe); // 发送读温度指令
tl = Read_DS18B20(); // 读取温度低八位
th = Read_DS18B20(); // 读取温度高八位
*temp = th; // 将温度值存入指针所指向的地址
*(temp + 1) = tl;
}
void Display_Temp(uchar *temp) // 将温度值显示在LED数码管上
{
uchar i;
uchar code table[] = { // 数码管显示表,共阴极LED数码管
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};
uchar temp_h, temp_l;
temp_h = *temp; // 获取温度高八位
temp_l = *(temp + 1); // 获取温度低八位
if (temp_h & 0x80) // 判断温度是否为负数
{
P2 &= ~0x01; // 第一个LED数码管点亮
P0 = 0x40; // 数码管显示“-”
temp_h = ~(temp_h - 1); // 取反加一,得到温度的绝对值
temp_l = ~temp_l + 1;
}
else // 温度为正数
{
P2 &= ~0x01; // 第一个LED数码管点亮
P0 = table[temp_h / 10]; // 数码管显示温度的十位
Delay10us();
P2 &= ~0x02; // 第二个LED数码管点亮
P0 = table[temp_h % 10]; // 数码管显示温度的个位
Delay10us();
}
P2 &= ~0x04; // 第三个LED数码管点亮
P0 = table[temp_l / 10]; // 数码管显示温度的小数点前一位
Delay10us();
P2 &= ~0x08; // 第四个LED数码管点亮
P0 = table[temp_l % 10]; // 数码管显示温度的小数点后一位
Delay10us();
}
void main()
{
uchar temp[2]; // 用于存储温度值的数组
while (1)
{
Convert(); // DS18B20温度转换
Read_Temp(temp); // 从DS18B20读取温度值
Display_Temp(temp); // 将温度值显示在LED数码管上
}
}
```
该代码实现了DS18B20数字温度传感器的初始化、温度转换、温度读取和温度显示等功能,可用于测量范围为-55℃~125℃,精确到0.5℃的温度。其中,Init_DS18B20()函数用于初始化DS18B20,Write_DS18B20()函数用于向DS18B20写入一个字节的数据,Read_DS18B20()函数用于从DS18B20读取一个字节的数据,Convert()函数用于DS18B20温度转换,Read_Temp()函数用于从DS18B20读取温度值,Display_Temp()函数用于将温度值显示在LED数码管上。
利用数字温度传感器DS18B20与单片机结合来测量温度。利用数字温度传感器DS18B20测量温度信号,计算后在LED数码管上显示相应的温度值。其温度测量范围为-55℃~125℃,精确到0.5℃。数字温度计所测量的温度采用数字显示,控制器使用单片机AT89C51,测温传感器使用DS18B20,在共阴极LED数码管以SEG和LOC串口传送数据实现温度显示的keil代码
以下是基于AT89C51单片机的DS18B20数字温度传感器测量温度并在共阴极LED数码管上显示的Keil代码:
```
#include <reg51.h>
#define DQ P3_2 // 定义DS18B20的数据口
typedef unsigned char uchar;
typedef unsigned int uint;
void Delay10us() // 延时函数,用于DS18B20通信
{
uchar i;
for (i = 0; i < 2; i++);
}
uchar Init_DS18B20() // 初始化DS18B20,返回0表示初始化失败,返回1表示初始化成功
{
uchar flag;
DQ = 1; // DQ为高电平
Delay10us();
DQ = 0; // DQ为低电平
Delay10us();
DQ = 1; // DQ为高电平
Delay10us();
flag = DQ; // 判断DS18B20设备是否存在
Delay10us();
return flag;
}
void Write_DS18B20(uchar dat) // 向DS18B20写入一个字节的数据
{
uchar i;
for (i = 0; i < 8; i++)
{
DQ = 0; // DQ为低电平
Delay10us();
DQ = dat & 0x01; // 写入数据的最低位
Delay10us();
DQ = 1; // DQ为高电平
dat >>= 1; // 写入数据的下一位
Delay10us();
}
}
uchar Read_DS18B20() // 从DS18B20读取一个字节的数据
{
uchar i, dat = 0;
for (i = 0; i < 8; i++)
{
DQ = 0; // DQ为低电平
Delay10us();
DQ = 1; // DQ为高电平
Delay10us();
dat >>= 1; // 读取数据的下一位
if (DQ) dat |= 0x80; // 读取数据的最高位
Delay10us();
}
return dat;
}
void Convert() // DS18B20温度转换
{
Init_DS18B20(); // 初始化DS18B20
Write_DS18B20(0xcc); // 跳过ROM操作
Write_DS18B20(0x44); // 温度转换指令
}
void Read_Temp(uchar *temp) // 从DS18B20读取温度值
{
uchar th, tl;
Init_DS18B20(); // 初始化DS18B20
Write_DS18B20(0xcc); // 跳过ROM操作
Write_DS18B20(0xbe); // 发送读温度指令
tl = Read_DS18B20(); // 读取温度低八位
th = Read_DS18B20(); // 读取温度高八位
*temp = th; // 将温度值存入指针所指向的地址
*(temp + 1) = tl;
}
void Display_Temp(uchar *temp) // 将温度值显示在共阴极LED数码管上
{
uchar i;
uchar code table[] = { // 数码管显示表,共阴极LED数码管
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e
};
uchar temp_h, temp_l;
temp_h = *temp; // 获取温度高八位
temp_l = *(temp + 1); // 获取温度低八位
if (temp_h & 0x80) // 判断温度是否为负数
{
P2 = 0x0f; // 所有LED数码管均点亮
P0 = 0x40; // 数码管显示“-”
temp_h = ~(temp_h - 1); // 取反加一,得到温度的绝对值
temp_l = ~temp_l + 1;
}
else // 温度为正数
{
P2 = 0x0e; // 第一个LED数码管点亮
P0 = table[temp_h / 10]; // 数码管显示温度的十位
Delay10us();
P2 = 0x0d; // 第二个LED数码管点亮
P0 = table[temp_h % 10]; // 数码管显示温度的个位
Delay10us();
}
P2 = 0x0b; // 第三个LED数码管点亮
P0 = table[temp_l / 10]; // 数码管显示温度的小数点前一位
Delay10us();
P2 = 0x07; // 第四个LED数码管点亮
P0 = table[temp_l % 10] | 0x80; // 数码管显示温度的小数点后一位,并点亮小数点
Delay10us();
}
void main()
{
uchar temp[2]; // 用于存储温度值的数组
while (1)
{
Convert(); // DS18B20温度转换
Read_Temp(temp); // 从DS18B20读取温度值
Display_Temp(temp); // 将温度值显示在共阴极LED数码管上
}
}
```
该代码实现了DS18B20数字温度传感器的初始化、温度转换、温度读取和温度显示等功能,可用于测量范围为-55℃~125℃,精确到0.5℃的温度。其中,Init_DS18B20()函数用于初始化DS18B20,Write_DS18B20()函数用于向DS18B20写入一个字节的数据,Read_DS18B20()函数用于从DS18B20读取一个字节的数据,Convert()函数用于DS18B20温度转换,Read_Temp()函数用于从DS18B20读取温度值,Display_Temp()函数用于将温度值显示在共阴极LED数码管上。