<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 51單片機矩陣鍵盤(pán)的編程

51單片機矩陣鍵盤(pán)的編程

作者: 時(shí)間:2012-08-25 來(lái)源:網(wǎng)絡(luò ) 收藏
C上的外設鍵盤(pán)鍵是使用的矩陣方式擴展的,但是硬件仿真時(shí)必須把蜂民器的開(kāi)關(guān)打開(kāi)觸使行掃描的74HC53的E端接地為輸出型,否則測死了也沒(méi)反應,我還以為是我的程序有問(wèn)題呢,后來(lái)才找到的。

其原理

74HC138譯碼器在輸出端Y1與WR(P3^6)都處于低電平通過(guò)或非門(mén),轉化成行掃描的74HC53的片選端打開(kāi)寫(xiě)入數據,在輸出端的高4位通過(guò)移位方式輸出到外設鍵盤(pán)中。然后給WR一個(gè)高電平來(lái)給74HC53一個(gè)低電平使得輸入無(wú)效進(jìn)行鎖存操作。然后通過(guò)RD(P3^7)與Y2共同輸出低電平通過(guò)或非門(mén)加上個(gè)非門(mén)把低電平送到列掃描的74HC53的片選端E上,在讀取數據前必須先將要獲取的高4位進(jìn)行置1,然后讀取高4位數據,通過(guò)RD送出高電平進(jìn)行鎖住輸出,防止74HC53同時(shí)輸入輸出導致芯片燒毀。然后根據獲得的unsigned char進(jìn)行移位比對操作來(lái)獲得是哪一列,然后在通過(guò)運算得到第幾個(gè)按鍵被按下。

這是最簡(jiǎn)單的矩陣方式擴展鍵盤(pán)的代碼流程,上述是我理解的流程,測試已沒(méi)問(wèn)題。

#includereg52.h>#includeabsacc.h>void my_delay10nms(unsigned int n){unsigned i,j;while(n --){for(i = 128;i > 0;i --)for(j = 10;j > 0;j --);}}sbit LED_BIT = P1^6;void main(void){unsigned char Key_h;unsigned char Key_Val;unsigned char Key_r;unsigned char Last_key;unsigned char Key_Temp;while(1){Key_Val=0;for(Key_h=4;Key_h8;Key_h++){P2=0x88;P0=(1Key_h);P3=~(16);P3|=(16);P2=0x90;P3=~(17);  //讀 P0|=0xf0;Key_Temp=P00xf0; //      P3|=(17);    // 防止芯片燒壞if(Key_Temp){for(Key_r=4;Key_r8;Key_r++){if(Key_Temp(1Key_r)){Key_Val=(Key_h-4)*4+(Key_r-4)+1; break;}}if(Key_Val)break;}}if(Last_key!=Key_Val){Last_key=Key_Val;}else{if(Last_key){P0=Last_key;LED_BIT = 1;LED_BIT = 0;} }my_delay10nms(1);}}


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>