蓝桥杯嵌入式第十一届第二场(代查)

一. main.c

void LED_Init(void)
{
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
                          |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
void LED_SHOW(uint8_t led)
{
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
                          |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
	
	HAL_GPIO_WritePin(GPIOC, led<<8, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
void LED_Proc(void)
{
	LED_SHOW(LED);
	if(Mode_Sign==0)
	{
		LED|=0x01;
	}
	else
	{
		LED&=0xfe;
	}
	if(LCD_SHOW==0)
	{
		LED|=0x02;
	}
	else
	{
		LED&=0xfd;
	}
}
void Key_Proc(void)
{
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==GPIO_PIN_RESET)//B1
	{
		LCD_SHOW++;
		if(LCD_SHOW>=2)
		{
			LCD_SHOW=0;
		}
		while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==GPIO_PIN_RESET);
	}
	else if( (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==GPIO_PIN_RESET)&&(LCD_SHOW==1) )//B2-参数界面
	{
		Duty_PA6_PARA+=10;
		if(Duty_PA6_PARA==100)
		{
			Duty_PA6_PARA=10;
		}
		while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==GPIO_PIN_RESET);
	}
	else if( (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==GPIO_PIN_RESET)&&(LCD_SHOW==1) )//B3-参数界面
	{   
		Duty_PA7_PARA+=10;
		if(Duty_PA7_PARA==100)
		{
			Duty_PA7_PARA=10;
		}
		while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==GPIO_PIN_RESET);
	}
	else if( (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==GPIO_PIN_RESET)&&(LCD_SHOW==0) )//B3-数据界面
	{   
		Cache=COUNTER_PA6;
		COUNTER_PA6=COUNTER_PA7;
		COUNTER_PA7=Cache;
//		
		while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==GPIO_PIN_RESET);
	}
	else if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)//B4
	{     
		Mode_Sign^=1;
		while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET);
	}
}
void Mode_Proc(void)
{
	if(Mode_Sign==0)//自动模式
	{
		Duty=((ADC*100)/330);
		COMPARE_PA6=Duty*COUNTER_PA6;
		COMPARE_PA7=Duty*COUNTER_PA7;
		Duty_PA6_AUTO=Duty*100;
		Duty_PA7_AUTO=Duty*100;
		Duty_PA6=Duty_PA6_AUTO;
		Duty_PA7=Duty_PA7_AUTO;
	}
	else if(Mode_Sign==1)//手动模式
	{
		COMPARE_PA6=Duty_PA6_PARA*COUNTER_PA6/100;
		COMPARE_PA7=Duty_PA7_PARA*COUNTER_PA7/100;
		Duty_PA6=Duty_PA6_PARA;
		Duty_PA7=Duty_PA7_PARA;
	}
	__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,COMPARE_PA6);
	__HAL_TIM_SET_COMPARE(&htim17,TIM_CHANNEL_1,COMPARE_PA7);
	__HAL_TIM_SET_AUTORELOAD(&htim3,COUNTER_PA6-1);
	__HAL_TIM_SET_AUTORELOAD(&htim17,COUNTER_PA7-1);
}
void LCD_Proc(void)
{
	if(LCD_SHOW==0)//0-数据界面
	{
		//                    "123456789A
		sprintf((char *)LCD_STR,"      Data          ");
		LCD_DisplayStringLine(Line0,LCD_STR);
		sprintf((char *)LCD_STR,"    V:%3.2fV        ",ADC);
		LCD_DisplayStringLine(Line2,LCD_STR);
		if(Mode_Sign==0)
		{
		sprintf((char *)LCD_STR,"    Mode:AUTO       ");
		}
		else if(Mode_Sign==1)
		{
			sprintf((char *)LCD_STR,"    Mode:MANU     ");
		}
		LCD_DisplayStringLine(Line4,LCD_STR);
	}
	else if(LCD_SHOW==1)//1-参数界面
	{
		//                    "123456789A
		sprintf((char *)LCD_STR,"      Para          ");
		LCD_DisplayStringLine(Line0,LCD_STR);
		sprintf((char *)LCD_STR,"    PA6:%d%%        ",Duty_PA6);
		LCD_DisplayStringLine(Line2,LCD_STR);
		sprintf((char *)LCD_STR,"    PA7:%d%%        ",Duty_PA7);
		LCD_DisplayStringLine(Line4,LCD_STR);
		sprintf((char *)LCD_STR,"    TXt:%d        ",COMPARE_PA6);
		LCD_DisplayStringLine(Line5,LCD_STR);
	}
}
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC2_Init();
  MX_TIM6_Init();
  MX_TIM3_Init();
  MX_TIM17_Init();
  /* USER CODE BEGIN 2 */
	LCD_Init();
	LCD_SetTextColor(White);
	LCD_SetBackColor(Black);
	LCD_Clear(Black);
	
	HAL_ADC_Init(&hadc2);
	LED_Init();
//	HAL_TIM_PWM_Init(&htim3);
//	HAL_TIM_PWM_Init(&htim17);
	HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
	HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);
//	HAL_TIM_Base_Init(&htim6);
	HAL_TIM_Base_Start_IT(&htim6);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		LCD_Proc();
		ADC_Proc();
		LED_Proc();
  }
  /* USER CODE END 3 */
}

二. adc.c

float ADC=0;
uint32_t Get_R37(void)
{
	uint32_t adc=0;
	HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);
	HAL_ADC_Start(&hadc2);
	adc = HAL_ADC_GetValue(&hadc2);
	return adc;
}
void ADC_Proc(void)
{
	uint32_t sum=0,i=0;
	for(i=0;i<10;i++)
	{
		sum+=Get_R37();
	}
	sum/=10;
	ADC=sum*3.3f/4096;
}

三. tim.c

int a=0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM6)
	{
		a++;
		Key_Proc();
		if(a>=10)
		{
			Mode_Proc();
			a=0;
		}
	}
		
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DDKevin19

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值