@floatsd
2016-01-02T03:02:16.000000Z
字数 2252
阅读 1044
CM4实验报告
- 熟悉和掌握矩阵式键盘的工作原理、电路设计和软件编程方法。
- 熟悉和掌握矩阵键盘的行列扫描法
信号 | 端口 | 信号 | 端口 |
---|---|---|---|
ROW1_IN | PP2 | COL1_OUT | PD1 |
ROW2_IN | PN3 | COL2_OUT | PH3 |
ROW3_IN | PN2 | COL3_OUT | PH2 |
ROW4_IN | PD0 | COL4_OUT | PM3 |
/*******************************************************************
* 函数: Toggle_Init()
* 描述: 配置使能矩阵按钮gpio口
* 输入值:无
* 返回值:无
*****************************************************************/
void Toggle_Init()
{
//使能引脚
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOP);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOM);
//输入配置
GPIOPinTypeGPIOInput(GPIOP, GPIO_PIN_2);
GPIOPinTypeGPIOInput(GPION, GPIO_PIN_2|GPIO_PIN_3);
GPIOPinTypeGPIOInput(GPIOD, GPIO_PIN_0);
//输出配置
GPIOPinTypeGPIOOutput(GPIOD, GPIO_PIN_1);
GPIOPinTypeGPIOOutput(GPIOH, GPIO_PIN_2|GPIO_PIN_3);
GPIOPinTypeGPIOOutput(GPIOM, GPIO_PIN_3);
//设置行都为高电平,列为低电平
R1h();
R2h();
R3h();
R4h();
C1l();
C2l();
C3l();
C4l();
}
/*******************************************************************
* 函数: Row_Scan()
* 描述: 扫描行或列返回电平被拉低的行/列
* 输入值:无
* 返回值:uint8_t
*****************************************************************/
uint8_t Row_Scan(){
uint8_t r0,r1,r2,r3;
r0 = GPIOPinRead(GPIOP, GPIO_PIN_2);
r1 = GPIOPinRead(GPION, GPIO_PIN_2);
r2 = GPIOPinRead(GPION, GPIO_PIN_3);
r3 = GPIOPinRead(GPIOD, GPIO_PIN_0);
if(r0==0x00){
return 0;
}
else if(r1==0x00){
return 1;
}
else if(r2==0x00){
return 2;
}
else if(r3==0x00){
return 3;
}
else return 4;
}
/*******************************************************************
* 函数: Toggle_Loop()
* 描述: 这里做的是检测被按下的行,本来是套了两个Row_Scan分别检测行列
* 输入值:无
* 返回值:无
*****************************************************************/
void Toggle_Loop(){
ledclose();
while(true){
switch(Row_Scan()){
case 0:led0(); break;
case 1:led2(); break;
case 2:led4(); break;
case 3:ledrun(1); break;
default:ledclose();break;
}Delay(24);
}
}