搜索
bottom↓
回复: 17

求大神们看看我的数字温度计哪有问题,谢谢了

[复制链接]

出0入0汤圆

发表于 2012-9-21 18:46:09 | 显示全部楼层 |阅读模式
#include<reg51.h>
#include<absacc.h>
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90} ;
sbit DQ=P3^3 ;
unsigned  char tempL=0         ;
unsigned char tempH=0;
unsigned char flag=0;
float temperature;
void delay(unsigned int time)
{
   
   
  while( time--);
   
}
void delay1(void)
{
   int k;
   for(k=0;k<600;k++);
}
void display(int k)
{
  P2=0xfe;
  P1=tab[k/1000];
  delay1();
  P2=0xfd;
  P1=tab[k%1000/100];
  delay1();
  P2=0xfb;
  P1=tab[k%100/10];
  delay1();
  P2=0xf7;
  P1=tab[k%10];
  delay1();
  P2=0xff;
}
Init_DS18B20(void)
{
  unsigned char x=0;
  DQ=1;
  delay(8);
  DQ=0;
  delay(55);

  x=DQ;
  delay(100);
  return x;
}
ReadOneChar(void)
{                                                                                       
  unsigned char i=0;
  unsigned char dat=0;
  unsigned char n;
  for(i=8;i>0;i--)
  {
   
        DQ=0;
        n=2;
        while(n--);
        dat>>=1;
        DQ=1;
        if(DQ)
        dat|=0x80;
        delay(4);
  }
  return(dat);
}
WriteOneChar(unsigned char dat)
{
  unsigned char i=0;
  for(i=8;i>0;i--)
  {
    DQ=0;
        DQ=dat&0x01;
        delay(5);
        DQ=1;
        dat>>=1;
  }
  delay(4);
}
ReadTemperature(void)
{
  Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0x44);
delay(12500);
  Init_DS18B20();
   WriteOneChar(0xcc);
WriteOneChar(0xbe);
tempL=ReadOneChar();
  tempH=ReadOneChar();
  temperature=((tempH*256)+tempL)*0.0625;
/*if(tempH&0xfc)
{
        flag=1;
        temperature=((tempH<<8)|tempL);
        temperature=((!temperature)+1);
        temperature*=0.0625;
}
else
{
        flag=0;
        temperature=((tempH<<8)|tempL)*0.0625;
} */
  delay(20000);
  return(temperature);
}
void main()
{
  float i;
  while(1)
  {
   i=ReadTemperature();
   display(i);                                                                                                               
  }
}
电路仿真一直出不来结果,请大家看下程序哪有问题,很急,谢谢了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-9-21 22:31:48 | 显示全部楼层
18b20 关键看时序,用仿真看一下DQ脚时序,和要求的一样么

出0入0汤圆

发表于 2012-9-21 22:36:40 | 显示全部楼层
找个正常能用的一套,再改到你的硬件条件查找差异所在,,

出0入0汤圆

 楼主| 发表于 2012-9-22 20:16:41 | 显示全部楼层
lihw2@ 发表于 2012-9-21 22:31
18b20 关键看时序,用仿真看一下DQ脚时序,和要求的一样么

时序花了老半天改了 ,感觉也对了,可是还是不显示温度值,困惑死了 ,哎

出0入0汤圆

 楼主| 发表于 2012-9-22 20:19:07 | 显示全部楼层
jetli 发表于 2012-9-21 22:36
找个正常能用的一套,再改到你的硬件条件查找差异所在,,

硬件还没弄呢,想在电脑上仿真一下,可是一直不出结果,哎,眼瞅着就要交作品了,啊啊啊

出0入0汤圆

发表于 2012-9-22 20:38:53 | 显示全部楼层
先测试显示是不是正常 然后在一级级往后测

出0入0汤圆

发表于 2012-9-22 20:44:48 | 显示全部楼层
把仿真工程代码和C51 工程打压缩包传上来,帮你调试一下吧

出0入0汤圆

发表于 2012-9-22 20:59:12 来自手机 | 显示全部楼层
仿真不出结果也是正常的,仿真不能全信。我以前的程序仿真不能通过,硬件可以。

出0入0汤圆

 楼主| 发表于 2012-9-22 23:01:38 | 显示全部楼层
ksws0482846 发表于 2012-9-22 20:59
仿真不出结果也是正常的,仿真不能全信。我以前的程序仿真不能通过,硬件可以。 ...

哦 可是 仿真不过关 不敢弄硬件呀 而且 还要弄个电子时钟呢 还没开始弄呢

出0入0汤圆

 楼主| 发表于 2012-9-22 23:07:52 | 显示全部楼层
hujian2288 发表于 2012-9-22 20:44
把仿真工程代码和C51 工程打压缩包传上来,帮你调试一下吧

谢谢了 全靠你了 我们是初学者 弄了好长时间都没结果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-9-22 23:10:19 | 显示全部楼层
Garbage614 发表于 2012-9-22 20:38
先测试显示是不是正常 然后在一级级往后测

没听明白,你可以说的具体点吗?

出0入0汤圆

 楼主| 发表于 2012-9-22 23:15:39 | 显示全部楼层
lihw2@ 发表于 2012-9-21 22:31
18b20 关键看时序,用仿真看一下DQ脚时序,和要求的一样么

初始化的时序应该没问题吧,用传回来的值检验了下对着呢,可是用kell调试的时候温度高八节和低八节的传回来的都是0xff,然后电路仿真数码管就显示全零,这是什么问题?

出0入0汤圆

发表于 2012-9-23 00:50:21 | 显示全部楼层
本帖最后由 hujian2288 于 2012-9-23 01:41 编辑

void main()
{
  float i;
  while(1)
  {
   i=ReadTemperature();
   display(0x0011);                                                                                                               
  }
}
你试试,好像这个显示都不对,是不是数码管类型选错了


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-9-23 04:38:34 | 显示全部楼层
这个是修改过的,你看一下吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-9-23 13:34:35 | 显示全部楼层
hujian2288 发表于 2012-9-23 04:38
这个是修改过的,你看一下吧

刚试了一下,当温度超过一百度的时候百位的数不显示,还有三极管可以不用了是吧?

出0入0汤圆

 楼主| 发表于 2012-9-23 13:43:43 | 显示全部楼层
hujian2288 发表于 2012-9-23 00:50
void main()
{
  float i;

刚把我的电路图改了下,连得是P33口,把你给的主函数输进去,仿真的时候确实还是有问题,对了,问你一下,我们到底哪里出问题了,你的程序看不太懂,给仔细说说吧,是时序问题吗?还是还有别的什么问题?谢谢你啊!

出0入0汤圆

发表于 2012-9-23 23:49:10 | 显示全部楼层
我的程序没有什么看不懂的,首先P33你接到P32上这是个绝对的错误,其次,显示的延时(视觉的延时)和去读温度的延时要有一定的比例。超过百位显示有点乱,这个我已经努力试过了,我想,你也得做点事情吧,呵呵

出0入0汤圆

 楼主| 发表于 2012-9-24 21:37:04 | 显示全部楼层
hujian2288 发表于 2012-9-23 23:49
我的程序没有什么看不懂的,首先P33你接到P32上这是个绝对的错误,其次,显示的延时(视觉的延时)和去读温 ...

哦  谢谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 22:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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