顶一个 |
本帖最后由 李维强-15级 于 2017-2-25 21:55 编辑 按键设置为按下再弹起后,再去做按键的操作,保证按一次响应一次 初始化PWM直接调用下面这一句话即可。
其中 FTM0_CH0_PC01代表使用FTM0定时器,且开启CH0通道,对应端口为PC01,kPWM_EdgeAligned表示使用边沿触发,1000表示频率为1000Hz 改变占空比用下面这一句话
注意 我知己封装了个函数 在主函数下面
下面这个视频视直接截取的电机引脚上的 http://v.cqutbbs.cn/upload/video/20170225/QQ%E7%9F%AD%E8%A7%86%E9%A2%9120170225214539.mp4 |
本帖最后由 李维强-15级 于 2017-2-22 02:58 编辑 按键扫描 4*4键盘 没有任何外接的那种键盘 h头文件 [C] syntaxhighlighter_viewsource syntaxhighlighter_copycode #ifndef __MATRIX_KEY_H #define __MATRIX_KEY_H #include "common.h" //默认配置到E口0-7脚,如需要自己修改 #define MatrixPin1_1 0x0u #define MatrixPin1_2 0x2u #define MatrixPin1_3 0x4u #define MatrixPin1_4 0x6u #define MatrixPin2_1 0x1u #define MatrixPin2_2 0x3u #define MatrixPin2_3 0x5u #define MatrixPin2_4 0x7u void matrix_key_init(void);//初始化矩阵键盘 void Matrix_key_Init_1(void); void Matrix_key_Init_2(void); uint8_t MatrixKeyScan(void); //扫描 #endif } .C源文件 [C] syntaxhighlighter_viewsource syntaxhighlighter_copycode #include "MatrixKey.h" #include "common.h" #include "gpio.h" /* author@李维强 适合周老师发的黑色开发板,4*4键盘,E0,E2,E4,E6端口接一排,E1,E3,E5,E7端口接一排 该代码看起简单,但是有大量重复调用流程,追求效率的同学慎用!!! */ void matrix_key_init(void) { GPIO_QuickInit(HW_GPIOE,MatrixPin1_1,kGPIO_Mode_OPP); GPIO_QuickInit(HW_GPIOE,MatrixPin1_2,kGPIO_Mode_OPP); GPIO_QuickInit(HW_GPIOE,MatrixPin1_3,kGPIO_Mode_OPP); GPIO_QuickInit(HW_GPIOE,MatrixPin1_4,kGPIO_Mode_OPP); GPIO_QuickInit(HW_GPIOE,MatrixPin2_1,kGPIO_Mode_IPD); GPIO_QuickInit(HW_GPIOE,MatrixPin2_2,kGPIO_Mode_IPD); GPIO_QuickInit(HW_GPIOE,MatrixPin2_3,kGPIO_Mode_IPD); GPIO_QuickInit(HW_GPIOE,MatrixPin2_4,kGPIO_Mode_IPD); } void Matrix_key_Init_1(void) { GPIO_QuickInit(HW_GPIOE,MatrixPin1_1,kGPIO_Mode_OPP); GPIO_QuickInit(HW_GPIOE,MatrixPin1_2,kGPIO_Mode_OPP); GPIO_QuickInit(HW_GPIOE,MatrixPin1_3,kGPIO_Mode_OPP); GPIO_QuickInit(HW_GPIOE,MatrixPin1_4,kGPIO_Mode_OPP); GPIO_QuickInit(HW_GPIOE,MatrixPin2_1,kGPIO_Mode_IPD); GPIO_QuickInit(HW_GPIOE,MatrixPin2_2,kGPIO_Mode_IPD); GPIO_QuickInit(HW_GPIOE,MatrixPin2_3,kGPIO_Mode_IPD); GPIO_QuickInit(HW_GPIOE,MatrixPin2_4,kGPIO_Mode_IPD); } void Matrix_key_Init_2(void) { GPIO_QuickInit(HW_GPIOE,MatrixPin2_1,kGPIO_Mode_OPP); GPIO_QuickInit(HW_GPIOE,MatrixPin2_2,kGPIO_Mode_OPP); GPIO_QuickInit(HW_GPIOE,MatrixPin2_3,kGPIO_Mode_OPP); GPIO_QuickInit(HW_GPIOE,MatrixPin2_4,kGPIO_Mode_OPP); GPIO_QuickInit(HW_GPIOE,MatrixPin1_1,kGPIO_Mode_IPD); GPIO_QuickInit(HW_GPIOE,MatrixPin1_2,kGPIO_Mode_IPD); GPIO_QuickInit(HW_GPIOE,MatrixPin1_3,kGPIO_Mode_IPD); GPIO_QuickInit(HW_GPIOE,MatrixPin1_4,kGPIO_Mode_IPD); } uint8_t MatrixKeyScan(void) { uint8_t key=0; Matrix_key_Init_1(); DelayUs(1); PEout(MatrixPin1_1)=1;PEout(MatrixPin1_2)=1;PEout(MatrixPin1_3)=1;PEout(MatrixPin1_4)=1; DelayUs(1); if(PEin(MatrixPin2_1)==1 || PEin(MatrixPin2_2)==1 || PEin(MatrixPin2_3)==1 || PEin(MatrixPin2_4)==1) { DelayMs(10); if(PEin(MatrixPin2_1)==1){key=1;} else if(PEin(MatrixPin2_2)==1){key=2;} else if(PEin(MatrixPin2_3)==1){key=3;} else if(PEin(MatrixPin2_4)==1){key=4;} Matrix_key_Init_2(); DelayMs(10); PEout(MatrixPin2_1)=1;PEout(MatrixPin2_2)=1;PEout(MatrixPin2_3)=1;PEout(MatrixPin2_4)=1; DelayUs(1); if(PEin(MatrixPin1_1)==1){key+=0;} else if(PEin(MatrixPin1_2)==1){key+=4;} else if(PEin(MatrixPin1_3)==1){key+=8;} else if(PEin(MatrixPin1_4)==1){key+=12;} else{key=0;} } return key; } 调用流程 包含头文件后在主循环里面调用:
然后temp_key这个变量就会有你按下的那个按键的值(1-16之间),如果都没按下 temp_key为0。 |
Archiver|手机版|小黑屋|cqutlab ( 渝ICP备15004556号 )
GMT+8, 2024-12-22 11:08 , Processed in 0.172323 second(s), 32 queries .
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.