51單片機(二十六)—— 獨立按鍵數碼管顯示

        在這片文章中,我們對獨立按鍵的使用進行進一步研究,用數碼管來顯示按鍵的狀態。這個實驗的主要代碼如下所示。

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,則進行濾波處理,確認按鍵按下之後,將數碼管顯示的內容向前一位,並在數碼管的最後一位顯示按下的按鍵值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章