矩阵按键扫描程序c语言,矩阵按键扫描程序的一些疑惑(已解决)

/********************************************************************

* 文件名  : 矩阵键盘.c

* 描述    :  该文件实现了 4 * 4 键盘的试验。通过数码管的最后一位来显示

当前的按键值。

* 创建人  : 东流,2009年4月10日

* 版本号  : 2.0

*********************************************************************/

#include

#include

#define uint unsigned int

#define uchar unsigned char

uchar code table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/********************************************************************

* 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x

* 输入 : x (延时一毫秒的个数)

* 输出 : 无

***********************************************************************/

void Delay_1ms(uint i)//1ms延时

{

uchar x,j;

for(j=0;j

for(x=0;x<=148;x++);

}

/********************************************************************

* 名称 : Keyscan()

* 功能 : 实现按键的读取。下面这个子程序是按处理 矩阵键盘 的基本方法处理的。

* 输入 : 无

* 输出 : 按键值

***********************************************************************/

uchar Keyscan(void)

{

uchar i,j, temp, Buffer[4] = {0xfe, 0xfd, 0xfb, 0xf7};                        //让矩阵键盘的每行分别为低电平

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

{

P1 = Buffer[j];

temp = 0x10;

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

{

if(!(P1 & temp))                 //判断P1口高4位某一行为低电平

{

return (i+j*4);                //返回键码

}

temp <<= 1;

}

}

}

/********************************************************************

* 名称 : Main()

* 功能 : 主函数

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Main(void)

{

uchar Key_Value;  //读出的键值

while(1)

{

P1 = 0xf0;

if(P1 != 0xf0)                        //判断有无按键按下

{

Delay_1ms(20);                //按键消抖

if(P1 != 0xf0)                //第二次判断有无按键按下

{

Delay_1ms(20);  //按键消抖

if(P1 != 0xf0)        //第三次判断有无按键按下

{

Key_Value = Keyscan();

}

}

}

P0 = table[Key_Value];

P2 = 0x07;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值