@floatsd
2016-01-02T03:02:16.000000Z
字数 2252
阅读 1170
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);}}