温度传感器3重点解析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2、读取温度值 读取RAM内的温度数据 ds18b20_reset(); ds18b20_write_byte(SKIP_ROM); ds18b20_write_byte(READ_SCRATCHPAD); 五、实时温度采集(读温度)程序设计 初始设置,没有,按缺省 Ds18b20_read_byte() 2次 Ds18b20_write_byte(0xcc) Ds18b20_reset() Ds18b20_write_byte(0x44) Ds18b20_reset() Ds18b20_write_byte(0xcc) Ds18b20_write_byte(0xbe) Delay_nms(800) Ds18b20_reset() Write_byte(0xcc) Ds18b20初始化 从ds18b20读温度 定义int型变量wenduzhi放温度值的高、低8位共16位 2、在LCD上进行显示 void main() { unsigned char xdata str[10]; ds18b20_init(); LCM_Init(); while(1) { ds18b20_read_temp(); sprintf(str,%d.%d,(int)disp_eger,(int)disp_temp.decimal); Write_Command_LCM(0x01); //clear Display_List_Char(0,0,Temperature:); Display_List_Char(1,3,str); } } 任务6 在LCD上显示 画面1:开机画面 画面2: temperature is: × × .× ℃ 画面3: TH is: × × ℃ TL is:× × ℃ 画面2、3通过按键切换 TH、TL分别是程序设定的温度上、下限值,如果低于下限或高于上限,发出扬声器1s周期报警 拓展训练1: 在任务6的基础上,用户可以通过按键调整TH、TL的值 拓展训练2: 在拓展训练2基础上,增加画面4显示时间,并且可以通过按键调节时间 画面2、3、4通过按键切换 * 对DS18B20进行初始化复位操作 DS18B20在检测到t1时刻的上升沿之后,等待60μs,即t1~t2时长。 并在随后的240微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。在图3-2中为虚线所示。 while(DQ) ; //接收到存在脉冲信号,跳出循环 delay_nus(200); 复位过程:要求主机将数据线下拉480~960us,然后释放,ds18b20在总线释放后16~60us内发送一个存在脉冲,主机收到此信号表示复位成功. 初始化程序 void ds18b20_reset() { DQ = 1; DQ = 0;//拉低总线 delay_nus(600); //精确延时在480-960us DQ = 1;//总线释放 while(DQ); //等待存在脉冲,若为高电平,则一直等待 delay_nus(200); } 为了完成一次温度转换功能,我们接着需要分别对ROM、RAM 进行读取操作。 以命令44H为例:执行一次温度转换指令,要向RAM内写入44H=0100 0100 ,命令芯片开始工作。 单线型芯片通信属于串行通信方式,也即是说,在一根数据线上单片机根据时序向芯片写入0100 0100 这一组二进制数,实现转换功能。 既然我们的指令是转换成二进制代码进行读写的,那么我只需知道如何向芯片写入“0”和“1” 即可实现所有命令功能。 2、写时序图 (2)写时间隙 图3-4 a为写“0”时序 b为写“1”时序 a b 时序图分析 从图3-4中,可以看出写时序开始时DQ都为高电平 ,t0时刻为高电平,此时主机认为开始写入数据。 从t0到t1时刻,共计60μs,时间分为2段。 第一个15μs之内应将所需写的位送到总线上。 此时,写入数据“0” DQ = 1; DQ = 0; DSl8B20在t0后15-60us间对总线采样,若低电平写入的位是0,见图3-4 a;若高电平写入的位是1,见图3-3 b 连续写2位数据,间隙应大于1us delay_nus(60); DQ = 1; _nop_(); _nop_(); 写0 void ds18b20_write_bit0() {

文档评论(0)

我是兰花草 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档