0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用單片機(jī)設(shè)計(jì)實(shí)現(xiàn)鍵盤的資料和源代碼概述

Wildesbeast ? 來源:單片機(jī)教程網(wǎng) ? 作者:h1654155169.2086 ? 2020-05-05 14:12 ? 次閱讀

1.實(shí)驗(yàn)任務(wù)

如圖4.14.2所示,用AT89S51的并行口P1接4×4矩陣鍵盤,以P1.0-P1.3作輸入線,以P1.4-P1.7作輸出線;在數(shù)碼管上顯示每個(gè)按鍵的“0-F”序號。對應(yīng)的按鍵的序號排列如圖4.14.1所示

圖4.14.1

2.硬件電路設(shè)計(jì)原理圖

圖4.14.2

3.系統(tǒng)板上硬件連線設(shè)計(jì)

(1. 把“單片機(jī)系統(tǒng)“區(qū)域中的P3.0-P3.7端口用8芯排線連接到“4X4行列式鍵盤”區(qū)域中的C1-C4R1-R4端口上;

(2. 把“單片機(jī)系統(tǒng)”區(qū)域中的P0.0/AD0-P0.7/AD7端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個(gè)a-h(huán)端口上;要求:P0.0/AD0對應(yīng)著a,P0.1/AD1對應(yīng)著b,……,P0.7/AD7對應(yīng)著h。

4. 程序設(shè)計(jì)內(nèi)容

(1. 4×4矩陣鍵盤識(shí)別處理

(2. 每個(gè)按鍵有它的行值和列值,行值和列值的組合就是識(shí)別這個(gè)按鍵的編碼。矩陣的行線和列線分別通過兩并行接口CPU通信。每個(gè)按鍵的狀態(tài)同樣需變成數(shù)字量“0”和“1”,開關(guān)的一端(列線)通過電阻接VCC,而接地是通過程序輸出數(shù)字“0”實(shí)現(xiàn)的。鍵盤處理程序的任務(wù)是:確定有無鍵按下,判斷哪一個(gè)鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開時(shí)的抖動(dòng)。兩個(gè)并行口中,一個(gè)輸出掃描碼,使按鍵逐行動(dòng)態(tài)接地,另一個(gè)并行口輸入按鍵狀態(tài),由行掃描值和回饋信號共同形成鍵編碼而識(shí)別按鍵,通過軟件查表,查出該鍵的功能。

5.程序框圖

圖4.14.3

6.匯編程序代碼

KEYBUF EQU 30H

ORG 00H

START: MOV KEYBUF,#2

WAIT:

MOV P3,#0FFH

CLR P3.4

MOV A,P3

ANL A,#0FH

XRL A,#0FH

JZ NOKEY1

LCALL DELY10MS

MOV A,P3

ANL A,#0FH

XRL A,#0FH

JZ NOKEY1

MOV A,P3

ANL A,#0FH

CJNE A,#0EH,NK1

MOV KEYBUF,#0

LJMP DK1

NK1: CJNE A,#0DH,NK2

MOV KEYBUF,#1

LJMP DK1

NK2: CJNE A,#0BH,NK3

MOV KEYBUF,#2

LJMP DK1

NK3: CJNE A,#07H,NK4

MOV KEYBUF,#3

LJMP DK1

NK4: NOP

DK1:

MOV A,KEYBUF

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P0,A

DK1A: MOV A,P3

ANL A,#0FH

XRL A,#0FH

JNZ DK1A

NOKEY1:

MOV P3,#0FFH

CLR P3.5

MOV A,P3

ANL A,#0FH

XRL A,#0FH

JZ NOKEY2

LCALL DELY10MS

MOV A,P3

ANL A,#0FH

XRL A,#0FH

JZ NOKEY2

MOV A,P3

ANL A,#0FH

CJNE A,#0EH,NK5

MOV KEYBUF,#4

LJMP DK2

NK5: CJNE A,#0DH,NK6

MOV KEYBUF,#5

LJMP DK2

NK6: CJNE A,#0BH,NK7

MOV KEYBUF,#6

LJMP DK2

NK7: CJNE A,#07H,NK8

MOV KEYBUF,#7

LJMP DK2

NK8: NOP

DK2:

MOV A,KEYBUF

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P0,A

DK2A: MOV A,P3

ANL A,#0FH

XRL A,#0FH

JNZ DK2A

NOKEY2:

MOV P3,#0FFH

CLR P3.6

MOV A,P3

ANL A,#0FH

XRL A,#0FH

JZ NOKEY3

LCALL DELY10MS

MOV A,P3

ANL A,#0FH

XRL A,#0FH

JZ NOKEY3

MOV A,P3

ANL A,#0FH

CJNE A,#0EH,NK9

MOV KEYBUF,#8

LJMP DK3

NK9: CJNE A,#0DH,NK10

MOV KEYBUF,#9

LJMP DK3

NK10: CJNE A,#0BH,NK11

MOV KEYBUF,#10

LJMP DK3

NK11: CJNE A,#07H,NK12

MOV KEYBUF,#11

LJMP DK3

NK12: NOP

DK3:

MOV A,KEYBUF

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P0,A

DK3A: MOV A,P3

ANL A,#0FH

XRL A,#0FH

JNZ DK3A

NOKEY3:

MOV P3,#0FFH

CLR P3.7

MOV A,P3

ANL A,#0FH

XRL A,#0FH

JZ NOKEY4

LCALL DELY10MS

MOV A,P3

ANL A,#0FH

XRL A,#0FH

JZ NOKEY4

MOV A,P3

ANL A,#0FH

CJNE A,#0EH,NK13

MOV KEYBUF,#12

LJMP DK4

NK13: CJNE A,#0DH,NK14

MOV KEYBUF,#13

LJMP DK4

NK14: CJNE A,#0BH,NK15

MOV KEYBUF,#14

LJMP DK4

NK15: CJNE A,#07H,NK16

MOV KEYBUF,#15

LJMP DK4

NK16: NOP

DK4:

MOV A,KEYBUF

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P0,A

DK4A: MOV A,P3

ANL A,#0FH

XRL A,#0FH

JNZ DK4A

NOKEY4:

LJMP WAIT

DELY10MS:

MOV R6,#10

D1: MOV R7,#248

DJNZ R7,$

DJNZ R6,D1

RET

TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H

DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H

END

7. C語言源程序

#include 《AT89X51.H》

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

unsigned char temp;

unsigned char key;

unsigned char i,j;

void main(void)

{

while(1)

{

P3=0xff;

P3_4=0;

temp=P3;

temp=temp & 0x0f;

if (temp!=0x0f)

{

for(i=50;i》0;i--)

for(j=200;j》0;j--);

temp=P3;

temp=temp & 0x0f;

if (temp!=0x0f)

{

temp=P3;

temp=temp & 0x0f;

switch(temp)

{

case 0x0e:

key=7;

break;

case 0x0d:

key=8;

break;

case 0x0b:

key=9;

break;

case 0x07:

key=10;

break;

}

temp=P3;

P1_0=~P1_0;

P0=table[key];

temp=temp & 0x0f;

while(temp!=0x0f)

{

temp=P3;

temp=temp & 0x0f;

}

}

}

P3=0xff;

P3_5=0;

temp=P3;

temp=temp & 0x0f;

if (temp!=0x0f)

{

for(i=50;i》0;i--)

for(j=200;j》0;j--);

temp=P3;

temp=temp & 0x0f;

if (temp!=0x0f)

{

temp=P3;

temp=temp & 0x0f;

switch(temp)

{

case 0x0e:

key=4;

break;

case 0x0d:

key=5;

break;

case 0x0b:

key=6;

break;

case 0x07:

key=11;

break;

}

temp=P3;

P1_0=~P1_0;

P0=table[key];

temp=temp & 0x0f;

while(temp!=0x0f)

{

temp=P3;

temp=temp & 0x0f;

}

}

}

P3=0xff;

P3_6=0;

temp=P3;

temp=temp & 0x0f;

if (temp!=0x0f)

{

for(i=50;i》0;i--)

for(j=200;j》0;j--);

temp=P3;

temp=temp & 0x0f;

if (temp!=0x0f)

{

temp=P3;

temp=temp & 0x0f;

switch(temp)

{

case 0x0e:

key=1;

break;

case 0x0d:

key=2;

break;

case 0x0b:

key=3;

break;

case 0x07:

key=12;

break;

}

temp=P3;

P1_0=~P1_0;

P0=table[key];

temp=temp & 0x0f;

while(temp!=0x0f)

{

temp=P3;

temp=temp & 0x0f;

}

}

}

P3=0xff;

P3_7=0;

temp=P3;

temp=temp & 0x0f;

if (temp!=0x0f)

{

for(i=50;i》0;i--)

for(j=200;j》0;j--);

temp=P3;

temp=temp & 0x0f;

if (temp!=0x0f)

{

temp=P3;

temp=temp & 0x0f;

switch(temp)

{

case 0x0e:

key=0;

break;

case 0x0d:

key=13;

break;

case 0x0b:

key=14;

break;

case 0x07:

key=15;

break;

}

temp=P3;

P1_0=~P1_0;

P0=table[key];

temp=temp & 0x0f;

while(temp!=0x0f)

{

temp=P3;

temp=temp & 0x0f;

}

}

}

}

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6030

    文章

    44491

    瀏覽量

    632008
  • 鍵盤
    +關(guān)注

    關(guān)注

    4

    文章

    858

    瀏覽量

    39540
  • 硬件電路
    +關(guān)注

    關(guān)注

    39

    文章

    239

    瀏覽量

    29182
收藏 人收藏

    評論

    相關(guān)推薦

    基于單片機(jī)的12864圖形溫度計(jì)+矩陣鍵盤_源代碼

    基于單片機(jī)的12864圖形溫度計(jì)+矩陣鍵盤源代碼資料來源網(wǎng)絡(luò),如有侵權(quán),敬請見諒
    發(fā)表于 12-28 11:36 ?5次下載

    使用單片機(jī)設(shè)計(jì)888光立方的資料合集包括軟件,源代碼,原理圖等

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)設(shè)計(jì)888光立方的資料合集包括工具軟件,源代碼,原理圖,動(dòng)畫數(shù)組,元件清單等資料免費(fèi)下載。
    發(fā)表于 12-05 08:00 ?54次下載
    使用<b class='flag-5'>單片機(jī)設(shè)</b>計(jì)888光立方的<b class='flag-5'>資料</b>合集包括軟件,<b class='flag-5'>源代碼</b>,原理圖等

    使用51單片機(jī)設(shè)計(jì)遙控解碼通過電腦串口顯示的源代碼資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是基于51單片機(jī)設(shè)計(jì),紅外傳感器接收,單片機(jī)處理后通過串口將解碼傳輸至電腦,keil5工程源代碼
    發(fā)表于 12-10 08:00 ?2次下載
    使用51<b class='flag-5'>單片機(jī)設(shè)</b>計(jì)遙控解碼通過電腦串口顯示的<b class='flag-5'>源代碼</b><b class='flag-5'>資料</b>免費(fèi)下載

    使用51單片機(jī)設(shè)計(jì)的簡易計(jì)算器資料合集免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)設(shè)計(jì)的簡易計(jì)算器資料合集免費(fèi)下載本計(jì)算器是以MCS-51單片機(jī)控制,實(shí)現(xiàn)對4*4鍵盤掃描進(jìn)行實(shí)時(shí)的
    發(fā)表于 01-09 08:00 ?55次下載
    使用51<b class='flag-5'>單片機(jī)設(shè)</b>計(jì)的簡易計(jì)算器<b class='flag-5'>資料</b>合集免費(fèi)下載

    使用STC89C51單片機(jī)設(shè)計(jì)的秒表源代碼和電路圖免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用STC89C51單片機(jī)設(shè)計(jì)的秒表源代碼和電路圖免費(fèi)下載。
    發(fā)表于 01-25 16:52 ?45次下載
    使用STC89C51<b class='flag-5'>單片機(jī)設(shè)</b>計(jì)的秒表<b class='flag-5'>源代碼</b>和電路圖免費(fèi)下載

    使用51單片機(jī)設(shè)計(jì)愛心燈的電路圖和源代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)設(shè)計(jì)愛心燈的電路圖和源代碼免費(fèi)下載。
    發(fā)表于 07-01 17:42 ?12次下載
    使用51<b class='flag-5'>單片機(jī)設(shè)</b>計(jì)愛心燈的電路圖和<b class='flag-5'>源代碼</b>免費(fèi)下載

    使用51單片機(jī)設(shè)計(jì)流水燈的源代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)設(shè)計(jì)流水燈的C語言源代碼免費(fèi)下載。
    發(fā)表于 06-28 17:42 ?5次下載
    使用51<b class='flag-5'>單片機(jī)設(shè)</b>計(jì)流水燈的<b class='flag-5'>源代碼</b>免費(fèi)下載

    使用單片機(jī)設(shè)計(jì)籃球計(jì)時(shí)計(jì)分系統(tǒng)的protues仿真和源代碼資料合集

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)設(shè)計(jì)籃球計(jì)時(shí)計(jì)分系統(tǒng)的protues仿真和源代碼資料合集。
    發(fā)表于 05-28 08:00 ?34次下載
    使用<b class='flag-5'>單片機(jī)設(shè)</b>計(jì)籃球計(jì)時(shí)計(jì)分系統(tǒng)的protues仿真和<b class='flag-5'>源代碼</b><b class='flag-5'>資料</b>合集

    使用ARMK60單片機(jī)設(shè)計(jì)的平衡智能小車源代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用ARMK60單片機(jī)設(shè)計(jì)的平衡智能小車源代碼免費(fèi)下載。
    發(fā)表于 07-22 08:00 ?1次下載
    使用ARMK60<b class='flag-5'>單片機(jī)設(shè)</b>計(jì)的平衡智能小車<b class='flag-5'>源代碼</b>免費(fèi)下載

    基于STM32F103單片機(jī)設(shè)計(jì)的MP3的工程文件和源代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是基于STM32F103單片機(jī)設(shè)計(jì)的MP3的工程文件和源代碼免費(fèi)下載。
    發(fā)表于 10-21 08:00 ?16次下載
    基于STM32F103<b class='flag-5'>單片機(jī)設(shè)</b>計(jì)的MP3的工程文件和<b class='flag-5'>源代碼</b>免費(fèi)下載

    使用單片機(jī)實(shí)現(xiàn)矩陣鍵盤源代碼和工程文件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)矩陣鍵盤源代碼和工程文件免費(fèi)下載。
    發(fā)表于 12-03 11:32 ?11次下載
    使用<b class='flag-5'>單片機(jī)</b><b class='flag-5'>實(shí)現(xiàn)</b>矩陣<b class='flag-5'>鍵盤</b>的<b class='flag-5'>源代碼</b>和工程文件免費(fèi)下載

    使用單片機(jī)設(shè)計(jì)溫度濕度采集系統(tǒng)的源代碼和原理圖免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)設(shè)計(jì)溫度濕度采集系統(tǒng)的源代碼和原理圖免費(fèi)下載。
    發(fā)表于 12-11 08:00 ?7次下載
    使用<b class='flag-5'>單片機(jī)設(shè)</b>計(jì)溫度濕度采集系統(tǒng)的<b class='flag-5'>源代碼</b>和原理圖免費(fèi)下載

    使用單片機(jī)實(shí)現(xiàn)萬年歷的源代碼資料合集免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)萬年歷的源代碼資料合集免費(fèi)下載。
    發(fā)表于 03-12 08:00 ?11次下載
    使用<b class='flag-5'>單片機(jī)</b><b class='flag-5'>實(shí)現(xiàn)</b>萬年歷的<b class='flag-5'>源代碼</b><b class='flag-5'>資料</b>合集免費(fèi)下載

    使用單片機(jī)設(shè)計(jì)紅外遙控風(fēng)扇LCD1602顯示鍵值的源代碼資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)設(shè)計(jì)紅外遙控風(fēng)扇LCD1602顯示鍵值的源代碼資料免費(fèi)下載。
    發(fā)表于 04-08 08:00 ?21次下載
    使用<b class='flag-5'>單片機(jī)設(shè)</b>計(jì)紅外遙控風(fēng)扇LCD1602顯示鍵值的<b class='flag-5'>源代碼</b>和<b class='flag-5'>資料</b>免費(fèi)下載

    使用單片機(jī)設(shè)計(jì)流水燈的源代碼和工程文件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)設(shè)計(jì)流水燈的源代碼和工程文件免費(fèi)下載。
    發(fā)表于 04-29 08:00 ?26次下載
    使用<b class='flag-5'>單片機(jī)設(shè)</b>計(jì)流水燈的<b class='flag-5'>源代碼</b>和工程文件免費(fèi)下載