導航:首頁 > 操作系統 > 51單片機矩陣鍵盤程序

51單片機矩陣鍵盤程序

發布時間:2025-06-12 20:46:38

❶ 51單片機矩陣4*4鍵盤程序,P0口接一個數碼管,P2口接矩陣鍵盤

////給你一個例子,自己再改改:
/*-----------------------------------------------
名稱:矩陣鍵盤
論壇:www.doflye.net
編寫:shifang
日期:2009.5
修改:無
內容:
------------------------------------------------*/
#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
#include"keyboard.h"
#include"delay.h"

#define KeyPort P1

/*------------------------------------------------
按鍵掃描函數,返回掃描鍵值
------------------------------------------------*/
unsigned char KeyScan(void) //鍵盤掃描函數,使用行列反轉掃描法
{
unsigned char cord_h,cord_l;//行列值中間變數
KeyPort=0x0f; //行線輸出全為0
cord_h=KeyPort&0x0f; //讀入列線值
if(cord_h!=0x0f) //先檢測有無按鍵按下
{
DelayMs(10); //去抖
if((KeyPort&0x0f)!=0x0f)
{
cord_h=KeyPort&0x0f; //讀入列線值
KeyPort=cord_h|0xf0; //輸出當前列線值
cord_l=KeyPort&0xf0; //讀入行線值

while((KeyPort&0xf0)!=0xf0);//等待松開並輸出

return(cord_h+cord_l);//鍵盤最後組合碼值
}
}return(0xff); //返回該值
}
/*------------------------------------------------
按鍵值處理函數,返回掃鍵值
可以根據需要改變返回值

| 1 | 2 | 3 | + |
| 4 | 5 | 6 | - |
| 7 | 8 | 9 | * |
| 0 | . | = | / |
------------------------------------------------*/
unsigned char KeyPro(void)
{
switch(KeyScan())
{
case 0x7e:return 1 ;break;//0 按下相應的鍵顯示相對應的碼值
case 0x7d:return 2 ;break;//1
case 0x7b:return 3 ;break;//2
case 0x77:return '+';break;//3

case 0xbe:return 4 ;break;//4
case 0xbd:return 5 ;break;//5
case 0xbb:return 6 ;break;//6
case 0xb7:return '-';break;//7

case 0xde:return 7 ;break;//8
case 0xdd:return 8 ;break;//9
case 0xdb:return 9 ;break;//a
case 0xd7:return 'x';break;//b

case 0xee:return 0 ;break;//c
case 0xed:return '.';break;//d
case 0xeb:return '=';break;//e
case 0xe7:return '/';break;//f
default:return 0xff;break;
}
}

❷ 51單片機矩陣鍵盤程序:想把按鍵的值一一存到數組里,最後按下某個按鍵時,把數組里的某個數顯示出來,

給一個鍵盤掃描程序參考:
voiddelay(unsignedinta)
{
unsignedinti,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
ucharkbscan(void)
{
unsignedcharsccode,recode;
P1=0x0f;//發0掃描,列線輸入
if((P2&0x0f)!=0x0f)//有鍵按下
{
delay(20);//延時去抖動
if((P1&0x0f)!=0x0f)
{
sccode=0xef;//逐行掃描初值
while((sccode&0x01)!=0)
{
P1=sccode;
if((P1&0x0f)!=0x0f)
{
recode=(P1&0x0f)|0xf0;
while((P1&0x0f)!=0x0f);//等待鍵抬起
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return0;//無鍵按下,返回0
}

uchargetkey(void)
{
unsignedcharkey,keyval=0xff;
key=kbscan();
switch(key)
{
case0x11:keyval=1;break;
case0x12:keyval=2;break;
case0x14:keyval=3;break;
case0x18:keyval=10;break; //+
case0x21:keyval=4;break;
case0x22:keyval=5;break;
case0x24:keyval=6;break;
case0x28:keyval=11;break; //-
case0x41:keyval=7;break;
case0x42:keyval=8;break;
case0x44:keyval=9;break;
case0x48:keyval=12;break; //清除
case0x81:keyval=13;break;
case0x82:keyval=0;break;
case0x84:keyval=14;break; //小數點
case0x88:keyval=15;break; //確認
default:keyval=16;break;
}
return(keyval);
}

❸ 求大神,51單片機矩陣鍵盤問題!!!

我給個程序你參考一下

程序:

#include<reg52.h>

#include<intrins.h>

#defineucharunsignedchar

#defineuintunsignedint

ucharkey=16,key_t=16;

sbitan=P2^0;

sbitwei=P2^1;

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//共陰數碼管段選碼表,無小數點

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

voiddelay(uintms)

{

uchari;

while(ms--)

for(i=0;i<110;i++);

}

voidkey_tst()

{

ucharkess;

if(P1!=0xf0)

delay(5);

if(P1!=0xf0)

{

P1=0x0f;

delay(3);

kess=P1^0x0f; //P1口的狀態導或上0x0f,如果下了高4位不管,看低4位是多少

switch(kess)

{

case1:key=0;break;

case2:key=1;break;

case4:key=2;break;

case8:key=3;break;

default:key=16;

}

P1=0xf0;

delay(1);

kess=P1>>4^0x0f;

switch(kess)

{

case1:key+=12;break;

case2:key+=8;break;

case4:key+=4;break;

case8:key+=0;break;

default:key=16;

}

}

}

voidmain()

{

P0=0x00;

while(1)

{

key_tst();

P0=table[key];

an=1;

an=0;

P0=0x7f;

wei=1;

wei=0;

delay(2);

}

}

閱讀全文

與51單片機矩陣鍵盤程序相關的資料

熱點內容
誰鼓勵c程序員向c轉變 瀏覽:985
安卓發說說改蘋果11用什麼軟體 瀏覽:720
河源文檔加密電話 瀏覽:175
python適用於什麼 瀏覽:521
app暢讀模式怎麼開 瀏覽:907
plc編程筆記本電腦 瀏覽:809
專業程序員招聘網站 瀏覽:475
安卓如何微信置頂文案 瀏覽:815
linuxsocket文件描述符 瀏覽:494
java中的model 瀏覽:864
海康威視手機客戶端顯示加密 瀏覽:29
阿里雲伺服器地區選錯了有影響嗎 瀏覽:16
重慶空氣壓縮機 瀏覽:205
郵政銀行app怎麼交小兒醫保 瀏覽:82
函數式編程優勢 瀏覽:647
qt使用yasm編譯 瀏覽:681
黃金指標源碼怎麼用 瀏覽:495
怎麼用vim運行python 瀏覽:681
3d命令面板在哪裡找 瀏覽:894
java遞歸菜單 瀏覽:921