按键控制流水灯

/******************************************************************/
/*新的知识点:习惯使用软件的帮助功能 点击keil菜单的——索引
1、学习使用按键,单片机IO口输入
按键按下后,需要大概几ms时间的去抖动延时。
本例程是使用Delay的方式延时,想想有其他方法吗。


/*******************************************************************/
#include
unsigned char ID;

/* *****************************************************************/
/*函数用途:延时程序,10mS左右 */
/*变量:无 */
/*返回值:无 */
/*******************************************************************/
void Delay10ms(void)
{
unsigned char i,j;
for(i=100;i>0;i--)
for(j=248;j>0;j--);
}
/* *****************************************************************/
/*函数用途:延时程序,0.2mS左右 */
/*变量:无 */
/*返回值:无 */
/*******************************************************************/
void Delay02s(void)
{
unsigned char i;
for(i=20;i>0;i--)
{
Delay10ms();
}
}

void main(void) //主函数
{
while(1)
{
if(P3_2==0) //检测P3_2按键是否按下
{
Delay10ms(); //延时消出抖动
if(P3_2==0) //再次检测P3_2按键是否按下
{
P0=0xff; //灭发光二极管
while(!P3_2);
ID++; //ID自加1
if(ID==8) //假如ID大于8,ID=0
{
ID=0;
}
}
}
switch(ID) //根据ID值显示发光二极管
{
case 0: //判断ID是否为0
{
P0_0=~P0_0;//ID=0,连接在P0_0的发光二极管发光
Delay02s();//延时0.2秒
}
break; //跳出SWITCH
case 1: //判断ID是否为1
{
P0_1=~P0_1;//ID=1,连接在P0_1的发光二极管发光
Delay02s();//延时0.2秒
}
break; //跳出SWITCH
case 2:
{
P0_2=~P0_2;
Delay02s();
}
break;
case 3:
{
P0_3=~P0_3;
Delay02s();
}
break;
case 4:
{
P0_4=~P0_4;
Delay02s();
}
break;
case 5:
{
P0_5=~P0_5;
Delay02s();
}
break;
case 6:
{
P0_6=~P0_6;
Delay02s();
}
break;
case 7:
{
P0_7=~P0_7;
Delay02s();
}
break;
}
}
}

相关文档
最新文档