亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

矩陣鍵盤的編程

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2011年03月15日   【字體:

           C51單片機(jī)上的外設(shè)鍵盤鍵是使用的矩陣方式擴(kuò)展的,但是硬件仿真時(shí)必須把蜂民器的開(kāi)關(guān)打開(kāi)觸使行掃描的74HC53的E端接地為輸出型,否則測(cè)死了也沒(méi)反應(yīng),我還以為是我的程序有問(wèn)題呢,后來(lái)才找到的。

               其原理

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

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

#include<reg52.h>
#include<absacc.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_h<8;Key_h++)
   {
     P2=0x88;
     P0=(1<<Key_h);
     P3&=~(1<<6);
     P3|=(1<<6);

     P2=0x90;
     P3&=~(1<<7);  //讀 
     P0|=0xf0;
     Key_Temp=P0&0xf0; //      
     P3|=(1<<7);    // 防止芯片燒壞
     if(Key_Temp)
     {
        for(Key_r=4;Key_r<8;Key_r++)
     {
      if(Key_Temp&(1<<Key_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)閉窗口

相關(guān)文章