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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1931|回復: 9
打印 上一主題 下一主題
收起左側

單片機按鍵掃描代碼,求大佬幫我看看

[復制鏈接]
跳轉到指定樓層
樓主
ID:944932 發(fā)表于 2021-6-29 02:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
KeyPad就是P2,以下是一部分代碼,注釋是我根據(jù)自己的理解寫上去的,有不對的還請大佬們指教,現(xiàn)在有個不懂得地方就是scancode+=KeyPad/16*16;這一句中的計算原理是什么,除16又乘16,我用計算機驗證了半天都對不上。

uchar GetScanCode()
{
        uchar scancode=0;
        KeyPad=0x0f;//00001111讓行的數(shù)值,即低位全為1
        if(KeyPad%16!=0x0f)        //檢測是否有按鍵按下
        {
                delay(10);   //消抖
                KeyPad=0x0f;   //
                if(KeyPad%16!=0x0f)//再次檢測是否有按鍵按下
                {
                        KeyPad=0x0f;//
                        scancode=KeyPad%16;        //讀取行數(shù)值 ,即取低位
                        KeyPad=0xf0;
                        scancode+=KeyPad/16*16;//scancode =  scancode  +  KeyPad/16*16(高位)        行數(shù)值加列數(shù)值 組成掃描代碼
               
                        KeyPad=0x0f;
               
                        while(KeyPad%16!=0x0f);//等待按鍵松開并輸出
                        return scancode;

                }
        }
        return 0;
}


uchar code KeyValue[][2]={
                                                        {0xee,1},
                                                        {0xde,2},
                                                        {0xbe,3},
                                                        {0x7e,4},

                                                        {0xed,5},
                                                        {0xdd,6},
                                                        {0xbd,7},
                                                        {0x7d,8},

                                                        {0xeb,9},
                                                        {0xdb,0},
                                                        {0xbb,10},
                                                        {0x7b,11},

                                                        {0xe7,12},
                                                        {0xd7,13},
                                                        {0xb7,14},
                                                        {0x77,15},
};

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:213173 發(fā)表于 2021-6-29 07:30 | 只看該作者
這是一個不成熟的4*4矩陣鍵盤掃描程序,寫法也不規(guī)范,看看就行,不必深究。給你稍改一下,去除贅句,便于看懂。
uchar GetScanCode()
{
        uchar scancode=0;
        KeyPad=0x0f;//00001111讓行的數(shù)值,即低位全為1,賦值低4位
//        if(KeyPad%16!=0x0f)        //檢測是否有按鍵按下
        if(KeyPad!=0x0f)        //檢測是否有按鍵按下
        {
                delay(10);   //消抖
//                KeyPad=0x0f;   //
//                if(KeyPad%16!=0x0f)//再次檢測是否有按鍵按下
                if(KeyPad!=0x0f)//再次檢測是否有按鍵按下
                {
//                        KeyPad=0x0f;//
//                        scancode=KeyPad%16;        //讀取行數(shù)值 ,即取低位
                        scancode=KeyPad&0x0f;      //取低4位值
                        KeyPad=0xf0;                                        //賦值高4位
        //                scancode+=KeyPad/16*16;//scancode =  scancode  +  KeyPad/16*16(高位) 行數(shù)值加列數(shù)值 組成掃描代碼       
                        scancode|=(KeyPad&0xf0);  //低4位+高4位
//                        KeyPad=0x0f;       
//                        while(KeyPad%16!=0x0f);//等待按鍵松開并輸出
                        while(KeyPad!=0xf0);//等待按鍵松開并輸出
                        return scancode;
                }
        }
        return 0;
}

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:739545 發(fā)表于 2021-6-29 09:30 | 只看該作者
KeyPad/16*16愿意應該是取高位略低位的意思,但直接這樣寫就寫的比較直白,效率降低,直接用移位比較好
回復

使用道具 舉報

地板
ID:944932 發(fā)表于 2021-6-29 10:12 來自觸屏版 | 只看該作者
wulin 發(fā)表于 2021-6-29 07:30
這是一個不成熟的4*4矩陣鍵盤掃描程序,寫法也不規(guī)范,看看就行,不必深究。給你稍改一下,去除贅句,便于 ...

這個看起來就好懂啊,謝謝大佬
回復

使用道具 舉報

5#
ID:944932 發(fā)表于 2021-6-29 10:12 來自觸屏版 | 只看該作者
lovezjf234 發(fā)表于 2021-6-29 09:30
KeyPad/16*16愿意應該是取高位略低位的意思,但直接這樣寫就寫的比較直白,效率降低,直接用移位比較好

嗯嗯,謝謝大佬
回復

使用道具 舉報

6#
ID:807591 發(fā)表于 2021-6-29 10:43 | 只看該作者
雖然。。但是這種涉及 while之類傻等的 還是不好,等效于高速公路堵車,這些思維套路不練也罷
回復

使用道具 舉報

7#
ID:123289 發(fā)表于 2021-6-29 11:08 | 只看該作者
如果鍵卡住了(長按),程為序就死等。什么活也不用干了。
回復

使用道具 舉報

8#
ID:944932 發(fā)表于 2021-6-29 11:10 | 只看該作者
szb314 發(fā)表于 2021-6-29 10:43
雖然。。但是這種涉及 while之類傻等的 還是不好,等效于高速公路堵車,這些思維套路不練也罷

你好,那有什么可以替換的呢,請大佬指點一點
回復

使用道具 舉報

9#
ID:807591 發(fā)表于 2021-6-29 13:48 | 只看該作者
茉莉星瞳 發(fā)表于 2021-6-29 11:10
你好,那有什么可以替換的呢,請大佬指點一點

早點看看類似狀態(tài)機那種套路,,比如4個IO做數(shù)據(jù)位,4個地址位,地址位依次 置1輸出,數(shù)據(jù)位檢測,如此循環(huán),遠比卡住while這些要好,cpu可以解放出來做其他事
回復

使用道具 舉報

10#
ID:161164 發(fā)表于 2021-6-29 15:09 | 只看該作者
本帖最后由 lkc8210 于 2021-6-29 15:12 編輯
茉莉星瞳 發(fā)表于 2021-6-29 11:10
你好,那有什么可以替換的呢,請大佬指點一點

可以用某數(shù)的累加代替
以下是上班摸魚推理出來的
可能有Bug
uint ScanCount = 0;

uchar GetScanCode()
{
        uchar scancode=0;
        KeyPad=0x0f;//00001111讓行的數(shù)值,即低位全為1,賦值低4位
//        if(KeyPad%16!=0x0f)        //檢測是否有按鍵按下
        if(KeyPad!=0x0f)        //檢測是否有按鍵按下
        {
                if(ScanCount++ >= 10) //根據(jù)大While loop的速度調節(jié)一下        //消抖
                {
                        ScanCount = 10;//防溢出
//                KeyPad=0x0f;   //
//                if(KeyPad%16!=0x0f)//再次檢測是否有按鍵按下
                        if(KeyPad!=0x0f)//再次檢測是否有按鍵按下
                        {
//                        KeyPad=0x0f;//
//                        scancode=KeyPad%16;        //讀取行數(shù)值 ,即取低位
                                scancode=KeyPad&0x0f;      //取低4位值
                                KeyPad=0xf0;                                        //賦值高4位
//                scancode+=KeyPad/16*16;//scancode =  scancode  +  KeyPad/16*16(高位) 行數(shù)值加列數(shù)值 組成掃描代碼
                                scancode|=(KeyPad&0xf0);  //低4位+高4位
//                        KeyPad=0x0f;
//                        while(KeyPad%16!=0x0f);//等待按鍵松開并輸出

                        }
                }

        }
        if(ScanCount >= 10 && !(KeyPad!=0xf0))//等待按鍵松開并輸出
        {
                ScanCount = 0;
                return scancode;
        }

        return 0;
}

評分

參與人數(shù) 1黑幣 +30 收起 理由
admin + 30 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久一区二区三区四区 | 九九在线| 国产日韩精品久久 | 国产精品一区二区在线观看 | 一级黄色片免费 | 国产精品一区免费 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 桃色五月| 天天综合网天天综合色 | 国产9999精品 | 久久久国产一区二区 | 国产精品久久久久久久久久 | 欧美精品二区 | 国产精品美女久久久久久久网站 | 99成人| 日韩午夜影院 | 欧美区日韩区 | 91精品国产91久久久久久最新 | 成人精品一区二区三区中文字幕 | 日韩a在线 | 久草网站 | 福利社午夜影院 | 狠狠狠色丁香婷婷综合久久五月 | 国产一区二 | 999久久久精品 | 在线国产一区 | 中文字幕精品一区二区三区在线 | 久久久久久国模大尺度人体 | 999久久久久久久久6666 | 97国产精品视频人人做人人爱 | 国产精品久久久久久久久图文区 | 爱爱视频日本 | 欧美视频区 | 欧美日本一区 | 九九久久国产精品 | 成人精品视频 | 天天综合日日夜夜 | 欧美aaa级 | 国产精品久久久久久久久久三级 | 欧美理伦片在线播放 | 欧美一区久久 |