導航:首頁 > 操作系統 > 單片機中的鍵號

單片機中的鍵號

發布時間:2022-08-28 19:14:37

單片機矩陣鍵盤的鍵號=行首字+列號

這些,都是自定義的。

對於 4*4 的鍵盤,四個行首字,可以定為:0、4、8、12。
它們和行號的關系就是:4 * 行號。

四個列號,可以定為:0、1、2、3。

參考:
http://..com/question/298046533.html

其中檢測按鍵的返回值就是:return (i + j * 4); //如果為0就返回按鍵值

② 關於單片機匯編的MOVCA,@A+DPTR,"@A+"多餘嗎

這個問題很好答嘛。
首先,MOVCA,@A+DPTR這個是51單片機的固有指令,去掉A+,就是錯的。
這個指令的好處在於:當你查表的時候,將表頭地址賦給DPTR,然後將
鍵號傳給A,然後直接通過MOVCA,@A+DPTR,就可以查到鍵號對應的鍵值了。
這里,是循環查表,不需要A就清零A,用DPTR來控制咯,也可以用A來控制,
就是incA,但是一般不這樣用,因為A用到的地方很多,到時候值覆蓋了不好
控制了。

③ 單片機的按鍵功能是什麼

你們知道單片機的每個按鍵的具體功能嗎?下面是我收集整理關於單片機的每個按鍵的具體功能的資料以供大家參考學習,希望大家喜歡。·

單片機的每個按鍵的具體功能介紹

鍵盤的分類:

鍵盤分編碼鍵盤和非編碼鍵盤。

鍵盤上閉合鍵的識別由專用的硬體編碼器實現,並產生鍵編碼號或鍵值的稱為編碼鍵盤,如計算機鍵盤;

而靠軟體編程來識別的稱為非編碼鍵盤。

在單片機組成的各種系統中,用的最多的是非編碼鍵盤。也有用到編碼鍵盤的。

非編碼鍵盤有分為:獨立鍵盤和行列式(又稱為矩陣式)鍵盤。

本文主要討論矩陣鍵盤(獨立鍵盤比較簡單可以與此類比),下面是矩陣鍵盤的電路連接圖。

如果單片機檢測到的是抖動部分,則無法按鍵判斷是否有效,所以我們需要加入防抖程序。

註:也可以通過硬體防抖,如上圖(b)。

功能:矩陣鍵盤

(按相應的按鍵,數碼管從0~F的顯示)

單片機:AT89S52

#include <reg52.h>

#define uint unsigned int

#define uchar unsigned char

sbit DAT=P0^3;

sbit CLK=P0^2;

uchar temp,h;

void delay(uint); //延遲程序

void sendbyte(uchar); //數碼管顯示

void keyscan(); //按鍵掃描

uchar code tab[]={

0xed,0x09,0xbc,0x9d,0x59,0xd5,

0xf5,0x0d,0xfd,0xdd,0x7d,0xf1,

0xe4,0xb9,0xf4,0x74,0x00} ; //0-F, 全滅

void main (void)

{

sendbyte(16); //初始時數碼管無顯示

while(1)

{

keyscan(); //按鍵掃描

}

}

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=100;y>0;y--);

}

void sendbyte(uchar byte)

{

uchar num,c;

num=tab[byte];

for(c=0;c<8;c++)

{

CLK=0;

DAT=num&0x01;

CLK=1;

num>>=1; //右移位賦值

}

}

void keyscan()

{

/*第一行按鍵的掃描*/

P2=0xfe; //確定第一行的按鍵有效

temp=P2; //將其賦給一個變數(處理I/O口時,一般先賦值給一個變數,然後通過處理變數來處理I/O口)

temp=temp&0xf0; //用於檢測第一行的哪個按鍵按下

while(temp!=0xf0) /*這個部分只要是用來消除按下抖動的*/

{

delay(5);

temp=P2;

temp=temp&0xf0;

while(temp!=0xf0) //這個地方,已經消除了按下抖動,P2口的值已經確定

{

temp=P2; //將P2口得值賦給變數

switch(temp) //這個switch語句,用來確定哪一個按鍵按下時,數碼管的顯示值

{

case 0x7e:h=0;

break; //這個break很重要,表示如果有匹配的值,就跳出switch語句,防止程序跳不出來。

case 0xbe:h=1;

break;

case 0xde:h=2;

break;

case 0xee:h=3;

break;

default : h=16;

break;

}

while(temp!=0xf0) /*這個部分只要是用來消除釋放抖動的*/

{

temp=P2;

temp=temp&0xf0;

}

sendbyte(h); //送給數碼管顯示

}

}

/*第二行按鍵的掃描*/

P2=0xfd;

temp=P2;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P2;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P2;

switch(temp)

{

case 0x7d:h=4;

break;

case 0xbd:h=5;

break;

case 0xdd:h=6;

break;

case 0xed:h=7;

break;

default : h=16;

break;

}

while(temp!=0xf0)

{

temp=P2;

temp=temp&0xf0;

}

sendbyte(h);

}

}

/*第三行按鍵的掃描*/

P2=0xfb;

temp=P2;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P2;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P2;

switch(temp)

{

case 0x7b:h=8;

break;

case 0xbb:h=9;

break;

case 0xdb:h=10;

break;

case 0xeb:h=11;

break;

default : h=16;

break;

}

while(temp!=0xf0)

{

temp=P2;

temp=temp&0xf0;

}

sendbyte(h);

}

}

/*第四行按鍵的掃描*/

P2=0xf7;

temp=P2;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P2;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P2;

switch(temp)

{

case 0x77:h=12;

break;

case 0xb7:h=13;

break;

case 0xd7:h=14;

break;

case 0xe7:h=15;

break;

default : h=16;

break;

}

while(temp!=0xf0)

{

temp=P2;

temp=temp&0xf0;

}

sendbyte(h);

}

}

④ 單片機中什麼是鍵值它和鍵編碼有何關系

單片機中,鍵值只有兩個,=1,表示鍵按下了,=0,表示鍵沒有按下(或者是取反邏輯);
單片機要讀到該鍵值,先要知道該鍵的位置,當你安排某個鍵在某埠的某個引腳上後,該鍵的位置就固定下來了,只有鍵值是變化的

⑤ 單片機矩陣鍵盤鍵號的判別

PA口接列線,PC口接行線
掃面列線,讀取行線狀態....行線默認都為高電平,當行線和列線相交時,某一列線為低電平,那麼如果這一列沒有鍵按下,行線的狀態依然為高電平,如果有鍵按下,那麼行線被短路,變為低電平,哪條行線輸出低電平,那麼就是這一行的鍵被按下,又知道是在哪一列,也就完全確定按下的是哪一鍵了...也就是行首號加列號就是鍵號(行號和列號都是從0開始的)
應該是第一行的首鍵號為8,列號為1,所以閉合鍵號為9吧(你自己前面說的也是:閉合鍵的鍵號等於為低電平的列好加上行線為低電平的行的首鍵號)
掃描的意思就是沒開始掃描時,列線全部為高電平,開始掃描時,先第0列變為低電平,其他列仍然是高電平,然後第1列變為低電平,其他列仍然為高電平(包括前面變低電平的0列,現在也恢復高電平了),然後是第2列變為低電平,其他列為高電平,直到第7列為低電平,其他列為高電平,完成一次掃描...
還有「PA口輸出為11111101時,就是第1列輸出為低電平,其他列為高電平,列為輸入口,不讀取它的狀態,行口為輸出口,讀取行狀態,若pc0~pc3輸出1101,如果pc0~pc3依次對應行0~3的話,那麼第2行為低電平(你說:則1行1列相交鍵處於閉合,是pc0~pc3依次對應行3~0的情況),則1列2行相交的鍵閉合,每行有8列,第2行的行首號(因為行號從0開始,所以行號為2的行,按照習慣是第3行)為16,列號為1,那麼鍵號就為16+1=17
下面有掃描2*4鍵盤的匯編程序(你的是4*8,即4行8列的鍵盤),僅供參考
看不懂不強求,希望對你有所幫助
DATA SEGMENT
TABLE DB 『A』 ,『B』 ,『C』 ,『D』 ,『E』 ,『F』 ,『G』 ,『H』
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AL,81H;使8255的A口和C口,並初始化
OUT 63H,AL
START1:
CALL EXAM;判斷是否有鍵按下的子程序
JZ START1
CALL DELAY;延時程序,判斷鍵是否誤按
CALL EXAM
JZ START1;如果是誤按,返回開始處,如果為否,順序執行
MOV CL,00H ;開始鍵號判斷
MOV CH,0FEH
CHECK:
MOV AL,CH
OUT 60H,AL
IN AL,62H ;從c口讀數據,也就是讀取行的狀態...
TEST AL,01H;判斷是否為第0行
JNZ OTHER ;不是,則轉OTHER處
MOV AL,00H ;是的話,行首號置0
JMP KCODE;確定鍵號
OTHER: ;判斷是否第1行
TEST AL,02H
JNZ NEXT ;不是則跳到NEXT處,進行下一列的判斷
MOV AL,04H ;第1行行首號置4
KCODE: ;確定鍵號
ADD AL,CL
MOV BX,OFFSET TABLE
AND AX,0FFH
ADD BX,AX
MOV AL,[BX]
MOV [DI],AL
MOV AH,01H
MOV AL,[DI]
INT 10H
NEXT: ;進行下一列的判斷
INC CL
MOV AL,CH
TEST AL,08H
JZ START1
ROL AL,1
MOV CH,AL
JMP CHECK
EXAM PROC
MOV AL,00H
OUT 60H,AL
IN AL,62H
NOT AL
TEST AL,03H
RET
EXAM ENDP
DELAY PROC
PUSH CX
MOV CX,0010H
T1:
MOV AX,1000H
T2:DEC AX
JNZ T2
LOOP T1
POP CX
RET
DELAY ENDP
CODE ENDS
END START

⑥ 單片機散轉程序中ACALL和SJMP的鍵號必須乘以4才能得到正確的散轉偏移量,為什麼要乘以4

乘以2是常見的,乘以3的也有;
乘以4,不像,請給出程序來分析一下。
---------------------
看明白了。
這書的作者,把各個程序的分支,寫成了「調用子程序+轉移指令」的形式,所以才有了如此「笨重」的散轉方法。
且看它的分支表:
TABLE:
ACALL PRADD ;轉加法子程序 從「TABLE +0」是第O個分支
SJMP PREND ;轉結束

ACALL PRSUB ;轉減法子程序 從「TABLE +4」是第一個分支
SJMP PREND ;轉結束

ACALL PRMUL ;轉乘法子程序 從「TABLE +8」是第二個分支
SJMP PREND ;轉結束

ACALL PRDIV ;轉除法子程序 從「TABLE +12」是第三個分支
SJMP PREND ;轉結束

…… 從「TABLE +…………
……
它的每個分支,都是使用了兩條2位元組的指令,所以各分支,相差4個位元組;如果要根據分支的號碼,找到對應的地址,就應該乘以4。
這種4位元組形式的分支表,所能容納的分支數目,明顯少於2位元組的分支表。這種笨方法,也寫成書,真是不可思議。

⑦ 用單片機編寫的鍵盤掃描程序怎樣編寫它的求鍵號程序

要不要我幫你寫一段,你後面沒掃描,當然無法獲取鍵值
t1:mov
p1,#0fh
;p1介面高4位為0,低4位輸入
mov
a,p1
;讀p1
anl
a,#0fh
;屏蔽高4位
cjne
a,#0fh,t2
;有鍵按下轉t2
sjmp
t1
;無鍵按下轉回
t2:lcall
delay10;延時10ms,去抖
mov
a,p1
;重新掃描p1口
anl
a,#0fh
cjne
a,#0fh,t3
sjmp
t1
t3:mov
r0,#00
;行計數值
mov
r1,#00
;列計數值
mov
r3,#0efh
;掃描初值
t4:mov
a,r3
mov
p1,a;輸出行掃描字
mov
a,p1
mov
r1,a
anl
a,#0fh
cjne
a,#0fh,t5
;該行有鍵按下
inc
r0
;行計數器加1
,掃下一行
MOV
A,R3
RLC
A
MOV
R3,A
MOV
A,R0
CJAE
A,#04H,t4
;掃到最後一行?
t6:
ret
;結束
t5:mov
a,r1
jnb
acc.0,t7
jnb
acc.1,t8
jnb
acc.2,t9
jnb
acc.3,t10
sjmp
t6
t7:
mov
r2,#00
;0列號
sjmp
t11
t8:mov
r2,#01
;1列號
sjmp
t11
t9:mov
r2,#02
;2列號
sjmp
t11
t10:mov
r2,#03
;3列號
t11:mov
a,r0
mov
b,#04
mul
ab
;行號乘4
add
a,r2
;鍵值在A中
ret

⑧ 單片機按鍵功能

按鍵按照結構原理可分為兩類,一類是觸點式開關按鍵,如機械式開關、導電橡膠式開關等;另一類是無觸點式開關按鍵,如電氣式按鍵,磁感應按鍵等。前者造價低,後者壽命長。目前,微機系統中最常見的是觸點式開關按鍵。


2.輸入原理



在單片機應用系統中,除了復位按鍵有專門的復位電路及專一的復位功能外,其它按鍵都是以開關狀態來設置控制功能或輸入數據的。當所設置的功能鍵或數字鍵按下時,計算機應用系統應完成該按鍵所設定的功能,鍵信息輸入是與軟體結構密切相關的過程。

對於一組鍵或一個鍵盤,總有一個介面電路與CPU相連。CPU可以採用查詢或中斷方式了解有無將鍵輸入,並檢查是哪一個鍵按下,將該鍵號送入累加器ACC,然後通過跳轉指令轉入執行該鍵的功能程序,執行完後再返回主程序

⑨ 在單片機中key =1, key =0什麼意思

key是按鍵,一般一端接地,另一端接單片機的IO管腳,所以前面定義sbit
Key=p1𠆢0
按鍵按下時,該管腳為
低電平
,即key=0,否則
key=1

閱讀全文

與單片機中的鍵號相關的資料

熱點內容
linux中命令大全 瀏覽:36
pic單片機學習網站 瀏覽:163
843除6的演算法 瀏覽:376
arduino編程視頻 瀏覽:744
pdf背景綠色 瀏覽:612
記事本dos命令 瀏覽:274
伺服器如何搭建多個節點 瀏覽:326
acx演算法 瀏覽:258
幽冥詭匠漫畫全集用什麼app可以看 瀏覽:1001
租用伺服器為什麼越來越慢 瀏覽:960
演算法創新就業方向 瀏覽:423
演算法最優解作者 瀏覽:868
通達信紅綠寶塔線指標源碼 瀏覽:668
app是什麼東西合法嗎 瀏覽:232
怎麼鎖app視頻教程 瀏覽:841
迅捷pdf注冊碼生成器 瀏覽:750
androidsdkosx 瀏覽:304
壓縮面膜紙熒光 瀏覽:841
app怎麼分身三個 瀏覽:746
電影bt下載源碼 瀏覽:424