// 方法一代码实现
// 变量说明:
// GPIO_KEY 代表控制矩阵按键的IO口,例P1、P2
// matrixkey 代表哪一个按键号,取值[0~15]
//**********
//函数: void matrixkeyscan()
//作用: 矩阵按键扫描函数,检测按下了哪按键,最后调用数码管显示函数
//输入: 无
//输出: 无
//**********
void matrixkeyscan()
{
GPIO_KEY=0x0F; //BIN 0000 1111 (运送行低电平,列高电平)
if(GPIO_KEY != 0x0F) //如果行全为低电平,列如果有一个低电平,即GPIO_KEY != 0x0F,表示有按键按下;相反,GPIO_KEY == 0x0F表示没有按键按下。
{
delay_ms(10); //延时10ms进行消抖
if(GPIO_KEY != 0x0F) //再次检测键盘是否按下
{
//测试列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): matrixkey=0;break; //0000 0111
case(0X0b): matrixkey=1;break; //0000 1011
case(0X0d): matrixkey=2;break; //0000 1101
case(0X0e): matrixkey=3;break; //0000 1110
}
//测试行
GPIO_KEY=0XF0; //1111 0000
switch(GPIO_KEY)
{
case(0X70): matrixkey=matrixkey;break; //0111 0000
case(0Xb0): matrixkey=matrixkey+4;break; //1011 0000
case(0Xd0): matrixkey=matrixkey+8;break; //1101 0000
case(0Xe0): matrixkey=matrixkey+12;break; //1110 0000
}
while(GPIO_KEY != 0xf0); //检测按键松手检测
}
}
}
// 方法一代码实现
// 变量说明:
// GPIO_KEY 代表控制矩阵按键的IO口,例P1、P2
// matrixkey 代表哪一个按键号,取值[0~15]
//**********
//函数: void matrixkeyscan()
//作用: 矩阵按键扫描函数,检测按下了哪按键,最后调用数码管显示函数
//输入: 无
//输出: 无
//**********
void matrixkeyscan()
{
GPIO_KEY=0x0F; //BIN 0000 1111 (运送行低电平,列高电平)
if(GPIO_KEY != 0x0F) //如果行全为低电平,列如果有一个低电平,即GPIO_KEY != 0x0F,表示有按键按下;相反,GPIO_KEY == 0x0F表示没有按键按下。
{
delay_ms(10); //延时10ms进行消抖
if(GPIO_KEY != 0x0F) //再次检测键盘是否按下
{
//测试列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): matrixkey=0;break; //0000 0111
case(0X0b): matrixkey=1;break; //0000 1011
case(0X0d): matrixkey=2;break; //0000 1101
case(0X0e): matrixkey=3;break; //0000 1110
}
//测试行
GPIO_KEY=0XF0; //1111 0000
switch(GPIO_KEY)
{
case(0X70): matrixkey=matrixkey;break; //0111 0000
case(0Xb0): matrixkey=matrixkey+4;break; //1011 0000
case(0Xd0): matrixkey=matrixkey+8;break; //1101 0000
case(0Xe0): matrixkey=matrixkey+12;break; //1110 0000
}
while(GPIO_KEY != 0xf0); //检测按键松手检测
}
}
}
举报