在這片文章中,我們對獨立按鍵的使用進行進一步研究,用數碼管來顯示按鍵的狀態。這個實驗的主要代碼如下所示。
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,則進行濾波處理,確認按鍵按下之後,將數碼管顯示的內容向前一位,並在數碼管的最後一位顯示按下的按鍵值。