求助,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--);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
maimaige
1楼-- · 2020-01-22 00:44
#ifndef __DS28B20_H__
#define __DS28B20_H_
这个地方是错了,但是应该和那个报错关系不大
你是否还记的
2楼-- · 2020-01-22 04:36
我也是才学单片机   数码管还好  DS18B20以前看过
maimaige
3楼-- · 2020-01-22 05:17
把uchar 修改为 unsigned char 试试
techbaby
4楼-- · 2020-01-22 08:16
 精彩回答 2  元偷偷看……
jufr12315
5楼-- · 2020-01-22 10:18
楼上说的没错
n0831
6楼-- · 2020-01-22 13:25
5楼正解

一周热门 更多>