新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機矩陣鍵盤的編程

        51單片機矩陣鍵盤的編程

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

        其原理

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

        這是最簡單的矩陣方式擴展鍵盤的代碼流程,上述是我理解的流程,測試已沒問題。

        #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);}}


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 黔江区| 上栗县| 苏尼特右旗| 鹤壁市| 罗江县| 农安县| 庆阳市| 泰顺县| 洪湖市| 名山县| 建水县| 云林县| 合肥市| 牙克石市| 来宾市| 洞口县| 龙泉市| 农安县| 花莲县| 台江县| 阳东县| 将乐县| 晋城| 马龙县| 金溪县| 新和县| 祁阳县| 江门市| 台中县| 乐陵市| 翁牛特旗| 宜章县| 绥滨县| 沙坪坝区| 嘉义市| 广宗县| 绍兴县| 嵊州市| 陆河县| 湖北省| 阳春市|