求助,ds18b20在数码管显示,代码出错,不知道问题在哪

2020-01-21 21:46发布

以下为错误提示





主程序
#include <reg52.h>
#include "ds18b20.h"
#include "delay.h"
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit dula=P2^6;
sbit wela=P2^7;
int tempis;
void main()
{
while(1)
{
tempis=get_temp();
dula=1;
P0=table[tempis/10];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(5);


dula=1;
P0=table[tempis%10];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(5);
}
}












ds18b20模块头文件
#ifndef __DS28B20_H__
#define __DS28B20_H_
extern uchar get_temp(void);
#endif


C文件
#include "ds18b20.h"
#include "delay.h"
#include <reg52.h>
sbit ds=P2^2;
int temp;


/************************
* 初始化ds18b20
*************************/
void init_ds18b20()
{
int i;
i++;
ds=0;
i=103;
while(i>0)i--;
ds=1;
i=4;
while(i>0)i--;
}




/************************
* 向ds18b20写一个字节
*************************/
void write_byte(uchar dat)
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb)
{
ds=0;
i++;
i++;
ds=1;
i=8;while(i>0)i--;
}
else
{
ds=0;
i=8;while(i>0)i--;
ds=1;
i++;i++;
}
}
}




/************************
* 在ds18b20读一个位
*************************/
bit tempreadbit(void)
{
uint i;
bit dat;
ds=0;i++;
ds=1;i++;i++;
dat=ds;
i=8;while(i>8)i--;
return(dat);
}




/************************
* 在ds18b20读一个字节
*************************/
uchar tempread() //8位构成一个字节
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tempreadbit();
dat=(j<<7)|(dat>>1);
}
return(dat);
}






/************************
* 获取温度
*注释:获取的温度为整数,类型为整型
*************************/
uchar get_temp(void)
{
uchar a,b;
init_ds18b20();
delay(1);
write_byte(0xcc);
write_byte(0x44);
delay(1);


init_ds18b20();
delay(1);
write_byte(0xcc);
write_byte(0xbe);
a=tempread();
b=tempread();
temp=b;
temp<<=8;
temp=temp|a;
temp=temp*0.0625;
return temp;
}












延时函数头文件
#ifndef __DELAY_H__
#define __DELAY_H__
#define uchar unsigned char
#define uint unsigned int
extern void delay(uchar)
#endif


C文件
#include "delay.h"
/************************
* 延时函数
*注释:延时xms
*************************/
void delay(uchar x)
{
int a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。