找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9374|回复: 0
打印 上一主题 下一主题
收起左侧

求大神指教 error C267: 's_write_byte': requires ANSI-style prototype程序编译...

[复制链接]
跳转到指定楼层
楼主
ID:75298 发表于 2015-3-25 13:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
编译以后出现下面的错误  求大神解答啊  错误在下面

#include <reg51.h>
#include <intrins.h>
#include <stdio.h>
#include <string.h>
#include  <DCP.h>
#define uchar unsigned char
#define uint unsigned int
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef bit BOOL ;
int TH,TL; float HH,HL;//温湿度上下限(全局变量)
sbit buzzer = P2^4; //蜂鸣器
// LM016L相关控制信号及变量
sbit rs = P2^0;
sbit rw = P2^1;
sbit ep = P2^2;
BYTE dis1[16];
BYTE dis2[16];
BYTE dis3[16];
// EEPROM相关控制信号及变量
sbit DATA = P1^6;
sbit SCK  = P1^5;   //P1.5模拟时钟线;P1.6模拟数据线
sbit WP   = P1^4;
// 按键相关控制信号及变量
sbit K1 = P1^0;  //设定键
sbit K2 = P1^1;  //光标右移键
sbit K3 = P1^2;  //循环加1键
sbit K4 = P1^3;  //确定键


// SHT-10 相关控制信号及变量
enum {TEMP,HUMI};
unsigned char Tem[2];
unsigned char Hum[2];
uchar showbuf[6];
uchar ack_bit;           //IIC总线前面已定义
//温湿度传感器SHT-10地址定义
#define noACK 0
#define ACK   1
   //地址  命令  读/写
#define STATUS_REG_W 0x06   //000   0011    0
#define STATUS_REG_R 0x07   //000   0011    1
#define MEASURE_TEMP 0x03   //000   0001    1
#define MEASURE_HUMI 0x05   //000   0010    1
#define RESET        0x1e   //000   1111    0

//EEPROM地址定义

//固定  器件地址  读/写

#define OP_READ  0xa3   //1010    001       1
#define OP_WRITE 0xa2   //1010    001       0
#define TemH  addr1
#define TemL  addr2
#define HumH  addr3
#define Huml  adda4    //为EEPROM中上下限存放的单元重命名

//延时子程序
//若机器周期为1us,则本延时程序为延时x(ms)
void delay(BYTE x)
{      
BYTE i;
while(x--)
{
  for(i = 0; i< 250; i++)
   {  _nop_();
      _nop_();
      _nop_();
      _nop_();     }        
   }      
  }

// SHT-10 启动传输子程序
void s_transstart(void)
{
DATA=1; SCK=0;                   //Initial state
_nop_();
SCK=1;
_nop_();
DATA=0;
_nop_();
SCK=0;
_nop_();
_nop_();
_nop_();
SCK=1;
_nop_();
DATA=1;
_nop_();
SCK=0;                      }

// SHT-10 连接复位子程序
void s_connectionreset(void)
{
unsigned char i;
DATA=1; SCK=0;                    //Initial state
for(i=0;i<9;i++)                  //9 SCK cycles
   {
      SCK=1;
      SCK=0;   }
      s_transstart();             //transmission start
                          }

// 读IIC总线子程序
char read_IIC(unsigned char ack)   //ack=1或0
{
unsigned char i,read_data=0;
DATA=1;                           //释放数据线
for (i=0x80;i>0;i/=2)             //高位为1,循环右移
{
   SCK=1;                          
   if (DATA) read_data=(read_data | i);        
   SCK=0;                     

}
DATA=!ack;                  
SCK=1;                             
_nop_();
_nop_();
_nop_();                              
SCK=0;         
DATA=1;                                 //释放数据线
return read_data;                          
}

// 写IIC总线子程序
char write_IIC(unsigned char write_data)
{
unsigned char i,ack_bit=0;
for (i=0x80;i>0;i/=2)             //高位为1,循环右移
{
   if (i & write_data)
   DATA=1;          //和要发送的数据相与,结果为发送位
   else
   DATA=0;                        
   SCK=1;                          
   _nop_();
_nop_();
_nop_();        
   SCK=0;
}
DATA=1;                           //释放数据线
SCK=1;                            //clk #9 for ack
ack_bit = DATA;                       //检查应答信号,确认通讯正常
SCK=0;        
return ack_bit;                     //ack_bit=1 通讯错误
}

// 温湿度采集子程序
char s_measure(unsigned char *p_value, unsigned char *p_checksum,
unsigned char mode)
{
unsigned error=0;
unsigned int i;
s_transstart();                   //transmission start
switch(mode)
{                     //send command to sensor
case TEMP : ack_bit += s_write_byte(MEASURE_TEMP); break;
case HUMI : ack_bit += s_write_byte(MEASURE_HUMI); break;
default     : break;
}
for (i=0;i<65535;i++)
if(DATA==0) break; //wait until sensor has finished the measurement
if(DATA) error+=1;                // or timeout (~2 sec.) is reached
*(p_value) =s_read_byte(ACK);     //read the first byte (MSB)
*(p_value+1)=s_read_byte(ACK);    //read the second byte (LSB)
*p_checksum =s_read_byte(noACK);  //read checksum
return ack_bit;                   }

//LCD忙状态检测子程序
BOOL lcd_bz()
{      
BOOL result;
rs = 0;
rw = 1;
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (BOOL)(P0 & 0x80);//P0口与0x80相与,只保留最高位(BF位)
ep = 0;
return result;            }




//LCD写指令子程序
void lcd_wcmd(BYTE cmd)
{      
while(lcd_bz());
rs = 0;
rw = 0;
ep = 0;
_nop_();
_nop_();
P0 = cmd;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;       }


//LCD显示位置设置子程序
void lcd_pos(BYTE pos)
{      
lcd_wcmd(pos | 0x80);       //写入显示地址时要求最高位必须为高电平
                      }
//LCD写数据子程序
void lcd_wdat(BYTE dat)
{      
while(lcd_bz());
rs = 1;
rw = 0;
ep = 0;
P0 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;    }

//LCD初始化子程序

void lcd_init()
{                  //LCD初始化设定
lcd_wcmd(0x38);    //4位总线,双行显示,显示5*7的点阵字符
delay(1);
lcd_wcmd(0x0c);    //开显示,无光标
delay(1);
lcd_wcmd(0x06);    //仅光标右移,文字不移动
delay(1);
lcd_wcmd(0x01);    //清除LCD的显示内容
delay(1);       }


//温湿度显示子程序
void show_Tem_Hum(uchar *ptem,uchar *phum)
{
int ntemp,i,t1,t0,len;
int nhum;
float flt0,flt1;
ntemp= (*ptem)*256+ (*(ptem+1));
t1=(ntemp)/100-40;  //温度补偿
t0=(ntemp)%100;
memset(dis1,0x20,16);
sprintf(dis1,"Temp %d.%02d C ",t1,t0);
lcd_pos(0);     // 设置显示位置为第一行的第1个字符
len=strlen(dis1);
for(i=0;i<len;i++)
{  lcd_wdat(dis1);  }
nhum = (*phum)*256+ (*(phum+1));
flt0=0.0405*nhum-0.0000028*nhum*nhum-4;//相对湿度非线性补偿
flt1=(t1-25)*(0.01+0.00008*nhum)+flt0; //相对湿度对于温度的依赖性补偿
memset(dis2,0x20,16);
sprintf(dis2,"Humi %f ",flt1);
len=strlen(dis2);
len=9;
lcd_pos(40);     // 设置显示位置为第二行的第1个字符
for(i=0;i<len;i++)
   {   lcd_wdat(dis2);  }   
                                               }

// EEPROM 启动传输子程序
void e_transstart(void)
{
DATA = 1;
SCK = 1;
_nop_();
DATA = 0;
_nop_();
_nop_();
SCK = 0;   }

// EEPROM 连接复位子程序
void e_connectionreset(void)
{
DATA = 0;
_nop_();
SCK = 1;
_nop_();
_nop_();
DATA = 1;     }

// EEPROM 在指定地址写子程序
void write_eeprom (unsigned char addr, unsigned char write_data)
{
e_transstart();
write_IIC(OP_WRITE);
write_IIC (addr);
write_IIC (write_data);
e_connectionreset();
delay(300); // 写入周期      
  }

// EEPROM 在指定地址读子程序
unsigned char read_eeprom (unsigned char addr)
{
unsigned char read_data;
e_transstart();
write_IIC (OP_WRITE);
write_IIC (addr);
write_IIC(OP_READ);
read_data=read_IIC();
e_connectionreset();
return read_data;              }

// 获取温湿度上下限子程序
void receive_limit(void)
  {   read_eeprom(TemH);
        TH=read_data;
      read_eeprom(TemL);
        TL=read_data;
      read_eeprom(HumH);
        HH=read_data;
      read_eeprom(HumL);
        HL=read_data;    }


// LCD 显示温湿度上下限子程序
void show_limit(void)
{   lcd_pos(0);
    len=strlen(dis3);
    for(i=0;i<len;i++)
        {   lcd_wdat(dis3) ; }     }

// 将设定的上下限存入EEPROM子程序
void send_limit(void)
   {   TL=dis3[0]*10+dis3[1];
       TH=dis3[3]*10+dis3[4];
       HL=dis3[6]*10+dis3[7];
       HH=dis3[9]*10+dis3[10];
       write_eeprom(TemH,TH);
       write_eeprom(TemL,TL);
       write_eeprom(HumH,HH);
       write_eeprom(HumL,HL);      }
// 设定温湿度上下限子程序
void set_limit(void)
     {   lcd_init(); //初始化LCD
         dis3[0]=TL/10;
         dis3[1]=TL%10;
         dis3[2]="-"  ;
         dis3[3]=TH/10;
         dis3[4]=TH%10;
         dis3[5]="-"  ;
         dis3[6]=HL/10;
         dis3[7]=HL%10;
         dis3[8]="-"  ;
         dis3[9]=HH/10;
         dis3[10]=HH%10;
         show_limit();  //显示上下限
         lcd_wcmd(0x02) ;
         while(K2)
            {  int i=0,a;
               i=i+1;
               a=dis3;
               lcd_wcmd(0x14); //右移光标
               if(K3)
                  {  if(a=9)
                      {  a=0;
                         dis3=a;}
                     else
                         {  
                          a=a+1;
                          dis3=a;
                          }   
                      }      
                   }
          show_limit();
          if(k4)
             send_limit();
      }
//主程序
void main()
{  
uchar checksum,i;
buzzer=1;
lcd_init();     // 初始化LCD
delay(10);
while(1)
{  s_connectionreset();
ack_bit=0;
ack_bit += s_measure(&Tem,&checksum,TEMP);
ack_bit=0;
ack_bit += s_measure(&Hum,&checksum,HUMI);
    show_Tem_Hum(&Tem,&Hum);                           
delay(500);                                          
           wp=0;
           receive_limit();
           wp=1;
           if(t1>TH/t1<TL/flt1>HH/flt1<HL)
                 {   for(i=0;i<255;i++)
                       {  buzzer=!buzzerr;
                          delay(10);     }        }
           if(K1)
                 {    wp=0;
                      set_limit();
                      wp=1;          }
                                                               }


Build target '目标 1'
compiling lxx.asm.c...
LXX.ASM.C(1): warning C500: LICENSE ERROR (R208: RENEW LICENSE ID CODE (LIC))
lxx.asm.c(5): warning C318: can't open file 'DCP.h'
LXX.ASM.C(158): warning C206: 's_write_byte': missing function-prototype
LXX.ASM.C(158): error C267: 's_write_byte': requires ANSI-style prototype
目标未创建
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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