微控制器系统的设计和的应用.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序流程 初始化DS18B20 跳过ROM匹配 开始温度转换 转换结束了否? 初始化DS18B20 跳过ROM匹配 读温度值 结束 开始 Y N 1.初始化DS18B20 2.发出跳过ROM的操作(CCH)命令 3.发出温度转换(44H)命令 4.延时等待转换完 5.初始化DS18B20 6.发出跳过ROM的操作(CCH)命令 7.发出读温度(BEH)命令 8.把温度(两个字节)读出保存起来 9.数据转换,送数码管显示 每个步骤具体化: 1.初始化DS18B20 init_ds18b02(void); 2.发出跳过ROM的操作(CCH)命令 if(presence==0) //DS18B20初始化成功 {write_byte(0xcc); 3.发出温度转换(44H)命令 write_byte(0x44); 4.延时等待转换完 delay_8us(500); 5.初始化DS18B20 init_ds18b02(void) 6.发出跳过ROM的操作(CCH)命令 write_byte(0xcc); 7.发出读温度(BEH)命令 write_byte(0xBE); 8.把温度(两个字节)读出保存起来 temp[0]=read_byte(); //按顺序读出温度低8位 temp[1]=read_byte(); //温度高8位 //temp[]是事先定义的数组,用于存放读取的温度 9.数据转换,送数码管显示 如何数据转换? 假设读过来的温度数字量 temp[0]=0x12 低8位 temp[1]=0x04 高8位 转换思路:分离出温度的整数位、小数位 小数位m: temp[0]的低4位 0010*0.0625=0.125=0.1(四舍五入) 同理推出从0000-1111对应的四舍五入的温度小数值 0000*0.0625=0.0=0.0(四舍五入) 0001*0.0625=0.0625=0.1(四舍五入) 0010*0.0625=0.125=0.1(四舍五入) 0011*0.0625=0.1875=0.2(四舍五入) 0100*0.0625=0.25=0.3(四舍五入) ……… 1111*0.0625=0.9375=0.9(四舍五入) 写成数组: di[]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; 可以把以temp[0]的低4位去查询数组di,即可得到0010对应的小数点位的值,即 m=temp[0]0x0f; disp[0]=di[m]; ( disp[]是事先定义的数组,用来存放温度小数点位、个位、十位值的) 读过来的温度数字量 temp[0]=0x12 低8位 temp[1]=0x34 高8位 整数位n: temp[1]的低四位, temp[0]的高4位 把两个合并成一个8位数即可 n=((temp[0]0xf0)4)|((temp[1]0x0f)4); 整数位十位: disp[2]=n/10; 整数位个位: disp[1]=n%10; 主程序设计: void main(void) { while(1) { read_tem(); //刚才讲的1-8步 Disp_Temp(); //刚才讲的9步 } } void read_tem(void) //读取温度(1-8步 ) { init_ds18b02(); //1 if(presence==1) //2 { beep();good=0;} //DS18B20不正常,蜂鸣器报警 else { good=1; write_byte(0xcc); //跳过ROM write_byte(0x44); //3开始温度测

文档评论(0)

134****9146 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档