單片機(jī)C語(yǔ)言實(shí)例-164-矩陣鍵盤(pán)
/********************************************************************
* 文件名 : 矩陣鍵盤(pán).c
* 描述 : 該文件實(shí)現(xiàn)了 4 * 4 鍵盤(pán)的試驗(yàn)。通過(guò)數(shù)碼管的最后一位來(lái)顯示
當(dāng)前的按鍵值。
* 創(chuàng)建人 : 東流,2009年4月10日
* 版本號(hào) : 2.0
*********************************************************************/
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/********************************************************************
* 名稱(chēng) : Delay_1ms()
* 功能 : 延時(shí)子程序,延時(shí)時(shí)間為 1ms * x
* 輸入 : x (延時(shí)一毫秒的個(gè)數(shù))
* 輸出 : 無(wú)
***********************************************************************/
void Delay_1ms(uint i)//1ms延時(shí)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名稱(chēng) : Keyscan()
* 功能 : 實(shí)現(xiàn)按鍵的讀取。下面這個(gè)子程序是按處理 矩陣鍵盤(pán) 的基本方法處理的。
* 輸入 : 無(wú)
* 輸出 : 按鍵值
***********************************************************************/
uchar Keyscan(void)
{
uchar i,j, temp, Buffer[4] = {0xfe, 0xfd, 0xfb, 0xf7}; //讓矩陣鍵盤(pán)的每行分別為低電平
for(j=0; j<4; j++)
{
P1 = Buffer[j];
temp = 0x10;
for(i=0; i<4; i++)
{
if(!(P1 & temp)) //判斷P1口高4位某一行為低電平
{
return (i+j*4); //返回鍵碼
}
temp <<= 1;
}
}
}
/********************************************************************
* 名稱(chēng) : Main()
* 功能 : 主函數(shù)
* 輸入 : 無(wú)
* 輸出 : 無(wú)
***********************************************************************/
void Main(void)
{
uchar Key_Value; //讀出的鍵值
while(1)
{
P1 = 0xf0;
if(P1 != 0xf0) //判斷有無(wú)按鍵按下
{
Delay_1ms(20); //按鍵消抖
if(P1 != 0xf0) //第二次判斷有無(wú)按鍵按下
{
Delay_1ms(20); //按鍵消抖
if(P1 != 0xf0) //第三次判斷有無(wú)按鍵按下
{
Key_Value = Keyscan();
}
}
}
P0 = table[Key_Value];
P2 = 0x07;
}
}
更多詳情參考附件文檔
+08:00C429聯(lián)盟網(wǎng)1954.png (45.21 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
2022-1-28 17:18 上傳
游客,如果您要查看本帖隱藏內(nèi)容請(qǐng) 回復(fù)
|