搜索
bottom↓
回复: 9

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

[复制链接]

出0入0汤圆

发表于 2014-8-25 12:16:09 | 显示全部楼层 |阅读模式
以下为错误提示





主程序
#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--);
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2014-8-25 12:25:58 | 显示全部楼层
#ifndef __DS28B20_H__
#define __DS28B20_H_
这个地方是错了,但是应该和那个报错关系不大

出0入0汤圆

发表于 2014-8-25 12:26:20 | 显示全部楼层
我也是才学单片机   数码管还好  DS18B20以前看过

出0入0汤圆

发表于 2014-8-25 12:27:51 | 显示全部楼层
把uchar 修改为 unsigned char 试试

出20入70汤圆

发表于 2014-8-25 12:34:08 | 显示全部楼层
不认识uchar而已。

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

出20入26汤圆

发表于 2014-8-25 13:00:36 | 显示全部楼层
楼上说的没错

出0入42汤圆

发表于 2014-8-25 13:34:39 来自手机 | 显示全部楼层
5楼正解

出0入0汤圆

 楼主| 发表于 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

出0入0汤圆

发表于 2014-8-25 21:54:29 | 显示全部楼层
规范一下
  1. #define uchar unsigned char
  2. #define uint unsigned int
复制代码

改为
  1. typedef uchar unsigned char
  2. typedef uint unsigned int
复制代码

出0入0汤圆

发表于 2014-11-2 09:42:46 | 显示全部楼层
又见uchar
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 12:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表