求助,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--);
}
#ifndef __DS28B20_H__
#define __DS28B20_H_
这个地方是错了,但是应该和那个报错关系不大 我也是才学单片机{:lol:} 数码管还好DS18B20以前看过 把uchar 修改为 unsigned char 试试 不认识uchar而已。
包含头文件时,将delay.h放在ds18b20之前即可解决问题。 楼上说的没错 5楼正解 techbaby 发表于 2014-8-25 12:34
不认识uchar而已。
包含头文件时,将delay.h放在ds18b20之前即可解决问题。
改了之后出现SRC\DS18B20.H(3): error C158: '_delay': function contains unnamed parameter 规范一下
#define uchar unsigned char
#define uint unsigned int
改为
typedef uchar unsigned char
typedef uint unsigned int 又见uchar
页:
[1]