真题原题
题目解析
本届的题目总体来说比较简单,所涉及的模块也不多,CubeMX的配置也不难,所以本届的CubeMX配置就省了。我觉得本届复杂的地方就是参数设置界面的参数项选择跟LED指示灯的变换,还有一些基本的现象冲突也是需要我们注意到的,比如提醒指示灯不能是同一个,电压上限值不能跟电压下限值相等等等,这些题目都没有特别说明,但是这些都需要我们去配置。
代码及解析
变量解释
int view=0; //用于界面切换
float a=2.4,b=1.2; //电压的上限值跟下限值
int c=1,d=2; //上限跟下限的提醒指示灯
int flag=1; //用于在参数设置界面的参数项选择
int S=2; //电压的状态
LED
void LED_Disp(uchar dsLED)
{
HAL_GPIO_WritePin (GPIOC ,GPIO_PIN_All ,GPIO_PIN_SET ); //置高电平
HAL_GPIO_WritePin (GPIOC ,dsLED <<8,GPIO_PIN_RESET ); //置低电平
HAL_GPIO_WritePin (GPIOD ,GPIO_PIN_2 ,GPIO_PIN_SET ); //打开锁存器
HAL_GPIO_WritePin (GPIOD ,GPIO_PIN_2 ,GPIO_PIN_RESET );
}
LCD
LCD部分有个“高亮”显示,我这用的是死办法,各位有更简单的办法就更好了,一些初始状态也要设置好
void disp_proc(void )
{
if(view ==0) //数据显示界面
{
LCD_SetBackColor (White ); //清屏
char text[30];
sprintf (text ," Main ");
LCD_DisplayStringLine(Line2, (uint8_t *)text );
sprintf (text ," Volt:%.2fV ",getADC (&hadc2 ));
LCD_DisplayStringLine(Line4, (uint8_t *)text );
if(getADC(&hadc2)>a) //如果超过上限
{
sprintf (text ," Status:Upper ");
LCD_DisplayStringLine(Line6, (uint8_t *)text );
}
else if(getADC(&hadc2)<b) //如果低于下限
{
sprintf (text ," Status:Lower ");
LCD_DisplayStringLine(Line6, (uint8_t *)text );
}
else //位于上限下限的中间
{
sprintf (text ," Status:Normal ");
LCD_DisplayStringLine(Line6, (uint8_t *)text );
}
}
else if(view ==1) //参数设置界面
{
LCD_SetBackColor(White ); //清屏
char text[30];
sprintf (text ," Setting ");
LCD_DisplayStringLine(Line2, (uint8_t *)text );
if(flag ==1)
{
sprintf (text ," Min Volt :%.1fV ",b);
LCD_Display