日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单片机--矩阵键盘实验

發布時間:2024/1/1 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机--矩阵键盘实验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 實驗目的和任務
  • 目的:利用“模塊化單片機教學實驗平臺”,加深對單片機與矩陣鍵盤的接口電路設計以及程序設計的理解。

    任務:1、學習獨立式按鍵的查詢識別方法。

    2、非編碼矩陣鍵盤的行反轉法識別方法。

    3、掌握鍵盤接口的基本特點,了解獨立鍵盤和矩陣鍵盤的應用方法。

    4、掌握鍵盤接口的硬件設計方法,軟件程序設計和貼士排錯能力。

    5、掌握利用Keil51軟件對程序進行編譯。

    6、會根據實際功能,正確選擇單片機功能接線,編制正確程序。對實驗結果

  • 實驗原理
  • 1、MCS51系列單片機的P0~P3口作為輸入端口使用時必須先向端口寫入“1”。

    2、用查詢方式檢測按鍵時,要加入延時(通常采用軟件延時10~20mS)以消除抖動。

    3、識別鍵的閉合,通常采用行掃描法和行反轉法。行掃描法是使鍵盤上某一行線為低電平,而其余行接高電平,然后讀取列值,如讀列值中某位為低電平,表明有鍵按下,否則掃描下一行,直到掃完所有行。

    行反轉法識別閉合鍵時,要將行線接一并行口,先讓它工作在輸出方式,將列線也接到一個并行口,先讓它工作于輸入方式,程序使CPU通過輸出端口在各行線上全部送低電平,然后讀入列線值,如此時有某鍵被按下,則必定會使某一列線值為0。然后,程序對兩個并行端口進行方式設置,使行線工作于輸入方式,列線工作于輸出方式,并將剛才讀得的列線值從列線所接的并行端口輸出,再讀取行線上輸入值,那么,在閉合鍵所在行線上的值必定為0。這樣,當一個鍵被接下時,必定可以讀得一對唯一的行線值和列線值。由于51單片機的并口能夠動態地改變輸入輸出方式,因此,矩陣鍵盤采用行反轉法識別最為簡便。

    行反轉法識別按鍵的過程是:首先,將4個行線作為輸出,將其全部置0,4個列線作為輸入,將其全部置1,也就是向P1口寫入0xF0;假如此時沒有人按鍵,從P1口讀出的值應仍為0xF0;假如此時1、4、7、0四個鍵中有一個鍵被按下,則P1.6被拉低,從P1口讀出的值為0xB0;為了確定是這四個鍵中哪一個被按下,可將剛才從P1口讀出的數的低四位置1后再寫入P1口,即將0xBF寫入P1口,使P1.6為低,其余均為高,若此時被按下的鍵是“4”,則P1.1被拉低,從P1口讀出的值為0xBE;這樣,當只有一個鍵被按下時,每一個鍵只有唯一的反轉碼,事先為12個鍵的反轉碼建一個表,通過查表就可知道是哪個鍵被按下了。

  • 實驗內容
  • 使用掃描法通過矩陣鍵盤(2行4列,一共八個按鍵)控制8個LED燈的點亮。按下第一行第一列的按鍵使LED1點亮,其他LED熄滅;按下第一行第二列的按鍵使LED2點亮,其他LED熄滅;按下第一行第三列的按鍵使LED3點亮,其他LED熄滅;按下第一行第四列的按鍵使LED4點亮,其他LED熄滅;按下第二行第一列的按鍵使LED5點亮,其他LED熄滅;按下第二行第二列的按鍵使LED6點亮,其他LED熄滅;按下第二行第三列的按鍵使LED7點亮,其他LED熄滅;按下第二行第四列的按鍵使LED8點亮,其他LED熄滅。

    圖1 LED電路圖

    圖2 按鍵電路圖

    注:把撥碼開關(DIP)撥到斷開的一側。該矩陣鍵盤只用到前兩行,即2*4的矩陣鍵盤。

    表1 硬件連線表

    CPU_CORE_51

    MAIN_BOARD

    P2:P1.0-P1.7

    J14:LINE0-COLUM3

    P3:P2.0-P2.7

    J48:LED1-LED8

    注意:實驗箱的AT89S52單片機的晶振頻率為11.0592MHz!

  • 實驗過程和結果
  • ①關掉實驗電源。將CPU 板插接在JK1、JK2 上,注意CPU 板的插接方向。按照前面連接關系表將硬件連接好。

    ②將AT89S52 芯片插在CPU 板的CPU 插座上(注意不要插反)。母板上電。

    ③運行Keil 開發環境,按照“模塊化單片機教學實驗平臺配套的實驗指導書1.2.3 節”介紹的方法建立工程exp11.uV2,CPU 為AT89S52,不包含啟動文件STARTUP.A51。

    ④編寫匯編語言源程序exp11.asm 完成基本實驗的功能。把源程序exp11.asm加入到工程exp11.uV2,并設置工程exp11.uV2 屬性,將其晶振頻率設置為11.0592MHz,選擇輸出可執行文件。

    ⑤構造(Build)工程exp11.uV2。

    ⑥通過PROGISP 燒寫軟件,利用ISP 下載線(見“模塊化單片機教學實驗平臺配套的實驗指導書1.3 節”)把HEX 文件下載到單片機中。

    ⑦下載成功后,通過按下不同按鍵,觀察LED1~7 的亮滅。

    圖3 實驗結果圖

  • 實驗心得
  • 本次實驗需要先判別整個鍵盤有無按鍵按下,從第0列開始逐列檢測檢測,可以檢測出哪個按鍵被按下。然后用到去除按鍵的抖動。該實驗難度較高,相比以往實驗更考驗綜合能力。如何使用掃線法判斷所在行是實驗的難點所在。實驗中因為對掃線法的理解不深入,在實驗中沒能完成實驗。試驗后仔細閱讀書上的解釋和題本提供的案例程序,我知道了自己實驗失敗的原因所在,并重新設計了程序和實驗。通過學習后,對掃描鍵盤的程序更加了解,將理論上的結果和自己實驗做的結果相印證,對書本上知識掌握的更加牢固,對代碼程序有更加深刻的理解。在實驗中,對模板的使用更加熟練,對電路的連接更加熟練。我對于矩陣鍵盤的工作方式有了更進一步的認識,也對掃描法查詢矩陣鍵號的方法編寫有了更進一步的掌握。單片機提高重在實踐,想要學好單片機,軟件編程必不可少。

  • 附錄(代碼)
  • (1)基本實驗

    ORG 0000H

    LJMP MAIN

    MAIN:MOV P1,#11110000B;給p1口送數11110000

    MOV A,P1?????? ;獲取P1口的電平

    XRL A,#11110000B

    ;將P1口電平與11110000異或運算

    ;若有按鍵按下,A不為0

    JZ MAIN??????? ;無按鍵按鍵則返回

    LCALL TIME_??? ;跳轉到延時程序

    MOV P1,#11110000B

    MOV A,P1

    XRL A,#11110000B?? ;該部分操作與上述操作相同

    MOV R3,A?????? ;保存此時A的值

    JZ MAIN???? ???? ;確認有按鍵按下

    MOV R0,#11110111B;掃描法判斷

    MOV R1,#0????? ;R1存儲列的權值

    I: ???MOV P1,R0????? ;將R0值傳遞給P1

    MOV A,P1?????? ;讀取P1的值

    AAA0:JNB ACC.4,AAA1

    ;如果ACC的第四位(即第一列)不為零

    MOV R1,#0????? ;r1存0

    LJMP OK???? ;跳轉到計算環節

    AAA1: JNB ACC.5,AAA2 ;同上,判斷第二列

    MOV R1,#01

    LJMP OK

    AAA2:JNB ACC.6,AAA3? ;同上,判斷第三列

    MOV R1,#02

    LJMP OK

    AAA3: JNB ACC.7,AAA4 ;同上,判斷第四列

    MOV R1,#03

    LJMP OK

    AAA4:MOV A,R0

    JNB ACC.2,MAIN ;判斷是否結束

    RR A??????? ;環移

    MOV R0,A

    MOV A,R1

    MOV R1,A???

    LJMP I

    TIME_:MOV R0,#05

    TT: ??MOV R1,#250

    DJNZ R1,$

    DJNZ R0,TT

    RET

    OK:???? ;判斷所在行并送數

    MOV A,R1

    ADD A,R0

    MOV R0,A

    MOV A,#1

    INC R0

    AAA:CJNE R0,#0,BBB

    RL A

    INC A

    LJMP AAA

    BBB:MOV P2,A

    LJMP MAIN

    END

    (2)擴展實驗

    ORG 0000H

    LJMP MAIN

    MAIN:MOV P1,#11110000B;送數11110000

    MOV A,P1??? ;取當前P1的值

    XRL A,#11110000B;與11110000與或運算

    JZ MAIN???? ;如果為0則跳轉回

    LCALL TIME_ ;延遲子系統

    MOV P1,#11110000B

    MOV A,P1

    XRL A,#11110000B

    JZ MAIN???? ;再次判斷確定非誤觸

    MOV R3,A??? ;存儲當前A信息

    MOV P1,#00001111B? ;判斷所在列

    MOV A,P1

    XRL A,#00001111B

    MOV R4,A??? ;存至R4

    MOV A,R3

    JNB ACC.1,NEXT1

    MOV R3,#4;若為第二行則若R3存4,否則存0

    LJMP NEXT2

    NEXT1: MOV R3,#0;判斷行,依次為0,1,2,3

    NEXT2:MOV A,R4

    JNB ACC.4,NEXT3

    MOV R4,#0

    LJMP NEXT7

    NEXT3:JNB ACC.5,NEXT4

    MOV R4,#1

    LJMP NEXT7

    NEXT4:JNB ACC.6,NEXT5

    MOV R4,#2

    LJMP NEXT7

    NEXT5:MOV R4,#3

    NEXT7:MOV A,R3

    ADD A,R4????? ;將兩個權值相加

    MOV P2,A????? ;送至P2

    LJMP MAIN

    TIME_:MOV R0,#05

    TT:?? MOV R1,#250

    DJNZ R1,$

    DJNZ R0,TT

    RET

    END

    總結

    以上是生活随笔為你收集整理的单片机--矩阵键盘实验的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。