4410|10

70

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

新手学习之温度传感器程序 [复制链接]

找了一天了,是在找不出来哪儿错了,我是看天狼星编程的,没办法了,只能求助各位大神了。大家有空就请帮帮忙吧,纠结死我了

温度传感器正常,我用开发板的hex文件试过。

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit dq=P1^3;
uchar temp;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f};

void delay(uchar t)
{
       while(t--);
}

/*初始化函数*/
void init()
{
 uchar n;
 dq=1;
 delay(8);
 dq=0;
 delay(80);
 dq=1;
 delay(8);
 n=dq;
 delay(4);
}
/*写一个字节函数*/
void write_byte(uchar date)
{
    uchar i;
 for(i=0;i<8;i++)
 {
      dq=0;
      dq=date&0x01;
      delay(4);
      dq=1;
      date>>=1;
 }
 delay(4);

}
/*读一个字节函数*/
uchar read_byte()
{
 uchar i,value;
 for(i=0;i<8;i++)
 {
      dq=0;
      value>>=1;
      dq=1;
      if(dq)
      value=value|0x80;
     delay(4);
 }
 return value;
}

        /*读温度函数*/
uchar readtem()
{
    uchar a,b;
    init();
    write_byte(0xcc);//跳过ROM
    write_byte(0x44);//开始采样测温
   delay(200);
    //此时所测温度已放入寄存器中,可以读取
   init();
   write_byte(0xcc);
   write_byte(0xbe);//读取数据 
   a=read_byte(); //暂存器低位,后四位为小数点
   b=read_byte(); //高位,前五位为符号位
   b<<=4;
   b+=(a&0xf0)>>4;//b的前四位与a的后四位组成一个字节,8位
   return b; 
}

/*数码管显示函数*/
void display()
{
 P2=0;
 P0=table[temp/10];
 delay(100);
 P2=1;
 P0=table[temp%10];
 delay(100);
}
/*主函数*/
void main()
{
  while(1)
  {
       temp=readtem();
       display();
  }

}

[ 本帖最后由 Learner_new 于 2012-1-31 17:30 编辑 ]
此帖出自51单片机论坛

最新回复

我做的用的18b20温度总不是很准确是怎么回事呢   有没有校准这一说  不会是和准确的温度值对比一下减去一个数吧  详情 回复 发表于 2012-2-2 15:54
点赞 关注
 

回复
举报

315

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

能不能具体说说什么样的错误

此帖出自51单片机论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(高级)

板凳
 

回复 沙发 孤獨の快樂 的帖子

哦,对啊,忘了说了,数码管只能显示第二个,而且数值不会随温度变化。
此帖出自51单片机论坛
 
 
 

回复

315

帖子

0

TA的资源

五彩晶圆(初级)

4
 
确定是P1^3接的温度传感器吗?
此帖出自51单片机论坛
 
 
 

回复

165

帖子

2

TA的资源

纯净的硅(高级)

5
 

回复 楼主 Learner_new 的帖子

首先明显错误,数码管动态扫描不对。按位去扫描,不能整体操作
此帖出自51单片机论坛
 
 
 

回复

315

帖子

0

TA的资源

五彩晶圆(初级)

6
 

原帖由 15075039ZQ 于 2012-1-31 20:26 发表 首先明显错误,数码管动态扫描不对。按位去扫描,不能整体操作

P2接译码器,没啥问题吧

此帖出自51单片机论坛
 
 
 

回复

187

帖子

0

TA的资源

一粒金砂(中级)

7
 
呵呵,看别人的代码还真的累
此帖出自51单片机论坛
 
个人签名油画|http://www.chndafen.com
 
 

回复

70

帖子

0

TA的资源

一粒金砂(高级)

8
 

回复 5楼 15075039ZQ 的帖子

接38译码器  可以的吧
此帖出自51单片机论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(高级)

9
 

回复 4楼 孤獨の快樂 的帖子

确定的
此帖出自51单片机论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(高级)

10
 

回复 6楼 孤獨の快樂 的帖子

经过不懈的努力,终于找到错误啦,原来是初始化函数中的延时错啦,我给它改了下就好了,也可以显示,也可以变化  哈哈  谢谢啦  如下:
void init()
{
        dq=1;
        delay(1);
        dq=0;
        delay(110);
        dq=1;
        delay(30);
        if(dq==0)
          led=0;
        delay(200);
       
}
此帖出自51单片机论坛

赞赏

1

查看全部赞赏

 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

11
 
我做的用的18b20温度总不是很准确是怎么回事呢   有没有校准这一说  不会是和准确的温度值对比一下减去一个数吧
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表