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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3628|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

關(guān)于單片機(jī)矩陣鍵盤程序的理解 求解釋,困惑了好長(zhǎng)時(shí)間了

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
附件是矩陣鍵盤的原理圖
以下是矩陣鍵盤掃描程序以及在數(shù)碼管顯示0-f


請(qǐng)問(wèn)如果第一個(gè)按鍵被按下,P1口應(yīng)該是0x07,但進(jìn)入到測(cè)試列的程序中時(shí),P1口被重新賦值為0x0f,那么P1口怎么還會(huì)一直保留原來(lái)的0x07?到測(cè)試行時(shí)又被重新賦值為0xf0,怎么還會(huì)保留原來(lái)的值呢?
跪求大佬解答,詳細(xì),感激不盡!!!!

單片機(jī)源程序如下:
#include "reg52.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器

typedef unsigned int u16;          //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned char u8;

#define GPIO_DIG P0
#define GPIO_KEY P1


u8 KeyValue;        //用來(lái)存放讀取到的鍵值


u8 code smgduan[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//顯示0~F的值共陰
void delay(u16 i)
{
        while(i--);        
}
void KeyDown(void)
{
        char a=0;
        GPIO_KEY=0x0f;
        if(GPIO_KEY!=0x0f)//讀取按鍵是否按下
        {
                delay(1000);//延時(shí)10ms進(jìn)行消抖
                if(GPIO_KEY!=0x0f)//再次檢測(cè)鍵盤是否按下
                {        
                        //測(cè)試列
                        GPIO_KEY=0X0F;
                        switch(GPIO_KEY)
                        {
                                case(0X07):        KeyValue=0;break;
                                case(0X0b):        KeyValue=1;break;
                                case(0X0d): KeyValue=2;break;
                                case(0X0e):        KeyValue=3;break;
                        }
                        //測(cè)試行
                        GPIO_KEY=0XF0;
                        switch(GPIO_KEY)
                        {
                                case(0X70):        KeyValue=KeyValue;break;
                                case(0Xb0):        KeyValue=KeyValue+4;break;
                                case(0Xd0): KeyValue=KeyValue+8;break;
                                case(0Xe0):        KeyValue=KeyValue+12;break;
                        }
                        
                }
        }
        while((a<50)&&(GPIO_KEY!=0xf0))         //檢測(cè)按鍵松手檢測(cè)
        {
                delay(100);
                a++;
        }
}
void main()
{        

        while(1)
        {        
                KeyDown();                   //按鍵判斷函數(shù)
                GPIO_DIG=~smgduan[KeyValue];          //
        }               
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:390416 發(fā)表于 2021-1-16 00:56 | 只看該作者

這就是矩陣鍵盤掃描的代碼,主函數(shù)循環(huán)調(diào)用本函數(shù)就行 不能有死等延遲。必須計(jì)數(shù)延遲。定時(shí)器調(diào)用也行(有些浪費(fèi)不建議)。
回復(fù)

使用道具 舉報(bào)

板凳
ID:213173 發(fā)表于 2021-1-16 07:04 | 只看該作者
預(yù)置P1口0x0f,如果第一個(gè)按鍵被按下,P1口應(yīng)該是0x07,此時(shí)P1的低4位當(dāng)前狀態(tài)已讀取,以鍵值的方式保存在變量KeyValue中,進(jìn)入到測(cè)試列的步驟時(shí),P1口被重新賦值為0xf0,此時(shí)P1的高4位當(dāng)前狀態(tài)0X70再被讀取并與低4位相加。測(cè)試得到的結(jié)果是0x77。最終輸出KeyValue=0。
回復(fù)

使用道具 舉報(bào)

地板
ID:654028 發(fā)表于 2021-1-16 09:12 | 只看該作者
按鍵抖動(dòng)
回復(fù)

使用道具 舉報(bào)

5#
ID:633344 發(fā)表于 2021-1-16 10:11 | 只看該作者
你想啊。單片機(jī)執(zhí)行速度非常的快,你按下按鍵的時(shí)候(按下的時(shí)間很短但對(duì)于單片機(jī)來(lái)說(shuō)很長(zhǎng)了,單片機(jī)的處理速度很快)這些操作都已經(jīng)進(jìn)行完了,意思就是你雖然進(jìn)行了賦值,但你還按下了按鍵,按鍵改變了你的賦值,然后switch case語(yǔ)句去判斷你按下了哪個(gè)按鍵,
回復(fù)

使用道具 舉報(bào)

6#
ID:633344 發(fā)表于 2021-1-16 10:18 | 只看該作者
單片機(jī)的處理速度很快(按鍵時(shí)間雖短,但在按鍵的時(shí)間內(nèi),單片機(jī)已經(jīng)將這些處理進(jìn)行完畢,意思就是你還按著那個(gè)鍵,賦予新的初值只是軟件上的改變,而你還按著這個(gè)鍵就是硬件上給io口改變了賦值)軟件上賦值給io口是為檢測(cè)硬件上的改變(到底按了哪個(gè)鍵)做準(zhǔn)備,然后switch case語(yǔ)句去檢測(cè)到底按下了哪個(gè)鍵

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

7#
ID:536119 發(fā)表于 2021-1-16 16:42 | 只看該作者
yousir 發(fā)表于 2021-1-16 10:18
單片機(jī)的處理速度很快(按鍵時(shí)間雖短,但在按鍵的時(shí)間內(nèi),單片機(jī)已經(jīng)將這些處理進(jìn)行完畢,意思就是你還按著 ...

感謝!!!!!!
回復(fù)

使用道具 舉報(bào)

8#
ID:235954 發(fā)表于 2021-1-18 15:43 | 只看該作者
按鍵行做輸出,列做輸入,只需檢測(cè)列那邊電平即可
回復(fù)

使用道具 舉報(bào)

9#
ID:332444 發(fā)表于 2021-1-19 09:22 | 只看該作者
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品免费在线 | 97超碰站 | 亚洲女人的天堂 | 特级毛片www | 欧美日韩一区二区在线观看 | 网页av | 午夜免费福利片 | 国产激情视频网址 | 一区二区精品 | 久久国产一区 | 在线免费观看黄视频 | 狠狠色综合久久丁香婷婷 | 福利视频一二区 | 国产精品成人一区二区三区 | av喷水| jizz中国日本 | 九一视频在线播放 | 一区二区在线不卡 | 成人网在线观看 | 亚洲午夜精品视频 | 亚洲精品一二区 | 国内精品久久久久久久影视简单 | 久久一 | 亚洲男人的天堂网站 | 精品欧美一区二区精品久久久 | 在线a视频网站 | 久久久久久成人 | 成人在线视频免费看 | 亚洲码欧美码一区二区三区 | 免费一二区 | 国产在线播放一区二区三区 | 成人伊人 | 国产亚洲精品久久午夜玫瑰园 | 国际精品久久 | 日本精品视频一区二区 | 久久久久国产一区二区三区 | wwww.8888久久爱站网 | 日本久久黄色 | 日韩在线视频一区 | 国产精品爱久久久久久久 | 一区二区三区在线观看免费视频 |