03101122 发表于 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 ;
unsignedchar 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;
delay1();
P2=0xfd;
P1=tab;
delay1();
P2=0xfb;
P1=tab;
delay1();
P2=0xf7;
P1=tab;
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);                                                                                                               
}
}
电路仿真一直出不来结果,请大家看下程序哪有问题,很急,谢谢了!

lihw2@ 发表于 2012-9-21 22:31:48

18b20 关键看时序,用仿真看一下DQ脚时序,和要求的一样么

jetli 发表于 2012-9-21 22:36:40

{:shocked:} 找个正常能用的一套,再改到你的硬件条件查找差异所在,,

03101122 发表于 2012-9-22 20:16:41

lihw2@ 发表于 2012-9-21 22:31 static/image/common/back.gif
18b20 关键看时序,用仿真看一下DQ脚时序,和要求的一样么

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

03101122 发表于 2012-9-22 20:19:07

jetli 发表于 2012-9-21 22:36 static/image/common/back.gif
找个正常能用的一套,再改到你的硬件条件查找差异所在,,

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

Garbage614 发表于 2012-9-22 20:38:53

先测试显示是不是正常 然后在一级级往后测

hujian2288 发表于 2012-9-22 20:44:48

把仿真工程代码和C51 工程打压缩包传上来,帮你调试一下吧

ksws0482846 发表于 2012-9-22 20:59:12

仿真不出结果也是正常的,仿真不能全信。我以前的程序仿真不能通过,硬件可以。

03101122 发表于 2012-9-22 23:01:38

ksws0482846 发表于 2012-9-22 20:59 static/image/common/back.gif
仿真不出结果也是正常的,仿真不能全信。我以前的程序仿真不能通过,硬件可以。 ...

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

03101122 发表于 2012-9-22 23:07:52

hujian2288 发表于 2012-9-22 20:44 static/image/common/back.gif
把仿真工程代码和C51 工程打压缩包传上来,帮你调试一下吧

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

03101122 发表于 2012-9-22 23:10:19

Garbage614 发表于 2012-9-22 20:38 static/image/common/back.gif
先测试显示是不是正常 然后在一级级往后测

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

03101122 发表于 2012-9-22 23:15:39

lihw2@ 发表于 2012-9-21 22:31 static/image/common/back.gif
18b20 关键看时序,用仿真看一下DQ脚时序,和要求的一样么

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

hujian2288 发表于 2012-9-23 00:50:21

本帖最后由 hujian2288 于 2012-9-23 01:41 编辑

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


hujian2288 发表于 2012-9-23 04:38:34

这个是修改过的,你看一下吧

03101122 发表于 2012-9-23 13:34:35

hujian2288 发表于 2012-9-23 04:38 static/image/common/back.gif
这个是修改过的,你看一下吧

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

03101122 发表于 2012-9-23 13:43:43

hujian2288 发表于 2012-9-23 00:50 static/image/common/back.gif
void main()
{
float i;


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

hujian2288 发表于 2012-9-23 23:49:10

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

03101122 发表于 2012-9-24 21:37:04

hujian2288 发表于 2012-9-23 23:49 static/image/common/back.gif
我的程序没有什么看不懂的,首先P33你接到P32上这是个绝对的错误,其次,显示的延时(视觉的延时)和去读温 ...

哦谢谢!
页: [1]
查看完整版本: 求大神们看看我的数字温度计哪有问题,谢谢了