怎么样才能不出现这样的错误啊关于声明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;