我的特殊寄存器头文件里已经是了这样写的了(下面是STC标准头文件的IO并口定义片段)
sfr P0 = 0x80;
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sfr P1 = 0x90;
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sfr P2 = 0xA0;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sfr P3 = 0xB0;
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
但是,在一个工程里,其中一个头文件这么写就不会报错
#define LCD_DATA P0
#define LCD_EN P27
#define LCD_RS P26
#define LCD_RW P25
LCD_w_com(uc com) /*LCD输入指令*/
{
LCD_EN=1;
dly(1);
LCD_RS=0;
LCD_RW=0;
LCD_DATA=com;
dly(2);
LCD_EN=0;
dly(1);
LCD_EN=1;
}
LCD_w_data(uc disdat) /*LCD输入数据*/
{
LCD_EN=1;
dly(1);
LCD_RS=1;
LCD_RW=0;
LCD_DATA=disdat;
dly(2);
LCD_EN=0;
dly(1);
LCD_EN=1;
}
LCD_init() /*LED初始化*/
{
LCD_w_com(0x38); /*00111000,功能设置*/
LCD_w_com(0x0c); /*00001100,显示开关*/
LCD_w_com(0x06); /*00000110,输入模式光标右移,*/
LCD_w_com(0x01); /*擦除屏幕,最简单的命令*/
}
LCD_display(uc x,uc y,ui disdat[]) /*LCD1206显示程序*/
{
xui i,j;
j=szof(disdat);
if(j>16)
{
rtn 1;
}
if(y==1&&y==2) /*判断是1行还是2行*/
{
if(y==1) /*如果是第一行*/
{
LCD_w_com(0x80+x); /*指令位*/
fr(i=0;i<j;i++)
{
LCD_w_data(*disdat);
disdat++;
}
}
if(y==2) /*如果是第二行*/
{
LCD_w_com(0x80+0x40+x); /*指令位*/
fr(i=0;i<j;i++)
{
LCD_w_data(*disdat);
disdat++;
}
}
rtn 0;
}
else
{
rtn 1;
}
}
另一个头文件,这么写就会报错,而且怎么弄也不行:
百思不得其解,求帮助!
|