4x4矩阵键盘c语言程序,4×4矩阵键盘C语言程序参考

#define int8 unsigned int

#define int16 unsigned char

#define int32 unsigned long

#define KEY_PORT PORTD

#define KEY_PIN  PIND

#define ROW1  (1<<0)

#define ROW2  (1<<1)

#define ROW3  (1<<2)

#define ROW4  (1<<3)

statIC int8 sCAN_X(void);

static delay(void);

int8 scan_key(void);

/*

函数原型:int8 scan_key(void)

功能:     返回按下的按键的行列值,

如返回第二行第三列,即按键“6”,

返回值0x23,高位为行,低位为列

键盘:

7      8      9      /

4      5      6      *

1      2      3      +

C      0      =      -

返回值:

0x11   0x12   0x13  0x14

0x21   0x22   0x23  0x24

0x31   0x32   0x33  0x34

0x41   0x42   0x43  0x44

作者:     Benny

Email:    89S53@163.com

2005

*/

int8 scan_key(void){

//第四行----------------

KEY_PORT|=0xff;

KEY_PORT&=~ROW4;

if ((KEY_PIN&0xf0)!=0xf0)

{

delay();//去抖动

if ((KEY_PIN&0xf0)!=0xf0)

{

return (0x40|scan_X());

}

}

//第三行----------------

KEY_PORT|=0xff;

KEY_PORT&=~ROW3;

if ((KEY_PIN&0xf0)!=0xf0)

{

delay();//去抖动

if ((KEY_PIN&0xf0)!=0xf0)

{

return (0x30|scan_X());

}

}

//第二行----------------

KEY_PORT|=0xff;

KEY_PORT&=~ROW2;

if ((KEY_PIN&0xf0)!=0xf0)

{

delay();//去抖动

if ((KEY_PIN&0xf0)!=0xf0)

{

return (0x20|scan_X());

}

}

//第一行: 7  8  9  /

KEY_PORT|=0xff;

KEY_PORT&=~ROW1;

if ((KEY_PIN&0xf0)!=0xf0)

{

delay();//去抖动

if ((KEY_PIN&0xf0)!=0xf0)

{

return (0x10|scan_X());

}

}

}

//列扫描函数

static int8 scan_X(void){

if ((KEY_PIN&0xf0)==0xe0)

{ //"7"

while((KEY_PIN&0xf0)==0xe0);

return 0x01; //第一列

}

else if((KEY_PIN&0xf0)==0xd0)

{

while((KEY_PIN&0xf0)==0xd0);

return 0x02;//第二列

}

else if((KEY_PIN&0xf0)==0xb0)

{

while((KEY_PIN&0xf0)==0xb0);

return 0x03;//第三列

}

else if((KEY_PIN&0xf0)==0x70)

{

while((KEY_PIN&0xf0)==0x70);

return 0x04; //第四列

}

}

static delay(void){

//去抖动

int16 i,j;

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

{

for (j=0;j<100;j++)

{}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值