#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
unsigned int updown=0; /*灯的流动方向*/
unsigned int start=0; /*灯开始流动显示*/
unsigned int stop=0; /*使灯停止流动显示*/
/*延时程序*/
void Delay(unsigned int time)
{
unsigned int j;
for(;time>0;time--)
{
for(j=0;j<124;j++)
{;}
}
}
/*按键获取程序*/
unsigned int Key()
{
uchar keyvalue;
keyvalue=P3;
keyvalue|=0xc3;
if((keyvalue|=0xc3)==0xff)
{
Delay(10);
if((keyvalue|=0xc3)==0xff)
{
return(0);
}
}
else
{
Delay(10);
if((keyvalue|=0xc3)!=0xff)
{
if((keyvalue|=0xfb)!=0xff)
{ return(1);}
if((keyvalue|=0xf7)!=0xff)
{ return(2);}
if((keyvalue|=0xef)!=0xff)
{ return(3);}
if((keyvalue|=0xdf)!=0xff)
{ return(4);}
}
}
}
/*按键处理程序*/
void Prokey(unsigned int keyvalue)
{
if(keyvalue==1)
{ start=1;
updown=1;
stop=0;
}
if(keyvalue==2)
{ start=1;
stop=1;}
if(keyvalue==3)
{ start=1;
updown=1;}
if(keyvalue==4)
{ start=1;
updown=0;}
}
void main()
{
unsigned int keyvalue; /*按键的数值*/
uchar lamp=0xfe; /*LED循环的数值*/
for(;;)
{
keyvalue=key(); /*获取按键值*/
Prokey(keyvalue);
if(start) /*开始灯的流动显示*/
{
if(stop)
{ P1=0xff;
lamp=0xfe;
}
else
{ if(updown)
{ P1=lamp;
lamp=_cror_(lamp,1);
}
else
{ P1=lamp;
lamp=_crol_(lamp,1);
}
}
Delay(500);
}
}
}
要完成的任务是:按下K1键,灯开始流动显示(由下往上);按下K2键,灯停止流动,所有灯为暗;按下K3键,灯由下往上流动;按下K4键。灯开始由上往下流动。
小弟自己编的程序,只能完成第一个任务,按下K2、K3、K4键都没用,请教各位大虾,这是什么原因???