51单片机设置Ds1820b 用TM1638显示
时间: 2023-10-05 11:07:41 浏览: 172
温度值在LED数码管上显示-C51单片机12(温度传感器)课件
设置DS1820B温度传感器与TM1638数码管显示器配合使用,需要先了解DS1820B的工作原理和TM1638的控制方式。
DS1820B温度传感器是一种数字温度传感器,采用1-Wire总线协议进行通信,其工作原理是通过将传感器与单片机的IO口连接,单片机向传感器发送读取温度的命令,传感器将温度信息以数字形式返回给单片机。
TM1638数码管显示器是一种集成了8个LED数码管和8个按键的显示器,可以通过SPI总线协议与单片机进行通信,实现数字显示和按键输入等功能。
下面是设置DS1820B与TM1638的具体步骤:
1. 连接硬件:将DS1820B的DQ引脚连接到单片机的一个IO口,将TM1638的CLK、DIO和STB引脚分别连接到单片机的SPI时钟、数据和片选口。
2. 初始化TM1638:在程序中初始化TM1638,并设置为显示模式。
3. 初始化DS1820B:发送复位信号,搜索DS1820B设备,获取设备ROM码。
4. 读取温度:向DS1820B发送读取温度命令,接收温度值,并将其转换为需要显示的格式。
5. 显示温度:将温度值通过TM1638显示出来。
具体实现过程可以参考以下代码片段:
```c
#include<reg51.h>
#include<intrins.h>
#include<ds18b20.h>
#include<tm1638.h>
sbit DQ=P2^0;
void main()
{
unsigned char tm1638_data[16];
unsigned char ds18b20_data[9];
unsigned char temp=0;
unsigned int temp_value=0;
unsigned char i=0,j=0;
TM1638_Init();
TM1638_SetDisplayMode(TM1638_DISPLAY_ON, TM1638_BRIGHTNESS_DEFAULT);
while(1)
{
if(DS18B20_Reset()) //复位DS18B20
{
DS18B20_SearchROM(ds18b20_data); //搜索DS18B20设备
DS18B20_MatchROM(ds18b20_data); //匹配设备
DS18B20_Convert(); //开始转换温度
Delay1ms(750); //等待转换完成
if(DS18B20_Reset()) //复位DS18B20
{
DS18B20_MatchROM(ds18b20_data); //匹配设备
DS18B20_ReadData(ds18b20_data); //读取温度值
temp=ds18b20_data[1]; //获取温度值
temp_value=temp; //保存温度值
temp=ds18b20_data[0]; //获取温度小数位
temp_value=temp_value|(temp<<8); //将温度小数位转换为16位数字
//将温度值转换为需要显示的格式
for(i=0;i<8;i+=2)
{
j=(temp_value%10)|((temp_value/10%10)<<4); //转换为BCD码
tm1638_data[i]=j; //保存到TM1638数据缓存中
temp_value/=100;
}
//显示温度值
TM1638_SetData(tm1638_data);
}
}
}
}
```
需要注意的是,以上代码只是一个简单的示例,具体实现过程可能需要根据实际情况进行调整。同时,需要根据具体的硬件和软件环境进行修改和优化。
阅读全文