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

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

3天內不再提示

如何實現基于單片機的鍵盤檢測

CHANBAEK ? 來源:郎哥編程課堂 ? 作者:郎宏林 ? 2023-10-31 14:39 ? 次閱讀

鍵盤是單片機與用戶交互設備之一,用戶通過鍵盤輸入數據或命令到單片機。最簡單的鍵盤僅有一個按鍵,復雜一些的鍵盤有多個按鍵。在單片機的外圍電路中,通常用到的按鍵都是機械彈性開關,當用戶按下按鍵時,按鍵閉合,用戶松開按鍵后,按鍵斷開,單片機如何檢測到按鍵被按下或釋放呢?

按鍵一般與單片機的I/O口連接,按鍵的一端連接I/O口,另一端接地,與按鍵連接的I/O端口會被賦值為高電平,單片機鍵盤檢測程序會持續檢測該I/O端口的電平,若檢測到該端口由高電平變為低電平,說明與該端口連接的按鍵被按下,因為按鍵閉合后,相當于I/O端口通過按鍵與地直接連接,導致該I/O端口變為低電平。

按鍵的連接非常簡單,如下圖所示,按鍵的一端與任一I/O端口相連,另一端與地連接。

圖片

機械按鍵被按下后,會發生抖動現象,導致電平在按下階段和釋放階段不會立即變為低電平,而是呈現鋸齒狀。下圖是按鍵按下時的電壓變化。

圖片

機械按鍵被按下或釋放后,抖動時間大約為5~10ms,此時電壓不穩定,呈鋸齒形,檢測程序無法檢測按鍵是否被按下,因此編寫按鍵檢測程序時,需要進行抖動延時處理。按鍵檢測流程如下圖所示:

圖片

檢測程序持續檢測與鍵盤連接的I/O端口,當檢測到I/O端口電壓出現波動時,延時10ms,然后再次檢測I/O端口,若I/O端口為低電平,說明按鍵被按下,同時還要檢測按鍵是否被釋放,檢測按鍵是否被釋放時,就不需要對抖動進行延遲處理了。

按鍵檢測應用案例:應用兩個按鍵分別控制發光二極管D1和D2的通斷,按鍵1與單片機P2.0連接,按鍵2與P2.1端口連接,D1和D2分別與單片機P1.0、P1.1口連接,按下按鍵1,D1狀態反轉,按下按鍵2,D2狀態反轉。

下圖是按鍵檢測案例電路設計圖:

圖片

在P2.0和P2.1端口分別接入兩個按鍵,按鍵的另一端接地。D1和D2發光二極管分別連接到單片機的P1.0和P1.1端口。

單片機內運行的完整C程序如下:

#include < reg51.h >
#include < stdio.h >
sbit  key_one = P2^0;
sbit  key_two = P2^1;
sbit  led_one = P1^0;
sbit  led_two = P1^1;


void delay(unsigned int millisecond)
{
       unsigned int i,j;
       for(i=millisecond;i >0;i--)
              for(j=120;j >0;j--);
}


void key_scan()
{
         if( key_one == 0 )
             {
                       delay(10);
                            if( key_one == 0 )
                            {
                                   while(!key_one);
                                   led_one = !led_one;
                            }
              }              
         if( key_two == 0 )
              {
                       delay(10);
                            if( key_two == 0 )
                            {
                                   while(!key_two);
                                   led_two = !led_two;
                            }
              }                     


 }


void main(void)
{ 
   unsigned int i;
        led_one = 1;
        led_two = 1;
        while(1)
        {
               key_scan();
        }
 }

位變量key_one和key_two為單片機P2.0端口和P2.1端口,用于檢測按鍵狀態。位變量led_one和led_two為單片機P1.0和P1.1端口,用于控制D1和D2的狀態。函數delay()是延遲函數,參數millisecond用于設置延遲的毫秒數。

key_scan是按鍵檢測函數,分別檢測P2.0端口和P2.1端口電平變化,若檢測到端口電平為低電平時,延時10ms后,若該端口依然是低電平,則確認與該端口連接的按鍵被按下,然后使用while循環等待按鍵的釋放,循環條件是端口變換為高電平,最后取反led_one或led_two的電平。

main()函數主要完成按鍵的循環檢測,具體實現方法是在函數內部實現一個無限循環結構,在循環結構內調用key_scan()函數。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6008

    文章

    44087

    瀏覽量

    623128
  • 鍵盤
    +關注

    關注

    4

    文章

    846

    瀏覽量

    39125
  • 端口
    +關注

    關注

    4

    文章

    838

    瀏覽量

    31688
  • 鍵盤檢測
    +關注

    關注

    0

    文章

    4

    瀏覽量

    5774
收藏 人收藏

    評論

    相關推薦

    基于單片機的矩陣鍵盤檢測案例

    占用過多的I/O端口資源,導致單片機與其它外部設備無法連接。在這種情況下,可以使用矩陣鍵盤,實現多個按鍵與單片機的連接,而且不浪費單片機的I
    的頭像 發表于 10-31 14:35 ?747次閱讀
    基于<b class='flag-5'>單片機</b>的矩陣<b class='flag-5'>鍵盤</b><b class='flag-5'>檢測</b>案例

    單片機原理及應用:仿真4-4 矩陣鍵盤單列檢測編程#單片機

    單片機鍵盤矩陣鍵盤單片機原理
    學習硬聲知識
    發布于 :2022年11月09日 09:06:25

    單片機原理及應用:矩陣鍵盤實驗#單片機

    單片機鍵盤單片機原理
    學習硬聲知識
    發布于 :2022年11月09日 11:44:33

    基于51單片機的紅外PS_2鍵盤的設計與實現

    基于51單片機的紅外PS_2鍵盤的設計與實現
    發表于 08-20 14:38

    基于單片機鍵盤控制

    大家好,我想做一個基于單片機鍵盤控制,通過單片機發送UART串口到電腦串口,從而可以控制電腦上的鍵盤,,比如我按下單片機一個鍵,那么電腦在
    發表于 01-14 09:24

    獨立鍵盤檢測與矩陣鍵盤檢測

    鍵盤檢測1、工作原理打開單片機原理圖文件,找到獨立鍵盤的原理圖:上圖中89C52與獨立鍵盤的連接引腳沒有標出來,可以再在原理圖文件中找到89
    發表于 07-20 06:20

    矩陣鍵盤檢測獨立按鍵與單片機連接

    4.2 矩陣鍵盤檢測獨立按鍵與單片機連接時,每個按鍵都需要單片機的一個I/O口,若單片機系統需要較多按鍵,如果用獨立按鍵,會占用過多的I/O
    發表于 02-22 06:14

    單片機鍵盤掃描之狀態機實現

    單片機鍵盤掃描之狀態機實現:在編寫單片機程序的過程中,鍵盤作為一種人機接口的實現方式,是很常用的
    發表于 09-26 10:37 ?205次下載

    單片機I/O口鍵盤擴展方法

    〔摘要〕介紹了幾種通過單片機1/O口鍵盤擴展的方法。主要探討了幾種采用較少的1/O口實現較多按鍵的方法?!碴P鍵詞〕單片機;1/O口;鍵盤擴展
    發表于 07-05 10:37 ?100次下載

    基于單片機鍵盤接口的設計與實現

    文章詳細介紹了基于單片機鍵盤接口的設計與實現。實際使用結果表明,該鍵盤接口電路設計簡單,鍵盤處理程序運行穩定可靠,具有推廣價值。
    發表于 03-28 17:35 ?9次下載

    獨立鍵盤檢測原理及程序實現方法

    由于在單片機在應用系統中,更多的會用到獨立鍵盤,加之兩者的檢測原理基本相似,所以這一節里我主要講解獨立鍵盤檢測原理及程序
    發表于 05-13 09:41 ?1w次閱讀

    單片機鍵盤檢測與應用

    非編碼鍵盤通常又分為獨立鍵盤和矩陣鍵盤兩大類。所謂獨立鍵盤是指按鍵在與單片機相連時,每一個按鍵都與一個
    的頭像 發表于 09-18 16:34 ?4978次閱讀

    51單片機鍵盤檢測原理

    一、獨立鍵盤檢測1、按鍵的檢測原理單片機的I/O口既可以作為輸出也可以作為輸入使用,檢測按鍵時用的是輸入功能。把按鍵的一端接地,另一端與
    發表于 11-10 18:46 ?36次下載
    51<b class='flag-5'>單片機</b>的<b class='flag-5'>鍵盤</b><b class='flag-5'>檢測</b>原理

    PIC單片機矩陣鍵盤檢測原理及實現

    PIC單片機矩陣鍵盤檢測原理及實現
    發表于 11-16 11:51 ?2次下載
    PIC<b class='flag-5'>單片機</b>矩陣<b class='flag-5'>鍵盤</b><b class='flag-5'>檢測</b>原理及<b class='flag-5'>實現</b>

    PIC單片機矩陣鍵盤檢測原理及實現

    PIC單片機矩陣鍵盤檢測原理及實現
    發表于 11-16 12:51 ?7次下載
    PIC<b class='flag-5'>單片機</b>矩陣<b class='flag-5'>鍵盤</b><b class='flag-5'>檢測</b>原理及<b class='flag-5'>實現</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>