- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机课程设计报告(数字温度计)解读
单片机课程设计报告
课题:基于单片机的设计 方案设计 系统的硬件设计.1 主控制器.2 显示电路
.3 温度传感器工作原理.4 温度传感器接口电路 系统的软件设计.1 程序.2 温度测量
3.3 数码管显示
4 系统的试与总结
附录1 原理图附录2 源程序清单
●利用温度传感器(DS18B20)测量某一点环境温度
●测量范围为-55℃~+125℃,精度为±0.5℃
●用数码管进行实际温度值显示
采用AT89S52单片机P3 .5口控制温度传感器DS18B20的温度测量,以四位数码感形式输出测量温度
图 DS18B20与单片机接口原理
图2.2 总体设计方框图
2 系统的硬件设计.1 主控制器
图3.1 时钟电路与复位电路
2.2显示电路
显示采用4位数码管,图3.2.1为数码管段驱动,图3.2.2为数码管位驱动,图3.2.3为温度显示电路
图3.2.1数码管段驱动
图3.2.2数码管位驱动
图3.2.3温度显示电路
2.3 温度传感器工作原理
? 简单的多点分布应用
? 无需外部器件
? 可通过数据线供电
? 零待机功耗
? 测温范围-55~+125℃,以0.5℃递增。华氏器件-67~+2570F,以0.90F 递增
? 温度以9 位数字量读出
? 温度数字量转换时间200ms(典型值)
? 用户可定义的非易失性温度报警设置
? 报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件
DS18B20的测温原理如图所示,图中低温度系数晶振的振荡频率受温度的影响很小用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 ℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55 ℃所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器的预置值减到0时温度寄存器的值将加1,减法计数器 1的预置将重新被装入减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温图2中的斜率累加器用于补偿和修正测温过程中的非线性其输出用,于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就DS18B20的测温原理。
图3.3.3 DS18B20测温原理图
在正常测温情况下,DS1820的测温分辨力为0.5℃,可采用下述方法获得高分辨率的温度测量结果:首先用DS1820提供的读暂存器指令(BEH)读出以0.5℃为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度的整数部分Tz,然后再用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。考虑到DS1820测量温度的整数部分以0.25℃、0.75℃为进位界限的关系,实际温度Ts可用下式计算:
2.4 温度传感器接口电路
图3.4.1温度传感器接口电路 系统的软件设计.1 主程序.2 温度测量
3.2.1 初始化DS18B20
/*--------------- 初始化DS18B20 ----------------*/
void dsreset(void) //send reset and initialization command初始化DS18B20
{
uint i;
DS=0;
i=103;
while(i0)
i--;
DS=1;
i=4;
while(i0)
i--;
}
3.2.2 DS18B20读字节
/*---------------- 读取一位数据 ----------------*/
bit tmpreadbit(void) //read a bit读一位
{
uint i;
bit dat;
DS=0;
i++; //i++ for delay小延
文档评论(0)