<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)矩陣鍵盤的編程

          51單片機(jī)矩陣鍵盤的編程

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

          其原理

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

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

          #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)鍵詞: 51單片機(jī) 矩陣鍵盤 編程

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();