赛题
部分程序
/* USER CODE BEGIN 2 */
m24c02_init(); //EEPROM初始化(此功能为研究生组题目需求)
LED_init(); //LED初始化
KEY_init(); //按键初始化
LCD_Init(); //LCD初始化
LCD_DisplayStringLine(Line2,LCD_Line2_buf); //刷新LCD第3行
HAL_TIM_Base_Start_IT(&htim2); //使能定时器2中断
TASK_TIMES_init(); //初始化任务时间
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
scankey(); //扫描按键并执行按键功能(10ms)
ADC_function(); //扫描ADC,并执行ADC功能(100ms)
Interface_function(); //刷新界面(50ms)
LED_function(); //刷新LED(200ms)
}
/* USER CODE END 3 */
/*
函数功能:界面显示功能
入参:无
返回值:无
*/
void Interface_function(void)
{
if(get_task_time(TASK_TIMES.Interface_TIME)==0)
{
TASK_TIMES.Interface_TIME=get_time()+Interface_time;
if(Interface==0) //数据显示界面
{
LCD_Line4_buf[7]=ADC/100+48;LCD_Line4_buf[9]=ADC/10%10+48; //电压值
LCD_Line4_buf[10]=ADC%10+48;
if(flag_ADC_state==0) //超下限状态
{
LCD_Line5_buf[9]='L'; LCD_Line5_buf[10]='o';LCD_Line5_buf[11]='w';
LCD_Line5_buf[12]='e';LCD_Line5_buf[13]='r';LCD_Line5_buf[14]=' ';
}
else if(flag_ADC_state==1) //正常状态
{
LCD_Line5_buf[9]='N'; LCD_Line5_buf[10]='o';LCD_Line5_buf[11]='r';
LCD_Line5_buf[12]='m';LCD_Line5_buf[13]='a';LCD_Line5_buf[14]='l';
}
else if(flag_ADC_state==2) //超上限状态
{
LCD_Line5_buf[9]='U'; LCD_Line5_buf[10]='p';LCD_Line5_buf[11]='p';
LCD_Line5_buf[12]='e';LCD_Line5_buf[13]='r';LCD_Line5_buf[14]=' ';
}
LCD_DisplayStringLine(Line4,LCD_Line4_buf); //刷新LCD第4行
LCD_DisplayStringLine(Line5,LCD_Line5_buf); //刷新LCD第5行
}
else if(Interface==1) //参数设置界面
{
LCD_Line3_buf[11]=parameter_buf[0]/10+48;LCD_Line3_buf[13]=parameter_buf[0]%10+48; //上限电压
LCD_Line4_buf[11]=parameter_buf[1]/10+48;LCD_Line4_buf[13]=parameter_buf[1]%10+48; //下限电压
LCD_Line5_buf[10]=parameter_buf[2]+1+48;LCD_Line6_buf[10]=parameter_buf[3]+1+48; //上下限提醒灯序号
if(Set_Line==0) {LCD_SetBackColor(Green);LCD_DisplayStringLine(Line3,LCD_Line3_buf);LCD_SetBackColor(White);} //刷新LCD第3行
else {LCD_DisplayStringLine(Line3,LCD_Line3_buf);}
if(Set_Line==1) {LCD_SetBackColor(Green);LCD_DisplayStringLine(Line4,LCD_Line4_buf);LCD_SetBackColor(White);} //刷新LCD第4行
else {LCD_DisplayStringLine(Line4,LCD_Line4_buf);}
if(Set_Line==2) {LCD_SetBackColor(Green);LCD_DisplayStringLine(Line5,LCD_Line5_buf);LCD_SetBackColor(White);} //刷新LCD第5行
else {LCD_DisplayStringLine(Line5,LCD_Line5_buf);}
if(Set_Line==3) {LCD_SetBackColor(Green);LCD_DisplayStringLine(Line6,LCD_Line6_buf);LCD_SetBackColor(White);} //刷新LCD第6行
else {LCD_DisplayStringLine(Line6,LCD_Line6_buf);}
}
}
}
/*
函数功能:按键功能
入参:key:按键值
返回值:无
*/
void KEY_function(uint8_t key)
{
uint8_t a;
if(key==1) //切换界面
{
if(++Interface==2) {Interface=0;}
if(Interface==0) //数据显示
{
LCD_ClearLine(Line3); //LCD第3行清除显示
LCD_ClearLine(Line6); //LCD第6行清除显示
sprintf((char *)LCD_Line2_buf," Main "); //刷新LCD第2行显示数组
sprintf((char *)LCD_Line4_buf," Volt:0.00V "); //刷新LCD第4行显示数组
sprintf((char *)LCD_Line5_buf," Status:Upper "); //刷新LCD第5行显示数组
//此功能为研究生组题目需求
for(a=0;a<4;a++) X24c02_buf[a+1]=parameter_buf[a];
m24c02_write(X24c02_buf+1,DATA_ARR+1,4); //保存参数到EEPROM
}
else if(Interface==1) //参数设置
{
sprintf((char *)LCD_Line2_buf," Setting "); //刷新LCD第2行显示数组
sprintf((char *)LCD_Line4_buf," Min Volt:1.2V "); //刷新LCD第4行显示数组
sprintf((char *)LCD_Line5_buf," Upper:LD1 "); //刷新LCD第5行显示数组
}
LCD_DisplayStringLine(Line2,LCD_Line2_buf); //刷新LCD第2行显示
}
else if(key==2) //切换参数
{
if(Interface==1) //仅在参数设置界面下有效
{ if(++Set_Line==4) {Set_Line=0;} } //切换对上下限电压及提醒灯的设置
}
else if(key==3) //参数加
{
if(Interface==1) //仅在参数设置界面下有效
{
if((Set_Line==0)||(Set_Line==1)) //上下限电压加0.3V
{
if(parameter_buf[Set_Line]+=3,parameter_buf[Set_Line]>33) {parameter_buf[Set_Line]=33;} //上限最大为3.3
if(parameter_buf[0]<=parameter_buf[1]) {parameter_buf[Set_Line]-=3;} //上限不能小于等于下限
}
else if((Set_Line==2)||(Set_Line==3))//上下限提醒灯序号加1
{
if(++parameter_buf[Set_Line]>7) {parameter_buf[Set_Line]=0;} //LED序号范围1-8
if(parameter_buf[2]==parameter_buf[3]) {if(++parameter_buf[Set_Line]>7) {parameter_buf[Set_Line]=0;}} //若两个提醒灯序号相等,则再自加一次
}
}
}
else if(key==4) //参数减
{
if(Interface==1) //仅在参数设置界面下有效
{
if((Set_Line==0)||(Set_Line==1)) //上下限电压加0.3V
{
if(parameter_buf[Set_Line]-=3,parameter_buf[Set_Line]>33) {parameter_buf[Set_Line]=0;} //下限最小为0
if(parameter_buf[0]<=parameter_buf[1]) {parameter_buf[Set_Line]+=3;} //上限不能小于等于下限
}
else if((Set_Line==2)||(Set_Line==3))//上下限提醒灯序号加1
{
if(--parameter_buf[Set_Line]>7) {parameter_buf[Set_Line]=7;} //LED序号范围1-8
if(parameter_buf[2]==parameter_buf[3]) {if(--parameter_buf[Set_Line]>7) {parameter_buf[Set_Line]=7;}} //若两个提醒灯序号相等,则再自减一次
}
}
}
}
完整程序下载
下载链接:
链接:https://pan.baidu.com/s/1LMECSy3GuABduu42YUJdSQ
提取码:qy2o