色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

單片機人機交互之矩陣按鍵

汽車電子技術 ? 來源:嵌入式悅翔園 ? 作者: JamesBin ? 2023-02-17 14:50 ? 次閱讀

按鍵是一種常開型按鈕開關,與單片機的常見接法如圖所示。按鍵未按下時兩個觸點斷開,單片機I/O口輸入高電平;當按鍵閉合時,I/O口輸入低電平。

一、按鍵講解

當I/O口為P0口時,由于沒有內部上拉電阻,所以必須外接上拉電阻,當I/O口為P1、P2和P3口時,由于內部已有上拉電阻,因此可省略外接的上拉電阻。

圖片

二、按鍵消抖

單片機系統中所使用的鍵盤都是機械式的彈性按鍵,因為存在機械觸點的彈性作用,在按鍵閉合和彈起的瞬間都會出現抖動,如圖所示。按鍵抖動一般會持續5~10ms,為使一次按鍵僅被處理一次,必須消除按鍵抖動。消除按鍵抖動可以采用軟件消抖或硬件消抖。

圖片

軟件消抖指在檢測到有按鍵閉合時,延時一小段時間之后再次檢測,如果仍然檢測到按鍵閉合,則認為按鍵真正閉合。

硬件消抖方法

1.R-S觸發器

一旦有鍵按下,觸發器立即反轉,觸點的抖動便不會再對輸出產生影響,按鍵釋放時也一樣。

圖片

2.電容濾波

電容并聯在按鍵的兩端,利用電容放電的延時特性,將產生抖動的電平通過電容吸收掉,從而達到消抖的作用;

圖片

三、獨立按鍵

獨立鍵盤指每個按鍵都占據一個獨立的引腳。

圖片

四、矩陣按鍵

同一行上的所有按鍵都連接到一個引腳,同一列上的所有按鍵都連接到一個引腳。

圖片

(1)列掃描方式

所有行線都輸出高電平,列線依次輸出低電平;查詢該列上行的值,若為0,則說明該行上的按鍵被按下;若該列上所有行的值都為1,則進行下一列行值的查詢;循環往復。

圖片

(2)反轉法

所有行線都輸出0,查詢列線上的值,若某列線上的值為0,則說明該列線上的按鍵被按下;然后所有列線都輸出0,查詢行線上的值,若某行線上的值為0,則說明該行線上的按鍵被按下;從而確定某行某列的按鍵被按下。

圖片

五、程序舉例

圖片

#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uint key,key_num;//鍵盤掃描值,鍵盤鍵值
/********************************************************************/
//函數名:delay_1ms(uint x)
//功能:利用定時器0精確定時1ms;自加 time_t的值為后面時間調整函數服務
//調用函數:
//輸入參數:x,1ms計數
//輸出參數:
//說明:延時的時間為1ms乘以x
/********************************************************************/
void delay_1ms(uint x)
{
  TMOD=0X01;//開定時器0,工作方式為1
  TR0=1;//啟動定時器0;
  while(x--)
  {
    TH0=0Xfc;//定時1ms初值的高8位裝入TH0
    TL0=0X18;//定時1ms初值的低8位裝入TL0
    while(!TF0);//等待,直到TF0為1
    TF0=0;
  }    
  TR0=0;//停止定時器0;
}

/**********************************************************/
//函數名:keyscan()
//功能:得出4x4鍵盤的行列掃描值
//調用函數:delay_1ms(uint x)
//輸入參數:
//輸出參數:
//說明:通過P1口的掃描得出掃描值key,無鍵按下key為16
/**********************************************************/
uchar keyscan()
{
   uchar code_h;    //行掃描值
  uchar code_l;    //列掃描值
  P1=0XF0;       //P1.0-P1.3全為0,(行狀態全為低電平)
  if((P1&0xF0)!=0XF0)  //如果P1.4-P1.7不全為1,可能有鍵按下(為準確識別按鍵動作)
  {
      delay_1ms(5);  //廷時去抖動,為準確識別按鍵動作
      if((P1&0xF0)!=0XF0)//重讀高4位(列狀態),若還是不全為1,定有鍵按下
            {      
          code_h=0xfe;  //開始行掃描 (0xfe:11111110)
          while((code_h&0x10)!=0x00)//判斷是否掃描四行(X0~X3)完畢,若不是,繼續掃描(0x10:00010000)   
               {
             P1=code_h;  //第1次P1.0置為0,其余高電平;第2次P1.1置為0,其余高電平  ;第3次P1.2置為0,其余高電平;第4次P1.3置為0,其余高電平
             if((P1&0xF0)!=0XF0) //如果P1.4-P1.7不全為1,該行有鍵按下(0xF0:11110000)
                   {
               code_l=(P1&0xF0|0x0F);//保留P1口高4位,低4位變為1,作為列值
               return((~code_h)+(~code_l));//鍵盤編碼=行掃描值+列掃描值 (取反后用,相當于改為按下按鍵對應的行、列標識為1,其它為0)         
             }
             else                           //左移后補0,但是我們需要將其他位置1,所以+1
               code_h=(code_h<<1)|0x01;  //若該行無鍵按下,行掃描值左移+1,掃描下一行 
           }
       }
   }
  return(16);   //無鍵按下,返回16 
 }

/**********************************************************/
//函數名:keynum()
//功能:得出4x4按鍵的鍵值
//調用函數:keyscan()
//輸入參數:
//輸出參數:
//說明:通過key的值確定按鍵鍵值
/**********************************************************/
void keynum()
{
    uchar i,j;
    uchar code tab[4][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}}; 
    //4x4鍵盤各鍵值標注
    key=16;
    key = keyscan();//引入key值
    if((key&0x01)!=0) i=0;  //判斷出按下按鍵的行列號 (即找出低電平的行、列)
    if((key&0x02)!=0) i=1;
    if((key&0x04)!=0) i=2;
    if((key&0x08)!=0) i=3;
    if((key&0x10)!=0) j=0;
    if((key&0x20)!=0) j=1;
    if((key&0x40)!=0) j=2;
    if((key&0x80)!=0) j=3;
    if(key!=16) 
    {
       key_num = tab[i][j];//通過比較得出4x4鍵盤的鍵值
    }   
}

void main()
{
  uint shi,ge;
  shi = 0;
  ge = 0;
  P2 = 0x16;//初始值 為16
  while(1)
  {
     keynum(); //獲取到鍵值
     if(key!=16)
     {
        shi = key_num/10;//獲得十位   
       ge = key_num%10;//獲得個位
       if(shi)
       {
         P2 = 0x10|ge;
       }
       else
       {
          P2 = ge;
       }
     }
     delay_1ms(10);//延時
  }
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 按鍵
    +關注

    關注

    4

    文章

    223

    瀏覽量

    57595
  • 按鈕開關
    +關注

    關注

    1

    文章

    50

    瀏覽量

    10211
  • i/o
    i/o
    +關注

    關注

    0

    文章

    33

    瀏覽量

    4589
收藏 人收藏

    評論

    相關推薦

    怎么設計基于單片機和FPGA的人機交互系統?

    在現代各類儀器的開發中,人機交互功能正起著無可替代的作用。人機交互界面友好的儀器將更容易操作和使用,從而提高工作效率。液晶顯示器(LCD)具有功耗低、價格低、壽命長、接口控制方便等特點,在科研
    發表于 08-22 07:50

    智能壓力監控儀的人機交互怎么實現?

    近年來,LCD顯示器的普及和微處理器向大容量的發展使嵌入式系統的人機交互功能得到了顯著的提高。在很多場合下,良好的圖形用戶界面(GUI)和便捷的操作環境是影響產品成敗的關鍵因素之一。如何充分利用成本低、資源少的單片機系統實現完善的人機交
    發表于 09-05 06:12

    基于嵌入式系統的LCD人機交互菜單該怎么設計?

    近年來,LCD顯示器的普及和微處理器向大容量的發展使嵌入式系統的人機交互功能得到了顯著的提高。在很多場合下,良好的圖形用戶界面(GUI)和便捷的操作環境是影響產品成敗的關鍵因素之一。如何充分利用成本低、資源少的單片機系統實現完善的人機交
    發表于 09-25 06:31

    基于單片機和FPGA的人機交互系統該怎么設計?

    在現代各類儀器的開發中,人機交互功能正起著無可替代的作用。人機交互界面友好的儀器將更容易操作和使用,從而提高工作效率。液晶顯示器(LCD)具有功耗低、價格低、壽命長、接口控制方便等特點,在科研
    發表于 10-21 07:48

    嵌入式系統的人機交互技術怎么優化?

    近年來,LCD顯示器的普及和微處理器向大容量的發展使嵌入式系統的人機交互功能得到了顯著的提高。在很多場合下,良好的圖形用戶界面(GUI)和便捷的操作環境是影響產品成敗的關鍵因素之一。如何充分利用成本低、資源少的單片機系統實現完善的人機交
    發表于 04-07 06:05

    怎樣通過USART串口來實現單片機簡單的人機交互功能呢

    怎樣通過USART串口來實現單片機簡單的人機交互功能呢?有什么解決辦法嗎?
    發表于 12-09 07:42

    基于單片機和FPGA的人機交互系統的設計

    在儀器儀表電路中,人機交互界面是必不可少的環節。為了解決單純采用單片機制作的系統功耗高、速度慢、電路結構繁瑣的問題,同時為了發揮出單片機的靈活性和FPGA的高速性,
    發表于 11-25 17:14 ?53次下載
    基于<b class='flag-5'>單片機</b>和FPGA的<b class='flag-5'>人機交互</b>系統的設計

    智能配電監控系統人機交互方案

    研究設計了相應的硬件電路與顯示驅動程序,在此基礎上完成了人機交互系統的設計。充分利用成本低、資源少的單片機系統實現完善的人機交互功能。
    發表于 12-15 17:12 ?32次下載
    智能配電監控系統<b class='flag-5'>人機交互</b>方案

    51單片機矩陣按鍵

    51單片機矩陣按鍵,根據按鍵數在數碼管上顯示。
    發表于 05-09 10:59 ?5次下載

    基于STC12單片機的智能點菜人機交互設計

    本文主要介紹了基于STC12單片機的智能點菜人機交互設計,智能點菜系統采用現在流行的TFT液晶顯示技術和電阻式觸摸屏技術完成顧客與點菜機器的信息交互,SD卡中存儲要顯示的圖片信息。
    發表于 12-21 19:25 ?2822次閱讀
    基于STC12<b class='flag-5'>單片機</b>的智能點菜<b class='flag-5'>機</b>的<b class='flag-5'>人機交互</b>設計

    PIC單片機矩陣按鍵運用程序下載

    PIC單片機矩陣按鍵運用程序下載
    發表于 10-18 09:27 ?0次下載

    51單片機按鍵檢測--獨立按鍵矩陣鍵盤

    按鍵,每個按鍵對應一個IO口,通過循環或者中斷去檢測,這種方法常用于按鍵個數較少得時候。如果按鍵的個數較多,每個按鍵都分配一個IO口,會占用
    發表于 11-12 11:06 ?15次下載
    51<b class='flag-5'>單片機</b><b class='flag-5'>按鍵</b>檢測--獨立<b class='flag-5'>按鍵</b>與<b class='flag-5'>矩陣</b>鍵盤

    PIC單片機 按鍵檢測識別

    目錄按鍵和PIC單片機一、按鍵二、按鍵的物理連接與檢測三、PIC16F18854單片機按鍵檢測及
    發表于 11-16 12:36 ?12次下載
    PIC<b class='flag-5'>單片機</b> <b class='flag-5'>按鍵</b>檢測識別

    單片機編輯庫四矩陣按鍵

    單片機編輯庫一延時與led燈單片機編輯庫二按鍵單片機編輯庫三
    發表于 12-31 19:37 ?12次下載
    <b class='flag-5'>單片機</b>編輯庫四<b class='flag-5'>之</b><b class='flag-5'>矩陣</b><b class='flag-5'>按鍵</b>

    單片機學習-矩陣按鍵

    目錄矩陣按鍵介紹檢測方法C51例程歡迎加QQ及郵件交流矩陣按鍵介紹 獨立鍵盤與單片機連接時,每一個
    發表于 12-31 19:37 ?15次下載
    <b class='flag-5'>單片機</b>學習-<b class='flag-5'>矩陣</b><b class='flag-5'>按鍵</b>
    主站蜘蛛池模板: 久久综合久久鬼色| 日韩亚洲视频一区二区三区| 色狼亚洲色图| 97综合久久| 国产在线播放精品视频| 欧美日韩一二区旡码高清在线| 亚洲视频在线看| 广东95后小情侣酒店自拍流出| 久久久无码精品亚洲A片软件| 人妖和美女玩| 99精品无码AV在线播放| 久久精品国产99欧美精品亚洲| 无人区日本电影在线观看高清 | 日韩专区亚洲国产精品| 607080老太太AW| 蜜桃视频无码区在线观看| 中文字幕视频在线观看| 黑人玩弄极品人妻系列| 性色欲情网站IWWW九文堂| 国产成人啪精视频精东传媒网站| 日本xxx在线观看免费播放| bl被教练啪到哭H玉势| 暖暖日本 在线 高清| 97人人添人人澡人人澡人人澡| 久草在线新是免费视频| 一本道手机无码在线看| 久久久久久久久久久福利观看| 乌克兰成人性色生活片| 男总裁憋尿PLAY灌尿BL| av免费网站不卡观看| 欧美人xxxxx| 动漫美女被h动态图| 性欧美video另类hd高清| 国产真实夫妇交换视频| 亚洲午夜久久久久久久久电影网| 国内精品伊人久久久影院| 伊人久久青草| 免费黄色网址在线观看| 菠萝菠萝蜜视频在线看1| 天天狠狠弄夜夜狠狠躁·太爽了| 国产精品久久久久秋霞影视|