编写程序的时候遇到点问题,请高手赐教

2019-03-24 19:58发布

我在KEIL里编写运行程序的时候有一个错误是:SHT11仿真_2.C(415): error C267: 'Lcd_wdat': requires ANSI-style prototype
不知道怎么改,请高手给点指点,急 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
jxb01033016
1楼-- · 2019-03-25 01:56
'Lcd_wdat' 需要函数原型,

你没有声明Lcd_wdat哦
Alex911
2楼-- · 2019-03-25 02:58

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char code dis1[]={"TEM"};
unsigned char code dis2[]={"HUM"};
#define DATA P0
sbit rs=P2^0;
sbit rw=P2^1;
sbit ep=P2^2;

/********************SHT11********************/

//#include<reg52.h>
//#include<intrins.h>
#include<math.h>
#include<stdio.h>

#define TEM_TEST   0x03//温度检测命令
#define HUM_TEST    0x05//湿度检测命令
#define REG_READ    0x07//读寄存器
#define REG_WRITE   0x06//写寄存器
#define FUNCTION_SET 0x01//设置SHT11的工作精度为8位/湿度 12位温度
//#define uint unsigned int
//#define uchar unsigned char
/**************************
SHT11端口定义
***************************/

sbit SHT11_DATA=P2^6;
sbit SHT11_SCK=P2^5;
uchar flag_tempeture=0;  //显示温度位置的标志
uchar flag_humidity=0;  //显示湿度位置的标志

//uchar dat;
uint i,temp1,temp2,dat=0,count;
float tempeture1;
float RHline,RHtrue;
void delay(uint m)
{
while(m--);
}
/***************************
函数名称:Delay()
函数功能:SHT11内部延时
****************************/
void Delay()
{
 ;
 ;
}

/***************************
函数名称:Delay_Ms()
函数功能:SHT11检测等待延时
函数说明:11ms/55ms/210ms 分别对应8位/12位/14位 测量结果
对应的形参为N 则延时Nms
****************************/
void Delay_Ms(uint ms)
{
 uint i,j;
 for(i=ms;i>0;i--)
  for(j=112;j>0;j--);
}
/**************************
函数功能:SHT11启动时序
***************************/
void SHT11_Start()
{
 SHT11_SCK=1;
 SHT11_DATA=1;
 Delay();
 SHT11_DATA=0;
 Delay();
 SHT11_SCK=0;
 Delay();
 SHT11_SCK=1;
 Delay();
 SHT11_DATA=1;
}

/******************************
函数名称:SHT11_Sendbyte(uchar dat)
函数功能: 向SHT11发送8bite数据
******************************/
void SHT11_Sendbyte(uchar dat)
{
 uchar i;
 SHT11_SCK=0;
 Delay();
 for(i=0;i<8;i++)
 {
  if(dat&0x80)
  {
   SHT11_DATA=1;
   Delay();
  }
  else
  {
   SHT11_DATA=0;
   Delay();
  }
  dat=dat<<1;
  SHT11_SCK=1;
  Delay();
  SHT11_SCK=0;
 }
}
/*********************************
函数名称SHT11_Answer():
函数功能:检测SHT11的响应信号(在第九个时钟周期)
***********************************/
void SHT11_Answer()
{
 SHT11_SCK=1;
 Delay();
 while(SHT11_DATA==1);
 SHT11_SCK=0;
 SHT11_DATA=1;
}

/************************************
函数名称:SHT11_Test_Finish()
函数功能:检测SHT11温湿度检测是否完毕
*************************************/
void SHT11_Test_Finish()
{
 while(SHT11_DATA==1);
}

/************************************
函数名称:SHT11_Receivebyte()
函数功能:从SHT11接收8bite数据
*************************************/
uchar SHT11_Receivebyte()
{
 uchar i;
 
 SHT11_SCK=0;
 Delay();
 for(i=0;i<8;i++)
 { 
  SHT11_SCK=1;
  Delay();
  dat=dat<<1;
  if(SHT11_DATA)
  {
   dat=dat|0x01;
   Delay();
  }
  else
  {
   dat=dat&0xfe;
   Delay();
  }
   SHT11_SCK=0;
  Delay();
 }
 SHT11_DATA=1; //释放数据总线
 return(dat); 
}

/***********************************
函数名称:MCU_Answer()
函数功能:单片机向SHT11发送应答信号
*************************************/
void MCU_Answer()
{
  SHT11_SCK=0;
 Delay();
 SHT11_DATA=0;
 Delay();
 SHT11_SCK=1;
 Delay();
 SHT11_SCK=0;
 Delay();
 SHT11_DATA=1; //释放数据总线 这条指令非常重要 不加的话导致单片机不能读取低8位
}
/***********************************
函数名称:SHT11_End()
当接收两个8byte数据后部接收CRC校验码
************************************/
void SHT11_End()
{
 SHT11_DATA=1;
 SHT11_SCK=1;
 Delay();
 SHT11_SCK=0;
 Delay();
}

/*************************************
函数名称:void SHT11_Write_Register(uchar command ,uchar dat)
函数说明:向SHT11的状态寄存器设置功能
   command为REG_WRITE 0x06写寄存器
   dat为 设置SHT11的功能 可以设置检测的数据位数
***************************************/

void SHT11_Write_Register(uchar command ,uchar dat)
{
 SHT11_Start();
 SHT11_Sendbyte(command);
 SHT11_Answer();
 SHT11_Sendbyte(dat);
 SHT11_Answer();
}


/***************************************
函数名称:uchar SHT11_Read_Register(uchar command)
函数说明:command为REG_READ  0x07//读寄存器
   返回值为状态寄存器的值
   位6显示当前检测完一次数据后电源供电情况
   当位6为0时表明VDD>2.47V 当位6为1时表明VDD<2.47V即电量不足
   位0表明当前的测量分辨率
   当位0为1时表明测量精度:8位/湿度 12位温度
   当位0为0时表明测量精度:12位湿度 14位温度
   默认为0
*******************************************/
uchar SHT11_Read_Register(uchar command)
{
 uchar dat;
 SHT11_Start();
 SHT11_Sendbyte(command);
 SHT11_Answer();
 dat=SHT11_Receivebyte();
 SHT11_End();
 return(dat);
}


/***************************************
函数名称:SHT11_Measure(uchar command,uint time);
函数功能:设置SHT11检测功能,并返回相应的检测结果
函数说明:command形参用于设定温度检测还是湿度检测,
time形参用于设定检测过程中的等待时间,以确定检测结果的位数
11ms/55ms/210ms 分别对应8位/12位/14位
****************************************/
uint SHT11_Measure(uchar command,uchar time)
{
 uint dat=0;
 uchar data_high,data_low;
 SHT11_Start();
 SHT11_Sendbyte(command);
 SHT11_Answer();
 Delay_Ms(time);
 SHT11_Test_Finish();
 data_high=SHT11_Receivebyte();
 MCU_Answer();
 data_low=SHT11_Receivebyte();
 SHT11_End();
 dat=(dat|data_high);
 dat=(dat<<8)|data_low;
 return(dat);
}
/****************************************
函数名称:Convert_Tempeture(uint dat);
函数功能:将检测到的数据转化为相应的温度数据
函数说明:温度转换公式--T=d1+d2*SOt
    公式中的参数d1=-40,d2=0.01
    适用于14位测量精度
*****************************************/
float SHT11_Convert_Tempeture14bit(uint dat)
{
 float tempeture1;
 tempeture1=-40+0.01*dat;
 if(tempeture1>100.0)
 {
  flag_tempeture=1; 
 }
 else if(tempeture1<0.0)
 {
  flag_tempeture=1;
 }
 else
 {
  flag_tempeture=0;
 }
 return(tempeture1);
}

/*****************************************
函数名称:SHT11_Convert_Humidity(uint dat,float temp)
函数功能:将检测到的数据转化为相应的湿度数据
函数说明:相对湿度转换公式-----RHline=C1+C2*SOrh+C3*SOrh*SOrh(检测数据的线性化 SOrh为单片机接收到的数据)
       -----RHtrue=(tempeture-25)*(t1+t2*SOrh)+RHline
    公式中的参数:C1=-4,C2=0,0405,C3=-0.0000028
       t1=0.01,t2=0.00008
   适用于12位测量精度
******************************************/
float SHT11_Convert_Humidity12bit(uint dat,float temp)
{
// float RHline,RHtrue;
 RHline=-4+0.0405*dat-0.0000028*dat*dat;
 RHtrue=(temp-25)*(0.01+0.00008*dat)+RHline;
 if(RHtrue<10.0)
 {
  flag_humidity=1; 
 }
 else
 {
  flag_humidity=0;
 }
 return(RHtrue);
}


/***************检查是否忙*******************/
void checkstate()
{
 uchar dat;
 rs=0;
 rw=1;
 do{
  DATA=0x00;
  ep=1;
  _nop_();
  dat=DATA;
  ep=0;
  dat=0x80&dat;
   }while(!(dat==0x00));
 
}
/**************写命令************************/
sendcommand(uchar com)
{
 checkstate();
 rs=0;
 rw=0;
 DATA=com;
 ep=1;
 _nop_();
 _nop_();
 ep=0;
}

 

bit lcd_bz()
{
bit result;
rs= 0;
rw= 1;
ep= 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (bit)(P0 & 0x80);
ep= 0;
return result;
}
void lcd_wcmd(unsigned char cmd)
{
while(lcd_bz());//判断LCD是否忙碌
rs= 0;
rw= 0;
ep= 0;
_nop_();
_nop_();
P0 = cmd;
_nop_();
_nop_();
_nop_();
_nop_();
ep= 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep= 0;
}
void lcd_pos(unsigned char pos)
{
lcd_wcmd(pos | 0x80);
}
void lcd_wdat(unsigned char dat)
{
while(lcd_bz());//判断LCD是否忙碌
rs= 1;
rw= 0;
ep= 0;
P0 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
ep= 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep= 0;
}
void lcd_init()
{
lcd_wcmd(0x38);
delay(1);
lcd_wcmd(0x0c);
delay(1);
lcd_wcmd(0x06);
delay(1);
lcd_wcmd(0x01);
delay(1);
}

void main(void)
{
 unsigned char i;
 lcd_init();// 初始化LCD
 delay(5);
 lcd_pos(0x01);//设置显示位置
 i = 0;
 while(dis1 != '')
{
  Lcd_wdat();//显示字符
  i++;
}
  lcd_pos(0x42);// 设置显示位置
  i = 0;
  while(dis2 != '')
{
  lcd_wdat(dis2);// 显示字符
  i++;
}
}
有警告,但是可以编译,生成的HEX文件在仿真的时候没有反应是怎么回事啊:????

[ 本帖最后由 Alex911 于 2011-5-18 16:26 编辑 ]
Alex911
3楼-- · 2019-03-25 06:23
求高人指点
jxb01033016
4楼-- · 2019-03-25 10:46

Lcd_wdat();

 

 

 

void lcd_wdat(unsigned char dat)

 

 


一个带参数,一个不带参数....

[ 本帖最后由 jxb01033016 于 2011-5-18 17:03 编辑 ]
jxb01033016
5楼-- · 2019-03-25 13:33
 精彩回答 2  元偷偷看……
Alex911
6楼-- · 2019-03-25 14:44
Lcd_wdat(dis1);//显示字符
显示这个的时候就显示错误,无法编译,但是删掉以后就可以了,不知道怎么回事

一周热门 更多>