117 lines
2.3 KiB
C
117 lines
2.3 KiB
C
#include "key.h"
|
||
#include "main.h"
|
||
#include "tmc5160.h"
|
||
#include "oled.h"
|
||
#include "delay.h"
|
||
|
||
unsigned char key_i = 0;
|
||
unsigned int key_cnt[3] = {0}; //延时用计数
|
||
unsigned char key_msg[3] = {0}; //按键事件
|
||
unsigned char key_val[3] = {0}; //按键值
|
||
unsigned char oled_flag = 1; //oled初始化时为点亮状态;1表示点亮,0表示熄灭。
|
||
|
||
#define KEY_CNT 5
|
||
#define PAGEMAX 2
|
||
|
||
void Key_Scan(void) // 扫描K1-K3的状态
|
||
{
|
||
key_val[0] = HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin);
|
||
key_val[1] = HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin);
|
||
key_val[2] = HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin);
|
||
|
||
//检测按键
|
||
if(key_i >= 3) key_i = 0;
|
||
if (key_val[key_i] == 0 && key_msg[key_i] == 0) //按键按下
|
||
{
|
||
key_cnt[key_i]++;
|
||
if(key_cnt[key_i] > KEY_CNT)
|
||
{
|
||
key_cnt[key_i] = 0;
|
||
key_msg[key_i] = 1; //按键按下,触发事件1
|
||
}
|
||
}
|
||
|
||
if (key_val[key_i] == 1 && key_msg[key_i] == 2) //按键抬起
|
||
{
|
||
key_cnt[key_i]++;
|
||
if(key_cnt[key_i] > KEY_CNT)
|
||
{
|
||
key_cnt[key_i] = 0;
|
||
key_msg[key_i] = 0; //完成抬起动作后,再清空事件
|
||
}
|
||
}
|
||
|
||
//按键按顺序增加
|
||
key_i++;
|
||
if(key_i >= 3) key_i = 0;
|
||
}
|
||
|
||
void msg_clr()
|
||
{
|
||
key_msg[0] = 0;
|
||
key_msg[1] = 0;
|
||
key_msg[2] = 0;
|
||
}
|
||
//按键功能
|
||
|
||
void key_act(void)
|
||
{
|
||
if(key_msg[0] == 1) //K1完成按下后
|
||
{
|
||
if( speed_max < 0x007EA5E0 ) //电机加速
|
||
{
|
||
speed_max += 10000;
|
||
TMC5160_SPIWriteInt(VMAX_ADDR, speed_max,1);
|
||
}else
|
||
{
|
||
speed_max = 0x007EA5E0;
|
||
TMC5160_SPIWriteInt(VMAX_ADDR, speed_max,1);
|
||
}
|
||
|
||
key_msg[0] = 2;
|
||
}
|
||
|
||
if(key_msg[1] == 1) //K2完成按下后
|
||
{
|
||
// if(oled_page >= PAGEMAX) //OLED翻页
|
||
// {
|
||
// oled_page = 1;
|
||
// }else oled_page++;
|
||
// OLED_NewFrame();
|
||
|
||
if( speed_max > 0 ) //电机减速
|
||
{
|
||
speed_max -= 10000;
|
||
TMC5160_SPIWriteInt(VMAX_ADDR, speed_max,1);
|
||
}else
|
||
{
|
||
speed_max = 0;
|
||
TMC5160_SPIWriteInt(VMAX_ADDR, speed_max,1);
|
||
}
|
||
|
||
key_msg[1] = 2;
|
||
}
|
||
|
||
if(key_msg[2] == 1)//K3完成按下后
|
||
{
|
||
tmc5160_sw =(tmc5160_sw == 0);
|
||
|
||
if(tmc5160_sw == 1) //0->1时初始化
|
||
{
|
||
speed_max = 0x000061A8;
|
||
tmc5160_init();
|
||
}
|
||
|
||
if(tmc5160_sw == 0) TMC5160_SPIWriteInt(RAMPMODE_ADDR, 0x00000000,1); //1->0时切换至位置模式,通过减速停止电机
|
||
|
||
key_msg[2] = 2;
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|