复刻江协旋钮控制模块
1、初始化硬件
OLED初始化
- 这里就不展开细讲了,可以看我之前的帖子
复刻江协激光触发器
旋钮初始化
- 使能外部中断
- 模式改为上拉
- 根据旋钮接口接上线
2、操作代码
(1) 初始化输出
- 定义全局变量
count
,并初始化值为0,表示旋钮的相对位置
/* USER CODE BEGIN 0 */
int32_t count = 0;
/* USER CODE END 0 */
- 在第一行,顶格位置显示字符串
count:
OLED_ShowString(1, 1, "count:");/* USER CODE END 2 */
- 在循环体内输出相对位置的值
注意:
OLED_ShowNum()
函数不支持输出复数,所以需要额外步骤来进行判断
/* USER CODE BEGIN WHILE */while (1){//判断正负性if(count >= 0){//如果为非负数,加'+'OLED_ShowChar(2, 1, '+');OLED_ShowNum(2, 2, count, 10);}else{//如果为复数,加'-'并对相对位置的值取反OLED_ShowChar(2, 1, '-');OLED_ShowNum(2, 2, -count, 10);}/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}
(2) 中断回调函数
- 由于旋钮总共有2个输出接口,所以需要判断中断触发源
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){//判断中断源if(GPIO_Pin == PinA_Pin){//如果为A口触发,则增加相对位置int i = 3000;//消抖while(i){i--;}count++;} else if(GPIO_Pin == PinB_Pin){//如果为B口,则减小相对位置int i = 3000;while(i){i--;}count--;}
}
/* USER CODE END 4 */
3、实验效果
- 向右拧旋钮后,相对位置增加
- 向左拧旋钮后,相对位置减小