请问51单片机的DS18B20程序怎么写
时间: 2023-12-23 17:06:30 浏览: 32
你好,以下是一个简单的 51 单片机读取 DS18B20 温度传感器的程序:
```
#include "reg52.h"
#include "ds18b20.h" //引用头文件
void main() {
unsigned char temp;
init_18b20(); //初始化 DS18B20 温度传感器
while(1) {
temp = read_temperature(); //读取温度数据
//将温度数据发送给其他模块或处理
}
}
```
以上程序仅供参考,具体实现可能与您的项目有所不同。如果需要更详细的帮助,请提供更多信息。谢谢。
相关问题
51单片机ds18b20程序报警
下面是51单片机DS18B20温度传感器的报警程序示例:
```c
#include <reg52.h>
#include <intrins.h>
#define DQ P2_7
typedef unsigned char uchar;
typedef unsigned int uint;
sbit beep = P1^5; // 蜂鸣器
uchar alarm_temp = 30; // 报警温度
void delay(uint t) // 延时函数
{
while(t--);
}
void delay_ms(uint t) // 毫秒延时函数
{
uint i, j;
for(i = 0; i < t; i++) {
for(j = 0; j < 120; j++);
}
}
uchar ds18b20_init() // 初始化DS18B20
{
uchar i;
DQ = 1;
_nop_();
_nop_();
_nop_();
DQ = 0;
delay(200);
DQ = 1;
delay(30);
i = DQ;
delay(170);
return i;
}
void ds18b20_write_byte(uchar dat) // 向DS18B20写入一个字节
{
uchar i;
for(i = 0; i < 8; i++) {
DQ = 0;
_nop_();
_nop_();
DQ = dat & 0x01;
delay(5);
DQ = 1;
dat >>= 1;
}
}
uchar ds18b20_read_byte() // 从DS18B20读取一个字节
{
uchar i, dat = 0;
for(i = 0; i < 8; i++) {
dat >>= 1;
DQ = 0;
_nop_();
_nop_();
DQ = 1;
_nop_();
_nop_();
if(DQ) dat |= 0x80;
delay(5);
DQ = 1;
}
return dat;
}
void ds18b20_convert() // DS18B20转换温度
{
ds18b20_init();
ds18b20_write_byte(0xcc);
ds18b20_write_byte(0x44);
}
uchar ds18b20_read_temp() // 读取DS18B20温度值
{
uchar temp_l, temp_h;
int temp;
ds18b20_init();
ds18b20_write_byte(0xcc);
ds18b20_write_byte(0xbe);
temp_l = ds18b20_read_byte();
temp_h = ds18b20_read_byte();
temp = temp_h;
temp <<= 8;
temp |= temp_l;
return temp;
}
void main()
{
uchar temp;
while(1) {
ds18b20_convert(); // 转换温度
delay_ms(500);
temp = ds18b20_read_temp(); // 读取温度值
if(temp > alarm_temp) { // 温度超过报警温度
beep = 0; // 蜂鸣器响
delay_ms(200);
beep = 1;
delay_ms(200);
}
}
}
```
在这个程序中,我们定义了一个报警温度,当温度超过这个值时,蜂鸣器会响起。程序中使用了DS18B20温度传感器,通过调用`ds18b20_convert()`函数来转换温度,然后调用`ds18b20_read_temp()`函数来读取温度值。如果温度超过报警温度,就会触发报警。
51单片机ds18b20程序
以下是基于51单片机的DS18B20温度传感器读取程序:
```c
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P3^7; //定义单总线DQ引脚
//延时函数
void Delay1ms(uint cnt)
{
uint i, j;
for(i = 0; i < cnt; i++)
for(j = 0; j < 110; j++);
}
//初始化DS18B20
uchar Init_DS18B20()
{
uchar i;
DQ = 1;
_nop_();
_nop_();
_nop_();
DQ = 0;
Delay1ms(20);
DQ = 1;
Delay1ms(1);
i = DQ;
Delay1ms(20);
return i;
}
//写一个字节
void Write_DS18B20(uchar dat)
{
uchar i;
for(i = 0; i < 8; i++)
{
DQ = 0;
_nop_();
_nop_();
DQ = dat & 0x01;
_nop_();
_nop_();
DQ = 1;
dat >>= 1;
}
}
//读一个字节
uchar Read_DS18B20()
{
uchar i, j, dat;
dat = 0;
for(i = 0; i < 8; i++)
{
DQ = 0;
_nop_();
_nop_();
DQ = 1;
_nop_();
_nop_();
j = DQ;
dat = (j << 7) | (dat >> 1);
}
return dat;
}
//读温度值
int Read_Temperature()
{
uchar TL, TH;
int Temperature;
Init_DS18B20();
Write_DS18B20(0xcc); //跳过ROM操作
Write_DS18B20(0x44); //启动温度转换
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe); //读取温度寄存器
TL = Read_DS18B20();
TH = Read_DS18B20();
Temperature = TH;
Temperature <<= 8;
Temperature |= TL;
return Temperature;
}
void main()
{
int Temperature;
while(1)
{
Temperature = Read_Temperature(); //读取温度值
Temperature >>= 4; //丢掉小数部分
//将温度值通过串口发送到上位机
SBUF = Temperature / 10 + '0';
while(!TI);
TI = 0;
SBUF = Temperature % 10 + '0';
while(!TI);
TI = 0;
Delay1ms(1000); //延时1s
}
}
```
以上程序中,使用P3^7引脚作为DS18B20的DQ引脚,通过单总线协议与DS18B20进行通讯,读取温度值后将其通过串口发送到上位机。程序仅供参考,具体应用中还需要根据实际情况进行适当修改。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)