网站大量收购闲置独家精品文档,联系QQ:2885784924

基于51单片机的测温的最小系统设计.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数字温度计 XXX 10级自动化一班 第一章 设计目的——————————————3 第二章 设计内容————————————— 3 第三章 分析———————————————7 第四章 示例程序——————————————7 第五章 总结———————————————13 设计目的: 利用51单片机和ds18b20等元件设计一个实时的测量温度和报警的小系统。 系统可以通过数码管显示实时的温度值,显示的温度的精度是0.01℃。然后,还可以利用按键进行最高温度值和最低温度值的设定,当温度超过设定的最高温度值的时候,蜂鸣器会响,并且会有一个led灯亮起;当温度值低于设定的最低温度值的时候,蜂鸣器会响,但是led灯不会亮。 设计内容: 温度计电路设计总体设计方框图如图1所示,控制器采用单片机,温度传感器采用DS18B20, 图1 温度传感器 DS18B20与8051单片机连接非常简单,只需将DS18B20信号线与单片机一位I/O线相连,且一位I/O线可连接多个DS18B20,以实现单点或多点温度测量。 图2 Ds18b20需要严格的协议以确保数据的完整性。协议包括集中单线信号类型:复位脉冲.存在脉冲.写0.写1.读0和读1。所有这些信号,处存在脉冲外,都是由总线控制器发出的。和ds18b20间的任何通讯都是需要以初始化序列开始,初始化序列见图3,一个复位脉冲跟着一个存在脉冲表明ds18b20已经准备好发送和接收数据。 图3 Ds18b20的读写时序图如图4所示, Ds18b20的几个常用的功能命令如下: CCH 跳过ROM指令 44H 温度转换指令 BEH 读SRAM 4EH 写SRAM 分析: 程序一开始测得温度并储存,然后对按键1进行判断,若按键1未按下则直接跳到第四步; 若按键1按下,则开始设置最高温度,然后再判断按键2(3)是否按下,若按下,则对应设置十(个)位。然后再判断按键1是否按下,若按下则执行第三步,否则在设定最高温度的程序里面不停循环。 若按键1按下,则开始设置最低温度,然后再判断按键2(3)是否按下,若按下,则对应设置十(个)位。然后再判断按键1是否按下,若按下则执行第四步,否则在设定最低温度的程序里面不停循环。 最后,判断实时温度是否越过界限,若越过则按不同的情况进行报警,并对实时温度进行显示。 示例程序: #includereg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int uchar duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,//无小数点 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//有小数点 uchar wei[]={0xf7,0xfb,0xfd,0xfe};//位选 uchar table2[4]; sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2; sbit DQ=P3^7; sbit led=P1^4; sbit speaker=P1^3; int i,j,m=0; float temp1[]={0,30,25}; void Delay(uchar ms) { uchar i,j; for(j=0;jms;j++) for(i=0;i160;i++); } void fen() { int temp=temp1[m%3]; table2[3]=temp/1000; table2[2]=temp/100-table2[3]*10; table2[1]=temp/10-temp/100*10; table2[0]=temp-temp/10*10; } void charge() { if(temp1[0]=100*temp1[2]) { speaker=0; } else { if(temp1[0]=100*temp1[1]) { speaker=0; led=0; } else { led=1; speaker=1; } } } //**判断按键的三个函数 uchar pkey1() { if(key1==0) { Delay(10); if(key1==0) { while(!key1); return 1; } } return 0; } uchar pkey2() { if(key2==0) { Delay(10); if(k

您可能关注的文档

文档评论(0)

管理学科 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档