/* * * * * * * * * * * * * * * * * *
正面是黑色引线,白色引线是列
a、b、c、d分别返回10 11 12 13
*14
#为15
0是16
不按按钮返回0
* * * * * * * * * * * * * * * * *
#include 'key.h '
#include 'delay.h '
//矩阵键盘管脚初始化
voidkey_init(void ) )。
{
gpio _ inittypedefgpio _ init structure;
RCC _ AP B2 periphclockcmd (RCC _ AP B2 per iph _ gpiob|RCC _ AP B2 per iph _ gpiod ); 启用PORTB、PORTD、PORTG时钟
//gpio _ pinremapconfig (gpio _ remap _ swj _ JTAG disable,ENABLE ); 可以关闭jtag并启用SWD,在SWD模式下进行调试。 针脚可能已被占用
gpio _ init structure.gpio _ pin=gpio _ pin _ 14; //键盘输出
gpio _ init structure.gpio _ mode=gpio _ mode _ out _ PP;
gpio _ init structure.gpio _ speed=gpio _ speed _ 50m Hz; //IO端口速度为50MHz
gpio_init(gpiod,GPIO_InitStructure );
gpio _ init structure.gpio _ pin=gpio _ pin _2| gpio _ pin _4| gpio _ pin _ 6; //键盘输出
gpio _ init structure.gpio _ mode=gpio _ mode _ out _ PP;
gpio _ init structure.gpio _ speed=gpio _ speed _ 50m Hz; //IO端口速度为50MHz
gpio_init(gpiog,GPIO_InitStructure );
gpio _ init structure.gpio _ pin=gpio _ pin _ 14; //键盘输入
gpio _ init structure.gpio _ mode=gpio _ mode _ IPU;
gpio_init(gpiob,GPIO_InitStructure );
gpio _ init structure.gpio _ pin=gpio _ pin _8| gpio _ pin _ 10|gpio _ pin _ 12; //键盘输入
gpio _ init structure.gpio _ mode=gpio _ mode _ IPU;
gpio_init(gpiod,GPIO_InitStructure );
}
//mode:0,不支持连击1 )支持连续按
u8key_scan(u8mode ) ) ) ) ) ) ) ) )。
{
静态u8 key0_ up=1; 按下//按钮释放徽标
静态u8 key1_ up=1; 按下//按钮释放徽标
静态u8 key2_ up=1; 按下//按钮释放徽标
静态u8 key3 _ up=1; 按下//按钮释放徽标
静态u8 key4_ up=1; 按下//按钮释放徽标
静态u8 key5_ up=1; 按下//按钮释放徽标
静态u8 key6_ up=1; 按下//按钮释放徽标
静态u8 key7_ up=1; 按下//按钮释放徽标
静态u8 key8_ up=1; 按下//按钮释放徽标
静态u8 key9_ up=1; 按下//按钮释放徽标
static u8 keyA_up=1; 按下//按钮释放徽标
静态u8 keyb _ up=1; 按下//按钮释放徽标
static u8 keyC_up=1; 按下//按钮释放徽标
static u8 keyD_up=1; 按下//按钮释放徽标
static u8 keyX_up=1; 按下//按钮释放徽标
static u8 keyJ_up=1; 按下//按钮释放徽标
是if (模式)
{
key0_up=1;
key1_up=1;
key2_up=1;
key3_up=1;
key4_up=1;
p>key5_up=1;
key6_up=1;
key7_up=1;
key8_up=1;
key9_up=1;
keyA_up=1;
keyB_up=1;
keyC_up=1;
keyD_up=1;
keyX_up=1;
keyJ_up=1;
}
//第一行
Hang_00_L;//把第一行输出低电平
Hang_01_H;
Hang_02_H;
Hang_03_H;
if(key1_up&&Lie_00_V==0)
{
delayMs(jpys); //延时20秒,软件消抖
key1_up=0;
if(Lie_00_V==0) //如果第一列是低电平,说明有键被按下,如果没有直接退出if语句
{
return 1;
}
}else if(Lie_00_V==1)key1_up=1;
if(key2_up&&Lie_01_V==0)//如果第二列是低电平,
{
delayMs(jpys);//延时20秒,软件消抖
key2_up=0;
if(Lie_01_V==0)//如果第二列是低电平,说明有键被按下,如果没有直接退出if语句
{
return 2;
}
}else if(Lie_01_V==1)key2_up=1;
if(key3_up&&Lie_02_V==0)
{
delayMs(jpys);
key3_up=0;
if(Lie_02_V==0)
{
return 3;
}
}else if(Lie_02_V==1)key3_up=1;
if(keyA_up&&Lie_03_V==0)//如果第四列是低电平
{
delayMs(jpys);
keyA_up=0;
if(Lie_03_V==0)//如果第四列是低电平,说明有键被按下,如果没有直接退出if语句
{
return 10;
}
}else if(Lie_03_V==1)keyA_up=1;
//第二行
Hang_00_H;
Hang_01_L;//把第二行拉低
Hang_02_H;
Hang_03_H;
if(key4_up&&Lie_00_V==0)//如果第一列是低电平
{
delayMs(jpys);
key4_up=0;
if(Lie_00_V==0)//说明有键被按下,如果没有直接退出if语句
{
return 4;
}
}else if(Lie_00_V==1)key4_up=1;
if(key5_up&&Lie_01_V==0)
{
delayMs(jpys);
key5_up=0;
if(Lie_01_V==0)
{
return 5;
}
}else if(Lie_01_V==1)key5_up=1;
if(key6_up&&Lie_02_V==0)
{
delayMs(jpys);
key6_up=0;
if(Lie_02_V==0)
{
return 6;
}
}else if(Lie_02_V==1)key6_up=1;
if(keyB_up&&Lie_03_V==0)
{
delayMs(jpys);
keyB_up=0;
if(Lie_03_V==0)
{
return 11;
}
}else if(Lie_03_V==1)keyB_up=1;
//第三行
Hang_00_H;
Hang_01_H;
Hang_02_L;//把第三行置低
Hang_03_H;
if(key7_up&&Lie_00_V==0) //如果第一列是低电平
{
delayMs(jpys);//延时20秒
key7_up=0;
if(Lie_00_V==0)//说明有键被按下,如果没有直接退出if语句
{
return 7;
}
}else if(Lie_00_V==1)key7_up=1;
if(key8_up&&Lie_01_V==0)
{
delayMs(jpys);
key8_up=0;
if(Lie_01_V==0)
{
return 8;
}
}else if(Lie_01_V==1)key8_up=1;
if(key9_up&&Lie_02_V==0)
{
delayMs(jpys);
key9_up=0;
if(Lie_02_V==0)
{
return 9;
}
}else if(Lie_02_V==1)key9_up=1;
if(keyC_up&&Lie_03_V==0)
{
delayMs(jpys);
keyC_up=0;
if(Lie_03_V==0)
{
return 12;
}
}else if(Lie_03_V==1)keyC_up=1;
//第四行
Hang_00_H;
Hang_01_H;
Hang_02_H;
Hang_03_L;//把第四行置低
if(keyX_up&&Lie_00_V==0)//如果第一列是低电平
{
delayMs(jpys);
keyX_up=0;
if(Lie_00_V==0)//说明有键被按下,如果没有直接退出if语句
{
return 14;
}
}else if(Lie_00_V==1)keyX_up=1;
if(key0_up&&Lie_01_V==0)
{
delayMs(10);
key0_up=0;
if(Lie_01_V==0)
{
return 16;
}
}else if(Lie_01_V==1)key0_up=1;
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………