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

一.main.c

/* USER CODE BEGIN PV */
__IO uint32_t uwTick_key;
__IO uint32_t uwTick_test;
uint32_t test;
//电压
uint32_t Time=0;
uint32_t Time_Sign=0;//开始计时标志位 0-停止计时 1-开始计时
uint32_t Vmax=30;//电压参数最大值
uint32_t Vmin=10;//电压参数最小值
uint32_t Vmax_old=0;//上次最大电压参数
uint32_t Vmin_old=0;//上次最小电压参数
uint32_t ADC_old=0;//记录ADC值之前相较于电压参数的标志位 1-ADC<Vmin 2-ADC>=Vmin&&ADC<=Vmax 3-ADC>Vmax
//LCD
uint8_t LCD_Str[20];
uint8_t LCD_Show=1;//页面索引 1-数据界面 2-参数界面
//KEY
uint8_t key_val=0,key_old=0,key_down=0,key_up=0;
uint8_t Key_state=0;
//LED
uint8_t LED=0;
uint8_t LED2_sign=0;// 0-失能 1-使能
/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
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)
{
	if(Time_Sign==1)
	{
		LED|=0x01;
	}
	else if(Time_Sign==0)
	{
		LED&=0xfe;
	}
	if(LED2_sign==1)
	{
		LED|=0x02;
	}
	else if(LED2_sign==0)
	{
		LED&=0xfd;
	}
	LED_SHOW(LED);
}
void Time_Proc(void)
{
	if(ADC*10<Vmin)
	{
		ADC_old=1;
	}
	else if( (ADC*10>=Vmin)&&(ADC*10<=Vmax) )
	{
		if(ADC_old==1)
		{
			Time=0;
			Time_Sign=1;
		}
		ADC_old=2;
	}
	else if(ADC*10>Vmax)
	{
		if(ADC_old==2)
		{
			Time_Sign=0;
		}
		ADC_old=3;
	}

}
void Key_Proc(void)
{
	if( (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==GPIO_PIN_RESET)&&(Key_state==0) )
	{
		HAL_Delay(10);
		if((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==GPIO_PIN_RESET)&&(Key_state==0) )//B1-DOWN
		{
			Key_state=1;
			if(LCD_Show==1)
			{
				LCD_Show=2;//参数界面
				Vmax_old=Vmax;
				Vmin_old=Vmin;			
			}
			else if(LCD_Show==2)
			{
				LCD_Show=1;//数据界面
				if(Vmax<Vmin+10)//参数不合理
				{
					LED2_sign=1;
					Vmax=Vmax_old;
					Vmin=Vmin_old;
				}
				else
				{
					LED2_sign=0;
				}
			}
		}
	}
	else if((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)!=GPIO_PIN_RESET)&&(Key_state==1))//B1-UP
	{
		Key_state=0;
	}
	
	
	if( (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==GPIO_PIN_RESET)&&(Key_state==0)&&(LCD_Show==2) )
	{
		HAL_Delay(10);
		if((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==GPIO_PIN_RESET)&&(Key_state==0) )//B2-DOWN
		{
			Key_state=2;
			Vmax+=1;
			if(Vmax>=34)
			{
				Vmax=0;
			}
		}
	}
	else if((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)!=GPIO_PIN_RESET)&&(Key_state==2))//B2-UP
	{
		Key_state=0;
	}
	
	if( (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==GPIO_PIN_RESET)&&(Key_state==0) )
	{
		HAL_Delay(10);
		if((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==GPIO_PIN_RESET)&&(Key_state==0)&&(LCD_Show==2) )//B3-DOWN
		{
			Key_state=3;
			Vmin+=1;
			if(Vmin>=34)
			{
				Vmin=0;
			}
		}
	}
	else if((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)!=GPIO_PIN_RESET)&&(Key_state==3))//B3-UP
	{
		Key_state=0;
	}
	
	if( (HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)&&(Key_state==0) )
	{
		HAL_Delay(10);
		if((HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)&&(Key_state==0) )//B4-DOWN
		{
			Key_state=4;
	
		}
	}
	else if((HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)!=GPIO_PIN_RESET)&&(Key_state==4))//B4-UP
	{
		Key_state=0;
	}

}
void LCD_Proc(void)
{
	if(LCD_Show==1)
	{
		//                      123456
		sprintf((char *)LCD_Str,"      Data          ");
		LCD_DisplayStringLine(Line0,LCD_Str);
		sprintf((char *)LCD_Str," V:%3.2fV           ",ADC);
		LCD_DisplayStringLine(Line2,LCD_Str);
		sprintf((char *)LCD_Str," T:%ds              ",Time);
		LCD_DisplayStringLine(Line3,LCD_Str);
	}
	else if(LCD_Show==2)
	{
		//                      123456
		sprintf((char *)LCD_Str,"        Para        ");
		LCD_DisplayStringLine(Line0,LCD_Str);
		sprintf((char *)LCD_Str," Vmax:%d.%dV        ",Vmax/10,Vmax%10);
		LCD_DisplayStringLine(Line2,LCD_Str);
		sprintf((char *)LCD_Str," Vmin:%d.%dV        ",Vmin/10,Vmin%10);
		LCD_DisplayStringLine(Line3,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();
  /* USER CODE BEGIN 2 */
	LCD_Init();
	LCD_SetTextColor(Black);
	LCD_SetBackColor(White);
	LCD_Clear(White);
	HAL_ADC_Init(&hadc2);
	
	HAL_TIM_Base_Start_IT(&htim6);
	LED_Init();
  /* USER CODE END 2 */
	
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		LCD_Proc();
		R37_Proc();
		Key_Proc();
		Time_Proc();
		LED_Proc();
  }
  /* USER CODE END 3 */
}

二. adc.c

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

三. tim.c

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM6)
	{
//		Key_Proc();
		
		if(Time_Sign==1)
		{
			b++;
			if(b==100)
			{
				Time++;
				b=0;
			}
		}
		else if(Time_Sign==0)
		{
			b=0;
		}
//		HAL_TIM_Base_Start_IT(&htim6);
	}
}

  • 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、付费专栏及课程。

余额充值