行列式的按键扫描程序,设置了PC8和PA12为低,但一个1.5,一个3.3,程序也无法返回任何值,求大佬看一下!

2019-07-21 07:21发布

/*--------------------------------------------------------------------------------------* 矩阵键盘驱动
* 文 件: keyboard.c
* 编写人: LiuHui
* 描述: 扫描4x4 矩阵键盘输入,并返回键值
* 适用范围: 驱动采用ST3.5 库编写,适用于STM32F10x 系列单片机
* 所用引脚: PB14,PD8,PD10,PD12,PD14,PG2,PG4
* 编写时间: 2014 年5 月20 日
--------------------------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "keyboard.h"
#include "delay.h"
/*--------------------------------矩阵键盘初始化----------------------------------------* 功能: 初始化stm32 单片机GPIO //PA0-PA7
* 参数传递:
* 输入: 无
* 返回值:无
--------------------------------------------------------------------------------------*/
void KeyBoard_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOG,ENABLE);//使能PORTB,PORTD,PORTG时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_5| GPIO_Pin_7;//PD8,PD10
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOG, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_8;//PD12,PD14
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOC, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_12;//PG2,PG4
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOG, GPIO_Pin_3 | GPIO_Pin_5| GPIO_Pin_7);
GPIO_ResetBits(GPIOC, GPIO_Pin_6 | GPIO_Pin_8);
GPIO_ResetBits(GPIOA, GPIO_Pin_8 | GPIO_Pin_12);
}
/*------------------------------矩阵键盘扫描--------------------------------------------* 功能: 扫描矩阵键盘,并返回键值
* 参数:
* 输入: 无
* 返回: 有键按下返回该键值
* 无键按下时则返回0
--------------------------------------------------------------------------------------*/
u8 Read_KeyValue(void)
{
u8 KeyValue=0;
u8 Scan=0;
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_6))
{Scan|=0x08;
}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8))
{Scan|=0x04;
}
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8))
{Scan|=0x02;
}
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12))
{Scan|=0x01;
}



if((Scan&0x0f)!=0x00)
{
delay_ms(10);
if((Scan&0x0f)!=0x00)
{
GPIO_ResetBits(GPIOG, GPIO_Pin_5 | GPIO_Pin_7);//第一排扫描
GPIO_SetBits(GPIOG, GPIO_Pin_3);
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_6))
{Scan|=0x08;
}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8))
{Scan|=0x04;
}
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8))
{Scan|=0x02;
}
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12))
{Scan|=0x01;
}

switch(Scan&0x0f)
{
case 0x01: KeyValue = 11; break;
case 0x02: KeyValue = 12; break;
case 0x04: KeyValue = 13; break;
case 0x08: KeyValue = 14; break;
}



GPIO_ResetBits(GPIOG, GPIO_Pin_3 | GPIO_Pin_7);//第一排扫描
GPIO_SetBits(GPIOG, GPIO_Pin_5);
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_6))
{Scan|=0x08;
}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8))
{Scan|=0x04;
}
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8))
{Scan|=0x02;
}
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12))
{Scan|=0x01;
}

switch(Scan&0x0f)
{
case 0x01: KeyValue = 21; break;
case 0x02: KeyValue = 22; break;
case 0x04: KeyValue = 23; break;
case 0x08: KeyValue = 24; break;
}

GPIO_ResetBits(GPIOG, GPIO_Pin_3 | GPIO_Pin_5);//第一排扫描
GPIO_SetBits(GPIOG, GPIO_Pin_7);
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_6))
{Scan|=0x08;
}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8))
{Scan|=0x04;
}
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8))
{Scan|=0x02;
}
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12))
{Scan|=0x01;
}

switch(Scan&0x0f)
{
case 0x01: KeyValue = 31; break;
case 0x02: KeyValue = 32; break;
case 0x04: KeyValue = 33; break;
case 0x08: KeyValue = 34; break;
}

GPIO_SetBits(GPIOG, GPIO_Pin_3 | GPIO_Pin_5| GPIO_Pin_7);
GPIO_ResetBits(GPIOC, GPIO_Pin_6 | GPIO_Pin_8);
GPIO_ResetBits(GPIOA, GPIO_Pin_8 | GPIO_Pin_12);
//while((GPIO_ReadInputData(GPIOA)&0xff)!=0x0f);
return KeyValue;
}
}
return 0;
}
/*--------------------------------THE END--------------------------------------------*/

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
青芒
1楼-- · 2019-07-21 10:43
自顶一下
正点原子
2楼-- · 2019-07-21 11:48
 精彩回答 2  元偷偷看……
青芒
3楼-- · 2019-07-21 15:57
再顶一下
青芒
4楼-- · 2019-07-21 16:43
顶一下

一周热门 更多>