关于C51中使用XBYTE的问题
我将LED段码送到P0口,象使用外部器件那样使用P0口,,可是程序到XBYTE就无法通过,请问C51达人这是什么原因。小弟恭侯佳音。
以下是源程序:
#pragma SRC
#include <stdio.h>
#include <reg51.h>
#define ture 1
#define false 0
#define add 0x0000
#define delay_value 3
#define delay_value_extra 10100
#define keyhh P2_0
#define keyhl P2_1
#define keymh P2_2
#define keyml P2_3
#define ledselhh P2_4
#define ledselhl P2_5
#define ledselmh P2_6
#define ledselml P2_7
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit P2_4=P2^4;
sbit P2_5=P2^5;
sbit P2_6=P2^6;
sbit P2_7=P2^7;
void initial(void);
void keyscan(void);
void update(void);
void display(unsigned i,unsigned num);
void delay(short i);
unsigned char h1=0;
unsigned char h0=0;
unsigned char m1=0;
unsigned char m0=0;
unsigned char s1=0;
unsigned char s0=0;
unsigned char seg[10]={0Xe7,0X21,0Xcb,0X6b,0X2d,0X6e,0Xee,
0X23,0Xef,0X6f};
void main(void)
{initial();
for(;;)
{ keyscan();
delay(delay_value_extra);
update();
}
}
void initial(void)
{
P2_0=false;
P2_1=false;
P2_2=false;
P2_3=false;
P2_4=false;
P2_5=false;
P2_6=false;
P2_7=false;
}
void delay(short i)
{#pragma asm
push r7
push acc
mov r7,#0ffh
delay:nop
nop
djnz r7,delay
pop acc
pop r7
#pragma endasm
}
void keyscan(void)
{if (keyhh==ture)
{ delay(delay_value);
if (keyhh==ture)
h1++;
}
if (keyhl==ture)
{ delay(delay_value);
if (keyhl==ture)
h0++;
}
if (keymh==ture)
{ delay(delay_value);
if (keymh==ture)
m1++;
}
if (keyml==ture)
{ delay(delay_value);
if (keyml==ture)
m0++;
}
}
void update(void)
{if (s0==10)
{s1++;s0=0;}
if (s1==6)
{m0++;s1=0;}
if (m0==10)
{m1++;m0=0;}
if (m1==6)
{h0++;m1=0;}
if (h1==0|h1==1&&h0==10)
{h1++,h0=0;}
else if(h0==4)
{h1++;h0=0;}
end if;
if (h1==3)
{h1=0;}
display(0,h1);
delay(delay_value);
ledselhh=false;
display(1,h0);
delay(delay_value);
ledselhl=false;
display(2,m1);
delay(delay_value);
ledselmh=false;
display(3,m0);
delay(delay_value);
ledselml=false;
}
display(unsigned i,unsigned num)
{switch(i)
{ case 0:ledselhh=ture;
xbyte[add]=seg[num];
break;
case 1:ledselhl=ture;
xbyte[add]=seg[num];
break;
case 2:ledselmh=ture;
xbyte[add]=seg[num];
break;
case 3:ledselml=ture;
xbyte[add]=seg[num];
break;
default:break;
}
}
发表时间:2004年6月15日11:01:26