久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

想問一下4*5矩陣鍵盤掃描如何編碼的問題

[復(fù)制鏈接]
ID:891775 發(fā)表于 2021-5-12 13:54 來自觸屏版 | 顯示全部樓層 |閱讀模式
4*5矩陣鍵盤應(yīng)該怎么編碼呀
回復(fù)

使用道具 舉報(bào)

ID:716656 發(fā)表于 2021-5-12 16:02 | 顯示全部樓層
把4*4的程序研究透,4*5的也好弄了,只不過多用1個(gè)其他組的IO,當(dāng)然程序也會(huì)多一些內(nèi)容,編碼用與運(yùn)算
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2021-5-12 17:03 | 顯示全部樓層
給你一個(gè)示例參考。 矩陣鍵盤6 4異組端口讀寫 仿真.zip (119.54 KB, 下載次數(shù): 26)

回復(fù)

使用道具 舉報(bào)

ID:394903 發(fā)表于 2021-5-12 17:06 | 顯示全部樓層
就跟點(diǎn)陣掃描是一樣的
回復(fù)

使用道具 舉報(bào)

ID:332444 發(fā)表于 2021-5-12 18:47 | 顯示全部樓層
一組IO可以接32按鍵
回復(fù)

使用道具 舉報(bào)

ID:332444 發(fā)表于 2021-5-12 18:50 | 顯示全部樓層

回復(fù)

使用道具 舉報(bào)

ID:743654 發(fā)表于 2021-5-13 09:29 | 顯示全部樓層
wulin 發(fā)表于 2021-5-12 17:03
給你一個(gè)示例參考。

請問我主函數(shù)是while(1)里循環(huán)掃描按鍵,子函數(shù)也有用到按鍵,是不是按鍵也要在while(1)循環(huán)掃描?這樣的話如何跳出子函數(shù)按鍵,回到主函數(shù)呢?
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2021-5-13 10:45 | 顯示全部樓層
cheney03 發(fā)表于 2021-5-13 09:29
請問我主函數(shù)是while(1)里循環(huán)掃描按鍵,子函數(shù)也有用到按鍵,是不是按鍵也要在while(1)循環(huán)掃描?這 ...

按鍵掃描函數(shù)可以輸出鍵值變量,其它子函數(shù)只要判斷鍵值是否在其使用范圍即可。
回復(fù)

使用道具 舉報(bào)

ID:883031 發(fā)表于 2021-5-13 11:12 | 顯示全部樓層
/*頭文件*/
#include<stdio.h>
#include<at89x52.h>


///////////////////////////////////////////////////////////////////////////
//                         /*全局符號定義*/                             //            

#define DRV_NUM 4                        //行線數(shù),驅(qū)動(dòng)線<8
#define SCN_NUM 6                        //列線數(shù),掃描線<8
#define TRUE 1
#define FALSE 0
#define HIGH 1
#define LOW 0
#define DELAY_VALUE 3                        //定義延時(shí)值

#define DRVKEY P2
#define SCNKEY P1

unsigned char DrvKey;                        //驅(qū)動(dòng)線值
unsigned char ScnKey;                        //掃描線值

/*******************************************************************************
*   函數(shù)原型:bit KeyScan(void);
*   功    能:鍵盤掃描子程序,判斷是否有鍵按下。
*******************************************************************************/
bit KeyScan(void)
{
        DRVKEY = 0xf0;
        ScnKey = SCNKEY ^ 0xff;      //列線值取反,以便判斷
        ScnKey &= 0x3f;                       

        if (ScnKey != 0)                //列線值不全為0,則有鍵按下
        {
                return TRUE;
        }
        else                    //否則,無鍵按下
        {
                return FALSE;
        }       
}

/*******************************************************************************
*   函數(shù)原型:void Delay(unsigned char i);
*   功    能:延時(shí)子程序,用于去抖。
*******************************************************************************/
void Delay(unsigned char i)
{
        int j = 0;
        int k = 0;
        k = i * i;
        while (j < k)
        {
                j++;
        }
}
/*******************************************************************************
*   函數(shù)原型:bit AvoidWobble(void);
*   功    能:去抖子程序,用于消除抖動(dòng),判斷是否真有鍵按下。
*******************************************************************************/
bit AvoidWobble(void)
{
        Delay(DELAY_VALUE);                //延時(shí)再讀
        if (KeyScan())                        //仍有鍵按下,返回1
        {
                return TRUE;
        }
        else                    //無鍵按下則為抖動(dòng)
        {
                return FALSE;
        }
}
/*******************************************************************************
*   函數(shù)原型:unsigned char GetKeyValue(void);
*   功    能:鍵盤子程序。最大8*8鍵盤。
*******************************************************************************/
unsigned char GetKeyValue(void)
{
        unsigned char i;
        unsigned char j;
        unsigned char Key_Value = 0;
        unsigned char temp = 0x01;
       
    if (KeyScan())              //有鍵按下取其值
    {
            if (AvoidWobble())                //確實(shí)有鍵按下,取其值
            {
                    for (i = 0;i < DRV_NUM;i++)   //行線移位送0
                    {
                            DRVKEY = (temp << i) ^ 0xff;
   
                            for (j =0;j < SCN_NUM;j++)   //列線移位掃描
                            {
                                ScnKey = SCNKEY;         //讀列線值
                                    ScnKey >>= j;            
                                    ScnKey &= 0x01;
                                    if (ScnKey == 0)         //判斷第j位是否為0
                                    {
                                            Key_Value += j;        //計(jì)算健值
                                            while(KeyScan())       //等待按鍵松開
                        {
                            ;
                        }
                                            return Key_Value;
                                    }
                            }
                            Key_Value += SCN_NUM;          //第i行無按鍵按下,鍵值加列線值,掃描第i+1行
                    }
                    return 255;
            }
            else
            {
                    return 255;
            }
    }
    else
    {
        return 255;
    }
}


這個(gè)程序沒問題,你改一下行線和列線的定義就行了。
回復(fù)

使用道具 舉報(bào)

ID:743654 發(fā)表于 2021-5-14 08:50 | 顯示全部樓層
wulin 發(fā)表于 2021-5-13 10:45
按鍵掃描函數(shù)可以輸出鍵值變量,其它子函數(shù)只要判斷鍵值是否在其使用范圍即可。

我之前就是這樣操作的,貌似進(jìn)入子函數(shù),判斷鍵值按鍵不起作用。按鍵掃描函數(shù)還得重新放到while(1)再掃描一遍,退出子函數(shù)循環(huán)不好退出,有時(shí)候還會(huì)有按鍵失靈的情況。
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2021-5-14 09:44 | 顯示全部樓層
cheney03 發(fā)表于 2021-5-14 08:50
我之前就是這樣操作的,貌似進(jìn)入子函數(shù),判斷鍵值按鍵不起作用。按鍵掃描函數(shù)還得重新放到while(1)再掃描 ...

那是因?yàn)槟愕某绦驑?gòu)架有嚴(yán)重缺陷才會(huì)發(fā)生這樣問題。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩视频专区 | 欧美一区二区三区一在线观看 | 成人午夜毛片 | 成人精品| 久久国产精品一区二区 | 国产乱码精品一区二区三区中文 | 日本中文字幕在线视频 | 龙珠z国语版在线观看 | 国产成人自拍av | 国产精品永久久久久 | 国精久久 | 一区二区三区回区在观看免费视频 | 在线观看国产wwwa级羞羞视频 | 亚洲va欧美va天堂v国产综合 | 性做久久久久久免费观看欧美 | 久久成人18免费网站 | 亚洲三区视频 | 亚洲一区二区三区四区五区中文 | 国产不卡在线观看 | 黄色福利 | 成人精品一区 | 一区二区在线不卡 | 日韩成人精品一区二区三区 | 成人性视频免费网站 | 精品国产一区探花在线观看 | 欧美久久一区二区 | 91久久国产综合久久 | 国产一区二区三区四区三区四 | 久艹网站| 涩色视频在线观看 | 日日碰狠狠躁久久躁96avv | 在线观看国产www | 欧美电影免费网站 | 亚洲视频1区 | 亚洲欧美高清 | 国产a级毛毛片 | 九色视频网站 | 日韩精品在线一区 | 精品在线视频播放 | 久久99精品久久久久子伦 | 黄免费在线 |