| 顶一个 |
|
本帖最后由 李维强-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
开两路PWM并且按键控制占空比.rar
(2.26 MB, 下载次数: 1)
|
|
本帖最后由 李维强-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, 2025-11-24 11:27 , Processed in 0.140032 second(s), 32 queries .
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.