编译以后出现下面的错误 求大神解答啊 错误在下面
#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
目标未创建 |