在这片文章中,我们对独立按键的使用进行进一步研究,用数码管来显示按键的状态。这个实验的主要代码如下所示。
main()
{
for(n=0;n<8;n++) //给showdata数组赋初值
showdata[n]=0;
KEY1=1;
KEY2=1;
KEY3=1;
KEY4=1;
KEY5=1;
KEY6=1;
KEY7=1;
KEY8=1;
init_T0();
for(;;)
{
if(KEY1==0) //按键KEY1按下
{
delay1ms(10); //延时10ms去抖
if(KEY1==0) //再次判断按键KEY1按下
{
for(n=0;n<7;n++)
showdata[n]=showdata[n+1]; //显示的内容向前移一位
showdata[7]=BJTY_DuanMa[1]; //赋值需要显示的数据
}
while(KEY1==0); //等待按键松开
}
if(KEY2==0) //按键KEY2按下
{
delay1ms(10); //延时10ms去抖
if(KEY2==0) //再次判断按键KEY2按下
{
for(n=0;n<7;n++)
showdata[n]=showdata[n+1]; //显示的内容向前移一位
showdata[7]=BJTY_DuanMa[2]; //赋值需要显示的数据
}
while(KEY2==0); //等待按键松开
}
if(KEY3==0) //按键KEY3按下
{
delay1ms(10); //延时10ms去抖
if(KEY3==0) //再次判断按键KEY3按下
{
for(n=0;n<7;n++)
showdata[n]=showdata[n+1]; //显示的内容向前移一位
showdata[7]=BJTY_DuanMa[3]; //赋值需要显示的数据
}
while(KEY3==0); //等待按键松开
}
if(KEY4==0) //按键KEY4按下
{
delay1ms(10); //延时10ms去抖
if(KEY4==0) //再次判断按键KEY4按下
{
for(n=0;n<7;n++)
showdata[n]=showdata[n+1]; //显示的内容向前移一位
showdata[7]=BJTY_DuanMa[4]; //赋值需要显示的数据
}
while(KEY4==0); //等待按键松开
}
if(KEY5==0) //按键KEY5按下
{
delay1ms(10); //延时10ms去抖
if(KEY5==0) //再次判断按键KEY5按下
{
for(n=0;n<7;n++)
showdata[n]=showdata[n+1]; //显示的内容向前移一位
showdata[7]=BJTY_DuanMa[5]; //赋值需要显示的数据
}
while(KEY5==0); //等待按键松开
}
if(KEY6==0) //按键KEY6按下
{
delay1ms(10); //延时10ms去抖
if(KEY6==0) //再次判断按键KEY6按下
{
for(n=0;n<7;n++)
showdata[n]=showdata[n+1]; //显示的内容向前移一位
showdata[7]=BJTY_DuanMa[6]; //赋值需要显示的数据
}
while(KEY6==0); //等待按键松开
}
if(KEY7==0) //按键KEY7按下
{
delay1ms(10); //延时10ms去抖
if(KEY7==0) //再次判断按键KEY7按下
{
for(n=0;n<7;n++)
showdata[n]=showdata[n+1]; //显示的内容向前移一位
showdata[7]=BJTY_DuanMa[7]; //赋值需要显示的数据
}
while(KEY7==0); //等待按键松开
}
if(KEY8==0) //按键KEY8按下
{
delay1ms(10); //延时10ms去抖
if(KEY8==0) //再次判断按键KEY8按下
{
for(n=0;n<7;n++)
showdata[n]=showdata[n+1]; //显示的内容向前移一位
showdata[7]=BJTY_DuanMa[8]; //赋值需要显示的数据
}
while(KEY8==0); //等待按键松开
}
}
}
在这个程序的主函数中,首先将数码管显示的内容清零。然后将KEY1~KEY8全部置1,作用是将相应IO口的上拉电阻使能。之后初始化T0,T0的作用是设置一个中断,在中断函数中进行数码管扫描。接下来进入for循环。在for循环中,依次读取KEY1~KEY8的值,如果有按键的值为0,则进行滤波处理,确认按键按下之后,将数码管显示的内容向前一位,并在数码管的最后一位显示按下的按键值。