找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3992|回复: 4
打印 上一主题 下一主题
收起左侧

[求助] DS18b20+LCD1602的显示问题

[复制链接]
跳转到指定楼层
楼主
ID:48440 发表于 2013-3-5 21:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

各位大侠,请问下,我用ds18b20采集温度到单片机,利用LCD1602来显示,可是为什么每次运行时,第一次显示的都是85度,然后再恢复正常,可能是什么原因导致的?以下是主函数部分,我觉得可能出错这这部分,

void main(void)
 {   
   uchar TL;     //储存暂存器的温度低位
      uchar TH;    //储存暂存器的温度高位
      uchar TN;      //储存温度的整数部分
   uchar TD;       //储存温度的小数部分
      uint j;
   Relay=0;
   LcdInitiate();         //将液晶初始化
    delayms(5);       

  if(Init_DS18B20()==1)
     display_error();
  display_explain();
     display_symbol();    //显示温度说明
        display_dot();       //显示温度的小数点
        display_cent();      //显示温度的单位
   while(1)                //不断检测并显示温度
  { 
    flag=0;
    ReadyReadTemp();     //读温度准备
    TL=ReadOneChar();    //先读的是温度值低位
    TH=ReadOneChar();    //接着读的是温度值高位

     TN=TH*16+TL/16;      //实际温度值=(TH*256+TL)/16,即:TH*16+TL/16
                     //这样得出的是温度的整数部分,小数部分被丢弃了
     TD=(TL%16)*10/16;    //计算温度的小数部分,将余数乘以10再除以16取整,
                     //这样得到的是温度小数部分的第一位数字(保留1位小数)
  display_temp1(TN);    //显示温度的整数部分
     display_temp2(TD);    //显示温度的小数部分
  delayms(50);

请大侠帮忙指点指点!!!谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2013-3-6 09:02 | 只看该作者
18b20上电时启动的稍慢,是不是这个原因?你加一点延时试试?
[此贴子已经被作者于2013-3-6 9:03:34编辑过]
回复

使用道具 举报

板凳
ID:48440 发表于 2013-3-6 15:35 | 只看该作者

好的,我试试,谢谢了。

回复

使用道具 举报

地板
ID:96006 发表于 2015-12-3 07:13 | 只看该作者

成功了嘛
回复

使用道具 举报

5#
ID:121694 发表于 2016-5-18 14:31 | 只看该作者
应该是芯片本身默认吧,我的也是
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表