#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键都没用,请教各位大虾,这是什么原因???