皇阿宝 发表于 2014-8-25 12:16:09

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

以下为错误提示





主程序
#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;
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(5);


dula=1;
P0=table;
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--);
}

maimaige 发表于 2014-8-25 12:25:58

#ifndef __DS28B20_H__
#define __DS28B20_H_
这个地方是错了,但是应该和那个报错关系不大

你是否还记的 发表于 2014-8-25 12:26:20

我也是才学单片机{:lol:}   数码管还好DS18B20以前看过

maimaige 发表于 2014-8-25 12:27:51

把uchar 修改为 unsigned char 试试

techbaby 发表于 2014-8-25 12:34:08

不认识uchar而已。

包含头文件时,将delay.h放在ds18b20之前即可解决问题。

jufr12315 发表于 2014-8-25 13:00:36

楼上说的没错

n0831 发表于 2014-8-25 13:34:39

5楼正解

皇阿宝 发表于 2014-8-25 14:12:13

techbaby 发表于 2014-8-25 12:34
不认识uchar而已。

包含头文件时,将delay.h放在ds18b20之前即可解决问题。

改了之后出现SRC\DS18B20.H(3): error C158: '_delay': function contains unnamed parameter

jzhwang 发表于 2014-8-25 21:54:29

规范一下
#define uchar unsigned char
#define uint unsigned int
改为
typedef uchar unsigned char
typedef uint unsigned int

hantnt 发表于 2014-11-2 09:42:46

又见uchar
页: [1]
查看完整版本: 求助,ds18b20在数码管显示,代码出错,不知道问题在哪