单片机实现模式转换

发布于:2025-02-10 ⋅ 阅读:(36) ⋅ 点赞:(0)

[任务] 
 要求通过单片机实现以下功能: 
 1.单片机有三种工作模式(定义全局变量MM表示模式,MM=1,2,3表示三种不同的模式) 
 LED控制模式 
 风扇控制模式 
 蜂鸣器控制模式 
 2.可以在某一个模式下通过拓展板KEY1按键控制设备 
 (按键按下一次,设备打开,按键再按下一次,设备关闭(设备管脚输出反向电平) 
 3.关于模式的切换可以通过以下两种方式: 
(通过串口通信,电脑端发送当前模式(设置串口接收中断,接收到的字符串进行比较) 
电脑发送LED、进入LED模式 
 电脑发送FAN,进行风扇控制模式 
 电脑发送BEE,进入蜂鸣器控制模式 
 通过底板用户自定义按键进行模式切换  
 .按键按下一次进入发光二极管模式,再按一次,进入风扇模式,再按一下,进入蜂鸣器模式

 1.按键控制模式转换

void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{
    //user按键对于GPIO接口为PC12
	if(GPIO_Pin == GPIO_PIN_12)
	{
		work_model++;
		if(work_model>9){
			work_model=1;
		}
	}
	//拓展版KEY1按键为PC9
	if(GPIO_Pin == GPIO_PIN_9){
		if(work_model%3==0){
            //LD1为PC4
			HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_4);
		}
		else if(work_model%3==1){
            //风扇为PC6
			HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_6);
		}
		else if(work_model%3==2){
            //蜂鸣器为PA15
			HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_15);
		}
	}
}

2.串口输入切换模式

//重写的fputc函数
int fputc(int ch,FILE* fp){
	HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,3);
	return ch;
}

//回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	printf("output:%s\n\r",buf);
	if(strcmp(buf,"LED")==0){
		work_model = 0;
	}
	if(strcmp(buf,"FAN")==0){
		work_model = 1;
	}
	if(strcmp(buf,"BEE")==0){
		work_model = 2;
	}
	memset(buf,0,sizeof(buf));
}


网站公告

今日签到

点亮在社区的每一天
去签到