您的位置 首页 硬件

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

includeAT89X52H>数码管常量uns

#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); //显现按键值
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/255865.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部