高级会员
- 积分
- 713
- 金钱
- 713
- 注册时间
- 2011-11-12
- 在线时间
- 149 小时
|
发表于 2018-9-14 22:10:16
|
显示全部楼层
本帖最后由 BowenQQ 于 2018-9-14 22:13 编辑
warship 发表于 2018-9-14 21:55 啥也别说了,
感动的眼泪哗哗的。
不过注册那个网站不会让你后悔的,
楼主 请教个问题,我最近也在弄4*4矩阵键盘,我出来的键值不对呀,郁闷中
[mw_shl_code=c,true]void Key_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
/********4行输出*********/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOF, &GPIO_InitStructure);
/********4列输入*********/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOF, &GPIO_InitStructure);
}
int KeyScan(void)
{
uchar KeyVal;
GPIO_Write(GPIOF, (GPIOF->ODR & 0xFFC3 | 0x003C)); //0xf0ff | 0x0f00
if((GPIOF->IDR & 0x03C0)==0x0000) //0xf000
return -1;
else
{
delay_ms(5); //延时5ms去抖动
if((GPIOF->IDR & 0x03C0)==0x0000) //0xf000
return -1;
}
GPIO_Write(GPIOF,(GPIOF->ODR & 0xFFC3 | 0x0004)); //0xf0ff | 0x0100
switch(GPIOF->IDR & 0x03C0) //0xf000
{
case 0x0040: KeyVal=0; break; //0x1000
case 0x0080: KeyVal=1; break; //0x2000
case 0x0100: KeyVal=2; break; //0x4000
case 0x0200: KeyVal=3; break; //0x8000
}
while((GPIOF->IDR & 0x03C0) > 0); //0xf000
GPIO_Write(GPIOF,(GPIOF->ODR & 0xFFC3 | 0x0008)); //0xf0ff | 0x0200
switch(GPIOF->IDR & 0x03C0) //0xf000
{
case 0x0040: KeyVal=4; break;
case 0x0080: KeyVal=5; break;
case 0x0100: KeyVal=6; break;
case 0x0200: KeyVal=7; break;
}
while((GPIOF->IDR & 0x03C0) > 0); //0xf000
GPIO_Write(GPIOF,(GPIOF->ODR & 0xFFC3 | 0x0010)); //0xf0ff | 0x0400
switch(GPIOF->IDR & 0x03C0) //0xf000
{
case 0x0040: KeyVal=8; break;
case 0x0080: KeyVal=9; break;
case 0x0100: KeyVal=10; break;
case 0x0200: KeyVal=11; break;
}
while((GPIOF->IDR & 0x03C0) > 0); //0xf000
GPIO_Write(GPIOF,(GPIOF->ODR & 0xFFC3 | 0x0020)); //0xf0ff | 0x0800
switch(GPIOF->IDR & 0x03C0) //0xf000
{
case 0x0040: KeyVal=12; break;
case 0x0080: KeyVal=13; break;
case 0x0100: KeyVal=14; break;
case 0x0200: KeyVal=15; break;
}
while((GPIOF->IDR & 0x03C0) > 0); //0xf000
return KeyVal;
}[/mw_shl_code] |
|