第十届 蓝桥杯 嵌入式设计与开发项目 省赛

赛题

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述

部分程序

  /* 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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值