導航:首頁 > 操作系統 > 單片機鍵盤掃描程序

單片機鍵盤掃描程序

發布時間:2022-02-18 02:32:01

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

要不要我幫你寫一段,你後面沒掃描,當然無法獲取鍵值
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

㈡ 單片機四個鍵的獨立式鍵盤掃描匯編程

參考:
uchar read_key(void)
{
uchar x1, x2;
KEY_IO = 255;
x1 = KEY_IO;
if (x1 != 255) {
delay(100);
x2 = KEY_IO;
if (x1 != x2) return 255;
while(x2 != 255) x2 = KEY_IO;
if (x1 == 0x7f) RST();
else if (x1 == 0xbf) DISPLAY();
else if (x1 == 0xdf) TEMP++;
else if (x1 == 0xef) TEMP--;
}
return 255;
}

㈢ 單片機矩陣鍵盤掃描程序

P3=0x7f;
temp=P3;
temp的值是實時的P3口的值,還是等於0x7f?
temp 的值,是 P3 外部引腳輸入的值。
具體是何值?取決於 P3 外接的電路。
如果 P3 外面,八個引腳,都接地,那麼:
temp 就是 0000 0000。

㈣ 51單片機 鍵盤掃描程序

P2的按鍵掃描跟實時鍾模塊共用IO了,雖然幾率很小但是還是會有幾率誤觸發導致數據讀取錯誤。

㈤ 單片機鍵盤掃描。

兄弟,你好

void key()
{uchar key1,key2,key3; 這條語句後就key1=key2=key3=0了,肯定就一直在key()函數中一直不出來了撒,你的key1等是按鍵,怎麼沒有分配一個IO口呢

你如果這樣的話就可以了
void key()
{uchar key1,key2,key3;
key1=key2=key3=1;這樣的話就不會一直在key()中了

要想達到效果,估計你還的弄幾個按鍵
添幾句

sbit key1=P3^0;
。。。。。。
再把 uchar key1,key2,key3;這一句刪了,

你試一下,祝你成功

㈥ 尋單片機「經典鍵盤」的掃描程序(要C語言的)

uchar keyscan()
{
uchar key,i,keyscan;
P3=0x3d; //准備讀取P3.2~P3.5 51的I/0為准雙向I/0口 作為輸入是最好先將其置1
//讀取接地按鍵值
if((P1&0x3d)!=0x3d){ //若無按鍵按下 P3.2~P3.5為高
delay(); //延時去抖動
if((P1&0x3d)!=0x3d){//判斷哪個按鍵按下
key=P1&0x3d;
return key;
}
}

keyscan=0x3D;
for(i=0;i<4;i++){
P1=keyscan; //輸出I/O口掃描 輸出 判斷
if(P1!=keyscan){ //讀取I/O口,看輸出掃P1.0~P1.5的值是否與掃描不同
key=P1&0x3D; //轉換掃描碼
return key;
}
keyscan=(keyscan<<1)|0x01; //逐行輸出掃描 0
}
return 0;
}

㈦ 單片機4*4鍵盤掃描程序

這這個循環4次的程序段就是發送掃描碼,再分別檢測按鍵情況的。掃描碼就是k_out,分別是0xfe;0xfd;0xfb,0xf7;這幾個數是靠k_out=crol_(k_out,1);來實現的。鍵盤掃描,你要理解是「掃描」也就是一行一行的發送掃描碼,再檢測每「列」的值,這個值就是鍵值。

㈧ 單片機鍵盤掃描C程序

uchar code act[4]={0xfe,0xfd,0xfb,0xf7};
char scan_key(void)
{
uchar i,j,in,ini,inj;
bit find=0;
for(i=0;i<4;i++)
{ //額 ,先給你解釋下4*4
P1=act[i]; //開通讀取,並輸出高電平
delay(10); //延時
in=P1; //讀取單片機值並賦值給in,四種情況4個按鍵,
in=in>>4; //右移四位,去掉低位
in=in|0xf0; //位或運算,高四位補1,
for(j=0;j<4;j++)
{
if(act[j]==in) //判斷具體哪個按鍵
{
find=1;
inj=j;ini=i;
}
}
}
if(find==0)return-1; //返回值 -1,return 1是正常返回,return -1是非正常返回 程序寫法標准而已,即沒按鍵
return(ini*4+inj); //i是判斷高四位,j判斷低4位
}

0 1 2 3 p1.0 p1.0為零 可判斷0,1,2,3 如果開關0導通 p4即為0,即為1110 1110

4 5 6 7 p1.1 右移補1,得 1111 1110,及j為0

8 9 a b p1.2 開關1導通 p5為0, 即 1101 1110, 右移補1111 1101

c d e f p1.3 可判斷j為1 同理可類推

p4 5 6 7

按這種思路4個埠只能實現4個開關4*4=16,2*2=4 得換思路,如果是因為埠緊張的話,可以用P3口,或者採用分壓讀取AD判斷按鍵(AD鍵盤)

㈨ 單片機按鍵掃描程序

KEY: MOV A,P1
CLR C
SUBB A,#1
MOV 20H,A
RET
這樣得不到鍵值呀
改:
KEY: MOV A,P1
SETB C
MOV R7,#8
LPKEY:
RRC A
JNC OUTK1
DJNZ R7,LPKEY

OUTK1: DEC R7
MOV 20H,R7 //如果20H=255則表無鍵
RET

㈩ 單片機的獨立鍵盤掃描程序

這是keil 的語法規定的,在程序中不能有類似的P3^4的寫法的。必須在主程序之前用sbit 命令定義成符號,所以,
if(P3^4==0)的寫法是錯誤的,只有if(key==0)的寫法才是正確的。
雖然編譯是通過的,也沒有報錯,但是編譯後的代碼卻是錯誤的。
如果懂得匯編代碼,是可以查編譯後的匯編代碼,就知道是錯的。

閱讀全文

與單片機鍵盤掃描程序相關的資料

熱點內容
程序員測試輕松嗎 瀏覽:164
英雄聯盟神魔怎麼綁定伺服器 瀏覽:980
音樂app怎麼換音質 瀏覽:974
python進階客戶流失 瀏覽:280
華為榮耀10伺服器地址 瀏覽:998
javastring相等判斷 瀏覽:411
程序員考研究生學校 瀏覽:935
java卡頓 瀏覽:500
編程軟體怎麼運行zip文件 瀏覽:505
單片機怎麼做組態 瀏覽:899
android參考文獻外文 瀏覽:684
銅電極電流效率的演算法 瀏覽:142
簡訊內存已滿怎麼處理安卓 瀏覽:312
ogg命令 瀏覽:784
南昌程序員最新消息 瀏覽:151
藍牙編程入門書籍 瀏覽:763
單片機秒錶實驗 瀏覽:411
小米3文件夾設置 瀏覽:566
手動添加dns伺服器加什麼數字 瀏覽:563
單片機中三位數碼管原件 瀏覽:142