電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 3919|回復(fù): 1
收起左側(cè)

單片機(jī)C語(yǔ)言實(shí)例-164-矩陣鍵盤(pán)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2022-1-28 17:18:42 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(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;       
        }
}


更多詳情參考附件文檔

游客,如果您要查看本帖隱藏內(nèi)容請(qǐng)回復(fù)

87

主題

3034

帖子

1萬(wàn)

積分

論壇元老

Rank: 7Rank: 7Rank: 7

積分
16422
沙發(fā)
發(fā)表于 2022-1-30 14:36:18 | 只看該作者
謝謝分享好資料

發(fā)表回復(fù)

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表