用Keil编写的简单的单片机温度传感器代码
时间: 2023-07-16 14:11:26 浏览: 1308
以下是一个简单的单片机温度传感器代码,使用Keil编写,适用于使用DS18B20温度传感器的单片机:
```c
#include <reg52.h>
#include <stdio.h>
#include <string.h>
sbit DQ = P2^0; //定义DS18B20数据线
void delay(unsigned int i) //延时函数
{
while(i--);
}
void init_ds18b20() //初始化DS18B20
{
unsigned char i;
DQ = 1;
delay(5);
DQ = 0;
delay(500);
DQ = 1;
delay(30);
i = DQ;
delay(300);
}
unsigned char read_ds18b20() //读取DS18B20数据
{
unsigned char i, j, dat = 0;
for(i=1; i<=8; i++)
{
DQ = 0;
dat >>= 1;
DQ = 1;
j = DQ;
delay(1);
if(j)
dat |= 0x80;
delay(4);
}
return dat;
}
void write_ds18b20(unsigned char dat) //向DS18B20写入数据
{
unsigned char i;
for(i=1; i<=8; i++)
{
DQ = 0;
DQ = dat & 0x01;
delay(5);
DQ = 1;
dat >>= 1;
}
}
float get_temperature() //获取温度数据
{
unsigned char a, b; //定义两个变量
float temp;
init_ds18b20(); //初始化
write_ds18b20(0xcc); //跳过ROM操作
write_ds18b20(0x44); //启动温度转换
delay(100);
init_ds18b20(); //再次初始化
write_ds18b20(0xcc); //跳过ROM操作
write_ds18b20(0xbe); //读取温度数据
a = read_ds18b20(); //读取温度数据的低8位
b = read_ds18b20(); //读取温度数据的高8位
temp = b;
temp *= 256;
temp += a;
temp /= 16;
return temp; //返回温度数据
}
void main() //主函数
{
float temp;
unsigned char str[16];
TMOD = 0x20; //定时器1工作在方式2
TH1 = 0xfd; //波特率9600
TL1 = TH1;
PCON = 0x00; //波特率不加倍
SCON = 0x50; //8位数据,无校验,1位停止位,串口工作在模式1
TR1 = 1;
while(1)
{
temp = get_temperature(); //获取温度
sprintf(str, "%.2fC", temp); //将温度转化为字符串
SBUF = 'T'; //发送字母T
while(!TI);
TI = 0;
for(i=0; i<strlen(str); i++) //逐个发送温度字符串
{
SBUF = str[i];
while(!TI);
TI = 0;
}
delay(10000); //延时10秒
}
}
```
该代码使用了DS18B20温度传感器进行温度测量,并通过串口将温度数据发送出来。可以根据需要进行相应的修改,如串口波特率等。
阅读全文