用按键控制流水灯的例子

这是我刚写的一个用按键控制流水灯的例子,很适合初学者的
/*硬件电路连接:流水灯接在P0口, 阳极接高电平,
阴极接P0口,4个按键分别接P3.4,P3.5, P3.6,P3.7 ,按下时是低电平 */
#include
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
int a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//左流水灯数组
int b[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//右流水灯数组
int c[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; //逐盏点亮,逐盏灭掉数组
//************************************************************************************************************
void delay() //延时子程序
{int i;
for(i=0;i<30000;i++);
}



//**********************************************************************************************************
void aa() //实现要求(1)的子程序(key1按下时流水灯,弹开时全灭)
{ int i=0;
while(!key1) //判断是否有键按下
{P0=a[i];delay();i++;if(i==8)i=0;}//流水灯

}


//*************************************************************************************************************
void bb() // 实现要求(2)的子程序(key2按下时实现计数功能,弹开时停止计数;)
{
while(!key2){P0--;delay();if(P0==0)P0=0xff;} //判断是否有键按下,按下则计数器加1

}




//*************************************************************************************************************
void cc() // 实现要求(3)的子程序(key3按下时实现逐盏点亮,逐盏灭掉)
{ int i=0;

P0=0xff ;// 发光二极管全灭
while(!key3) //判断是否有键按下
{P0=c[i];delay();i++;if(i==16)i=0;}//逐盏点亮,逐盏灭掉
}



//*************************************************************************************************************
void dd() // 实现要求(4)的子程序(key4按第一次按下,左流水,第二次按下,右流水,第三次按下,熄灭)
{ int i=0,j=0,k=0,h=0;
loop:P0=0xff;
if(key4==0) //第一次判断是否有键按下
{for(i=0;i<30000;i++); //延时防抖动
if(key4==1) //判断按键是否弹起
while(1){P0=a[j];delay();j++;if(j==8)j=0; //左流水灯
if(key4==0) //第二次判断是否有键按下
{for(i=0;i<30000;i++); //延时防抖动
if(key4==1) //判断按键是否弹起
while(1){P0=b[k];delay();k++;if(k==8)k=0; //右流水灯
if(key4==0) //第三次判断是否有键按下
{for(i=0;i<30000;i++); //延时防抖动
if(key4==1) //判断按键是否弹起
goto loop; //跳转到LOOP处,即P3=0xff,此时灯全灭
}}}}}}



//****************************************************************************************************************
main()
{while(1){P0=0xff;
while(!key1)aa();

while(!key2)bb();
while(!key3)cc

();

while(!key4)dd();

}}

相关文档
最新文档