新闻中心

EEPW首页>嵌入式系统>设计应用> 51单片机的4X4矩阵键盘的C语言程序

51单片机的4X4矩阵键盘的C语言程序

作者: 时间:2016-11-28 来源:网络 收藏
#include
/////////////////////////////////////////数码管常量/////////////////////////////////////////////////////////
unsigned charcode table[]={0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90}; // LED段码
unsigned char code position[]={1,2,4,8}; //LED选位码
/////////////////////////////////////////延时函数////////////////////////////////////////////////////////////
延时t毫秒
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void delay_ms(unsigned char t)
{
unsigned char t2=126;
while(t--)while(t2--);
}
///////////////////////////// 数码管显示函数 ////////////////////////////////////////////////////////////////////////
参数:待显示的数据
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void led_display(unsigned int dat )
{
unsigned int dat1=dat000; //四位数码管只能显示到一千,此处用于防止溢出
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);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
按键扫描函数
若有按键按下:返回 键值(1-16);
若没按键按下:返回 255
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char getch ( )
{
unsigned char X=0,
Y=0,
Z=0,
k=255;
P2=0xff;
P2=0x0f; //先对P2置数 行扫描
if(P2!=0x0f) //判断是否有键按下
{
//延时,软件去干扰
if(P2!=0x0f) //确认按键按下X = P2;
{
X=P2; //保存行扫描时有键按下时状态
P2=0xf0; //列扫描
Y=P2; //保存列扫描时有键按下时状态
Z=X|Y; //取出键值
switch ( Z ) //判断键值(那一个键按下)
{
case 0xee: k=0; break; //对键值赋值
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); //显示按键值
}
}


评论


技术专区

关闭