蓝桥杯-51单片机-DS18B20外设使用

DS18B20引脚

DS18B20引脚图如上,DS18B20使用OneWire总线控制,仅需要操作引脚DQ即可使用。翻阅原理图可知比赛中需要在OneWire.h文件中定义引脚DQ 

sbit DQ = P1^4;

DS18B20如何使用

翻阅芯片手册可知

DS18B20在使用时应遵循以上步骤:1.初始化 2.ROM命令 3.功能命令

由芯片手册可知,ROM命令如下:

功能命令如下:

我们仅使用DS18B20进行温度读取操作,由于蓝桥杯比赛板上仅有一个DS18B20,可以跳过第二步ROM操作。具体代码如下:

float Temperature_Read()
{
	unsigned char low,high;
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);
	low = Read_DS18B20();
	high = Read_DS18B20();
	return ((high << 8) | low) / 16.0;
}

其中0xcc为跳过ROM命令,0x44为转换温度,0xbe为读取寄存器。

将温度读取出来后,可以在主程序中定义float型变量float temperature来通过数码管等外设显示温度,具体代码如下:

float temperature;	//DS18B20温度专用变量

/* 信息处理函数 */
void Seg_Proc()
{
	if(Seg_Slow_Down) return;
	Seg_Slow_Down = 1;
	
	/* 信息读取区域 */
		/* DS1302时钟 */
//	RTC_Read(ucRTC);
		/* DS18B20温度 */
	temperature = Temperature_Read();
	
	/* 数据处理区域 */
		/* DS1302时钟 */
//	Seg_Buf[0] = ucRTC[0] / 16; //时第一位
//	Seg_Buf[1] = ucRTC[0] % 16;
//	Seg_Buf[2] = 11;
//	Seg_Buf[3] = ucRTC[1] / 16; //分第一位
//	Seg_Buf[4] = ucRTC[1] % 16;
//	Seg_Buf[5] = 11;
//	Seg_Buf[6] = ucRTC[2] / 16; //秒第一位
//	Seg_Buf[7] = ucRTC[2] % 16;
		/*DS18B20温度 */
	Seg_Buf[0] = (unsigned char)temperature / 10 % 10;
	Seg_Buf[1] = (unsigned char)temperature % 10;
	Seg_Point[1] = 1;
	Seg_Buf[2] = (unsigned int)(temperature * 100) % 10;
	Seg_Buf[3] = (unsigned int)(temperature * 10) % 10;
}

以上仅为自己学习记录,如有错误欢迎指正。

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值