单片机数字式温度计C语言程序
时间: 2024-01-07 17:03:55 浏览: 174
单片机的数字温度计C程序
以下是一个基于单片机的数字式温度计的C语言程序:
```
#include<reg52.h>
#include<stdio.h>
sbit DQ=P3^7; // 定义DQ引脚
void delay(unsigned int); // 延时函数
void write_ds18b20(unsigned char dat); // 向DS18B20写入一个字节
unsigned char read_ds18b20(); // 从DS18B20读出一个字节
void init_ds18b20(); // 初始化DS18B20
void main()
{
unsigned char temp=0,temp1=0; // 定义温度变量
unsigned char shi=0,ge=0; // 定义十位和个位变量
unsigned char i=0;
init_ds18b20(); // 初始化DS18B20
while(1)
{
write_ds18b20(0xcc);
write_ds18b20(0x44); // 启动温度转换
delay(200); // 等待转换完成
init_ds18b20(); // 初始化DS18B20
write_ds18b20(0xcc);
write_ds18b20(0xbe); // 读取温度
temp=read_ds18b20(); // 读取温度的低8位
temp1=read_ds18b20(); // 读取温度的高8位
temp1=(temp1<<4)|(temp>>4); // 合并温度的低8位和高8位
shi=temp1/10; // 计算十位
ge=temp1%10; // 计算个位
printf("Current temperature: %d.%d\n",shi,ge); // 打印当前温度
delay(500); // 延时一段时间
}
}
void delay(unsigned int i)
{
while(i--);
}
void write_ds18b20(unsigned char dat)
{
unsigned char j;
for(j=0;j<8;j++)
{
DQ=0;
_nop_();
DQ=dat&0x01;
_nop_();
DQ=1;
dat>>=1;
}
}
unsigned char read_ds18b20()
{
unsigned char byte=0,j;
for(j=0;j<8;j++)
{
DQ=0;
_nop_();
byte>>=1;
DQ=1;
_nop_();
if(DQ) byte|=0x80;
}
return byte;
}
void init_ds18b20()
{
unsigned char result;
DQ=1;
_nop_();
DQ=0;
delay(480);
DQ=1;
delay(60);
result=DQ;
delay(420);
return;
}
```
这个程序使用了单片机的P3口作为DS18B20的DQ引脚,通过延时函数来进行时序控制,从而读取DS18B20的温度值,并通过串口输出进行显示。其中,`init_ds18b20()`函数用于初始化DS18B20,`write_ds18b20()`函数用于向DS18B20写入一个字节,`read_ds18b20()`函数用于从DS18B20读出一个字节。主程序中,通过启动温度转换、读取温度并进行计算,最终得到当前的温度值,并通过串口输出进行显示。
阅读全文