打印

DS18B20测温度在数码管显示不出来

[复制链接]
1828|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
周炎33|  楼主 | 2014-7-23 14:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新手学习51单片机,虽然编译没问题,可是烧到板子里没反应,不知道是哪里出了问题,求指教  #include<reg51.h>
   #include<math.h>
   #include<intrins.h>



        unsigned char code tab[]={0x3f,0x06,0x5b,
   0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39
   ,0x5e,0x79,0x71,0x00,0x40};
   sbit DQ=P3^3;
   

   unsigned char dat;
   unsigned char tempL=0;
           unsigned char tempH=0;
        float temperature;

   



void delay(unsigned int count){
unsigned int i;
i=0;
while(i<count){
i++;

}return;
}


void delay1(void){
int k;
for(k=0;k<400;k++);
}




void display(int k){
P2=0xfe;
P0=tab[k/1000];
delay1();
P2=0xfd;
P0=tab[k%1000/100];
delay1();
P2=0xfb;
P0=tab[k%100/10];
delay1();
P2=0xf7;
P0=tab[k%10];
delay1();
P2=0xff;}


void init(){
unsigned char x=0;
DQ=1;
delay(8);
DQ=0;
delay(85);
DQ=1;
delay(14);
}


unsigned char readone(){
unsigned char i=0;
unsigned char dat=0;
for(i=8;i>0;i--){
DQ=1;
delay(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ){
dat|=0x80;
delay(4);
}
}return(dat);
}

void  writeone(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);}


readtem(void){
init();
writeone(0xcc);
writeone(0x44);
delay(125);
init();
writeone(0xcc);
writeone(0xbe);
tempL=readone();
tempH=readone();
temperature=((tempH*256)+tempL)*0.0625;
delay(200);
return(temperature);

}


void main(){
float i;
while(1){
i=readtemperature();
display(i);}}

相关帖子

沙发
ayb_ice| | 2014-7-23 15:57 | 只看该作者
编译没有错只能说明基本语法没有错而已

使用特权

评论回复
板凳
wangch_sh| | 2014-7-23 16:03 | 只看该作者
又是时序问题。

使用特权

评论回复
地板
ayb_ice| | 2014-7-23 16:57 | 只看该作者
这种总线读一次数据需要很长时间,
读数据与显示都在主循环完成,肯定显示闪烁的,

显示必须置于定时中断中完成

使用特权

评论回复
5
qq4988| | 2014-7-23 17:03 | 只看该作者
对,放在定时器中断中进行显示

使用特权

评论回复
6
ZG11211| | 2014-7-23 20:30 | 只看该作者
等待温度转换完成的时间是否足够?请仔细看18B20的资料。

使用特权

评论回复
7
xg3469| | 2014-7-23 21:17 | 只看该作者
根据晶体振荡器的频率调整延时程序。

使用特权

评论回复
8
zyt2014| | 2014-7-26 08:53 | 只看该作者
我觉得时序有点问题,当初我写温度传感的时候也搞了很久。。
显示程序最好改一下。

使用特权

评论回复
9
liu1004010308| | 2014-8-3 21:16 | 只看该作者
wenku.baidu.com/view/55976e0a03d8ce2f00662323.html[/url]你参考下第九十例

使用特权

评论回复
10
lichenglei99| | 2014-8-4 23:02 | 只看该作者
多试试。

使用特权

评论回复
11
灯火阑珊处| | 2014-8-5 09:19 | 只看该作者
18b20确实不容易啊,找个例程好好看看

使用特权

评论回复
12
ningling_21| | 2014-8-5 09:59 | 只看该作者
灯火阑珊处 发表于 2014-8-5 09:19
18b20确实不容易啊,找个例程好好看看

Ds18b20.rar (1.71 KB)

可以参考这个

使用特权

评论回复
13
junle| | 2014-8-5 14:27 | 只看该作者
temperature最好定义成unsigned float形式
你定义的变量尽量都是unsigned形式如果你没有测试零度以下的话
还有看看DS18b20的datasheet比较好!

使用特权

评论回复
14
longmaodo| | 2014-8-5 15:45 | 只看该作者
看看你的DS18B20程序吧  你这时间有点不对  
记得我调试的时候第一次初始化后需要很长时间才能回来值  得几十到一百MS
手册中好像有说 你这延时有点短呀

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

7

帖子

0

粉丝