新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)的4X4矩陣鍵盤(pán)的C語(yǔ)言程序

51單片機(jī)的4X4矩陣鍵盤(pán)的C語(yǔ)言程序

作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
#include
/////////////////////////////////////////數(shù)碼管常量/////////////////////////////////////////////////////////
unsigned charcode table[]={0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90}; //LED段碼
unsigned char code position[]={1,2,4,8}; //LED選位碼
/////////////////////////////////////////延時(shí)函數(shù)////////////////////////////////////////////////////////////
延時(shí)t毫秒
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void delay_ms(unsigned char t)
{
unsigned char t2=126;
while(t--)while(t2--);
}
///////////////////////////// 數(shù)碼管顯示函數(shù) ////////////////////////////////////////////////////////////////////////
參數(shù):待顯示的數(shù)據(jù)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void led_display(unsigned int dat )
{
unsigned int dat1=dat000; //四位數(shù)碼管只能顯示到一千,此處用于防止溢出
P0=table[dat1/1000]|position[0];
delay_ms(2);
P0=table[(dat100)/100]|position[1];
delay_ms(2);
P0=table[dat10/10]|position[2];
delay_ms(2);
P0=table[(dat1)]|position[3];
delay_ms(2);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
按鍵掃描函數(shù)
若有按鍵按下:返回 鍵值(1-16);
若沒(méi)按鍵按下:返回 255
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char getch ( )
{
unsigned char X=0,
Y=0,
Z=0,
k=255;
P2=0xff;
P2=0x0f; //先對(duì)P2置數(shù) 行掃描
if(P2!=0x0f) //判斷是否有鍵按下
{
//延時(shí),軟件去干擾
if(P2!=0x0f) //確認(rèn)按鍵按下X = P2;
{
X=P2; //保存行掃描時(shí)有鍵按下時(shí)狀態(tài)
P2=0xf0; //列掃描
Y=P2; //保存列掃描時(shí)有鍵按下時(shí)狀態(tài)
Z=X|Y; //取出鍵值
switch ( Z ) //判斷鍵值(那一個(gè)鍵按下)
{
case 0xee: k=0; break; //對(duì)鍵值賦值
case 0xde: k=1; break;
case 0xbe: k=2; break;
case 0x7e: k=3; break;
case 0xed: k=4; break;
case 0xdd: k=6; break;
case 0xbd: k=7; break;
case 0x7d: k=8; break;
case 0xeb: k=9; break;
case 0xdb: k=7; break;
case 0xbb: k=10;break;
case 0x7b: k=11;break;
case 0xe7: k=12;break;
case 0xd7: k=13;break;
case 0xb7: k=14;break;
case 0x77: k=15;break;
}
while(P2!=0xf0);
}
}
return k;
}
void main()
{
unsigned char temp=0,key=255;
while(1)
{
key=getch(); //掃描
if(key!=255)temp=key; //有按鍵按下
led_display(temp); //顯示按鍵值
}
}


評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉