汇编语言与接口技术--单总线温度采集与显示

一、 实验要求

实验目的:

  1. 掌握数码管的使用方式
  2. 掌握DS18B20温度传感器的工作原理
  3. 掌握单总线通信方式实现MCU与DS18B20数据传输

实验内容:

学习DS18B20温度传感器的单总线传输机制,通过单片机MCU的I/O实现温度采集,并将数据显示在数码管上。

二、 实验设计

 1.整体思路

程序首先在main函数中进入一个无限循环。在每次循环中,通过Ds18b20ReadTemp函数读取 DS18B20 温度传感器的温度值。

读取到的温度值经过datapros函数进行处理,将其转换为适合数码管显示的格式,并提取出百位数字(存放在f中,用于后续报警判断)。

然后通过DigDisplay函数将处理后的温度数据显示在数码管上。

最后,根据f的值判断温度是否超过设定阈值(30 度),如果超过则通过控制蜂鸣器引脚(beep)的电平翻转实现报警功能,否则关闭蜂鸣器。

2.流程图

3.主要模块设计思路及分析

(1)温度采集模块(Ds18b20ReadTemp等函数

Ds18b20ReadTemp函数整合了与 DS18B20 传感器通信的多个步骤。首先通过Ds18b20ChangTemp函数发送温度转换命令,然后在转换完成后(通过Ds18b20ReadTempCom发送读取温度命令),依次读取温度数据的高字节和低字节,将它们组合成一个完整的温度值。

Ds18b20ChangTemp函数先初始化传感器(Ds18b20Init),然后发送跳过 ROM 操作命令和温度转换命令,并且在其中还包含了一个告警搜索功能(Ds18b20AlarmSearch),当搜索到告警时会控制蜂鸣器状态(虽然这种方式可能不太合理,因为告警搜索和温度转换命令同时进行可能导致问题,但从代码逻辑上是这样设计的)。

Ds18b20ReadByte和Ds18b20WriteByte函数实现了单总线数据的读写操作,严格按照 DS18B20 的通信协议,通过精确的时序控制(如总线拉低、延时等操作)来确保数据的正确传输。

(2) 数据处理模块(datapros函数)

根据温度值的正负情况进行不同处理。如果温度为负,先将其转换为原码形式,然后乘以一个系数(0.0625*100 + 0.5,用于将温度值转换为适合数码管显示的整数部分,保留两位小数的近似值)。如果温度为正,则直接进行相同的系数乘法操作。

最后将处理后的温度值分解为各个数位,分别存储在DisplayData数组中,用于数码管显示。同时提取出百位数字存放在f中,方便后续报警判断。

(3) 数码管显示模块(DigDisplay函数)

通过循环控制 6 个数码管的位选(使用LSA、LS B、LSC引脚),依次将DisplayData数组中的数据发送到数码管的段选引脚(P0口)进行显示。在每次显示一个数码管后,通过调用delay(100)函数进行短暂延时,以实现动态扫描效果,让人眼能够看到稳定的显示内容。最后将P0口设置为0x00,进行消隐操作,防止数码管余晖现象影响显示效果。

(4) 报警模块(main函数中的报警部分

在main函数的循环中,每次获取温度数据并处理后,判断f(温度值的百位数字)是否大于等于 30。如果是,则进入报警模式,通过循环while (i--)控制蜂鸣器引脚(beep)的电平翻转(beep =!beep),并使用delay(10)函数控制翻转的频率,从而产生报警声音。如果温度正常(f < 30),则将蜂鸣器引脚设置为低电平(beep = 0)关闭蜂鸣器。           

三、 实现效果

 

四、总结

1. 通过本次实验,深入了解了 DS18B20 温度传感器的工作原理和单总线通信方式。掌握了如何通过单片机与传感器进行数据交互,包括初始化传感器、发送命令、读取数据等一系列操作,这在嵌入式系统中对于获取外部环境数据是非常重要的技能。

2. 在实验过程中遇到了各种问题,如代码报错、传感器数据读取不准确、数码管显示异常等。通过仔细分析错误提示、查阅资料(如芯片手册文档)、检查硬件连接等方式,逐步排查问题并找到解决方案。这培养了在面对复杂系统问题时的分析和解决能力,学会从软件和硬件两个方面去寻找问题的根源。

3. 例如,在调试传感器通信部分时,可能会遇到初始化失败或数据读取错误的情况。需要仔细检查时序控制是否准确,如总线拉低和拉高的时间、延时函数的参数设置等,通过不断调整这些参数和逻辑来确保通信的稳定可靠。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值