怎么样才能不出现这样的错误啊关于声明P1,P2,P3口的

图片:


我一运行文件 就出现这样的错误 
在linclude<reg51.h>中不是以近 声明好了吗  我看其他的 例子没有象我这样的情况啊
  我用的 KEIL 8.05

我顺便把 我的代码发上来以下是 声明代码段部分


            #include<stdio.h>
#include<reg51.h>
#include<stdio.h>
#include<string.h>
#include<absacc.h>
#define  uchar unsigned char 
#define  uint  unsigned int
#define  TRUE  0
#define  FALSE 1
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//LED显示数字段//
uint code itime;
sbit led1=p2^5;
sbit led2=p1^7;
uchar search ;

unsigned char keyscan(void);

//unsigned charclock.s[0](void);

void led_initial(void);

////void initial(void);

void delay(uint dal);

void send74245(void);

void send4094be(void);

void timesys0_init(void);

////void timesys1_init(void);
bit upflag;
bit downflag;
bit leftflag;
bit rightflag;
bit okflag;
bit nullflag;
bit gaiflag;
uint s_flag;
uint m_flag;
uint h_flag;

sbit upkey=p1^0;  //上

sbit downkey=p1^1;    //下

sbit leftkey=p1^2;    //左

sbit rightkey=p1^3;//右

sbit okkey=p1^4;  //确定

sbit gaikey=p1^5; //修改

sbit nullkey=p1^6;  //取消

void sys_initial(void); ////系统开启时候 时钟初始化

bit spaly(void);///秒显示

bit mpaly(void);///分钟显示

bit hpaly(void);///小时显示

void com_ini(void);

void jinwei(void);

void keyini(void);

sbit clk=p3^0;  ///TXD时钟进
sbit DATA=p3^1;  ///数据发送rxd数据进出
///sbit str=p2^7;//4094str端锁存器  str先清0 发送完数据后在STR=1
///////////////////在串行口不作为其他使用,且显示的更新速度很低时,STROBE和OE端可以始终接高;
//在串行口不作为其他使用,且显示的更新速度很低时,STROBE端可以始终接高
sbit h_ena=p2^7;
//////////////////////////
sbit DIR=p2^6;