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

赛题

在这里插入图片描述

CubeMX配置

ADC

在这里插入图片描述

在这里插入图片描述

输入捕获

在这里插入图片描述

脉冲输出

在这里插入图片描述

串口

在这里插入图片描述

程序展示

按键功能

u8 key_flag=0;

u8 KEY_scan(void)
{
	u8 key=0,val;
	static u8 com;
	static u8 time_num=0;
	
	if(!TIME.KEY)
	{
		TIME.KEY=KEY_TIME;
		
		if(!HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0))			val=1;
		else if(!HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1))	val=2;
		else if(!HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2))	val=3;
		else if(!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0))	val=4;
		else 											val=0;

		if(DATA.display==2)
		{
			if(val==4)
			{
				if(key_flag==0)
				{
					if(++time_num==101)
					{
						time_num=0;
						key_flag=1;
						return 4;
					}				
				}
			}
			else if(time_num)	//短按
			{
				time_num=0;
				return 4;
			}
			else
			{
				if(key_flag==2) key_flag=0;
				key=val&(val^com);
				com=val;	
			}			
		}
		else
		{
			key=val&(val^com);
			com=val;			
		}
	}
	
	return key;
}

void KEY_function(void)
{
	u8 key;
	u8 a;
	float data[2]= {0};
 
	
	key=KEY_scan();
	
	if(key)
	{
		if(key==1)
		{
			if(++DATA.display==3) DATA.display=0;
			
			LCD_Clear(Black);
			
			if(DATA.display==0)
			{
				sprintf((char *)LCD_LINE_BUF[1],"        DATA        ");
				sprintf((char *)LCD_LINE_BUF[3],"     PA4=%-3.2f     ",DATA.PA4);
				sprintf((char *)LCD_LINE_BUF[4],"     PA5=%-3.2f     ",DATA.PA5);
				sprintf((char *)LCD_LINE_BUF[5],"     PA1=%-4d        ",DATA.PA1);
				
				LCD_LINE_state|=LCD_LINE_1|LCD_LINE_3|LCD_LINE_4|LCD_LINE_5;
			}
			else if(DATA.display==1)
			{
				sprintf((char *)LCD_LINE_BUF[1],"        PARA        ");
				sprintf((char *)LCD_LINE_BUF[3],"     X=%1d          ",DATA.X);
				sprintf((char *)LCD_LINE_BUF[4],"     Y=%1d          ",DATA.Y);
				
				LCD_LINE_state|=LCD_LINE_1|LCD_LINE_3|LCD_LINE_4;			
			}
			else if(DATA.display==2)
			{
				sprintf((char *)LCD_LINE_BUF[1],"        REC-PA4     ");
				sprintf((char *)LCD_LINE_BUF[3],"     N=%-d          ",DATA.N[0]);
				sprintf((char *)LCD_LINE_BUF[4],"     A=%-3.2f       ",DATA.A[0]);
				sprintf((char *)LCD_LINE_BUF[5],"     T=%-3.2f       ",DATA.T[0]);
				sprintf((char *)LCD_LINE_BUF[6],"     H=%-3.2f       ",DATA.H[0]);
				
				LCD_LINE_state|=LCD_LINE_1|LCD_LINE_3|LCD_LINE_4|LCD_LINE_5|LCD_LINE_6;			
			}
		}
		else if(key==2)
		{
			if(DATA.display==1)
			{
				if(++DATA.X==5) DATA.X=1;
				sprintf((char *)LCD_LINE_BUF[3],"     X=%1d          ",DATA.X);				
				LCD_LINE_state|=LCD_LINE_3;
			}	
			EEPROM_write(1,DATA.X);			
		}
		else if(key==3)
		{
			if(DATA.display==1)
			{
				if(++DATA.Y==5) DATA.Y=1;
				sprintf((char *)LCD_LINE_BUF[4],"     Y=%1d          ",DATA.Y);				
				LCD_LINE_state|=LCD_LINE_4;
			}	
			EEPROM_write(0,DATA.Y);
			
			if(DATA.PA4>(DATA.PA5*DATA.Y))
			{
				DATA.led_flag=1;
			}
			else
			{
				DATA.led_flag=0;
				LED_state|=LED3;
			}			
			
		}
		else if(key==4)
		{
			if(DATA.display==0)
			{
				for(a=0;a<ADC_LEN/2;a++)
				{
					data[0]+=ADC_BUF[2*a];
					data[1]+=ADC_BUF[2*a+1];
				}
				data[0]/=(ADC_LEN/2);
				data[1]/=(ADC_LEN/2);
				 
				data[0]=data[0]*3.3/4095;
				data[1]=data[1]*3.3/4095;
				
				DATA.PA4=data[0];
				DATA.PA5=data[1];
				
				sprintf((char *)LCD_LINE_BUF[3],"     PA4=%-3.2f     ",DATA.PA4);
				sprintf((char *)LCD_LINE_BUF[4],"     PA5=%-3.2f     ",DATA.PA5);
				LCD_LINE_state|=LCD_LINE_3|LCD_LINE_4; 

				if(DATA.PA4>(DATA.PA5*DATA.Y))
				{
					DATA.led_flag=1;
				}
				else
				{
					DATA.led_flag=0;
					LED_state|=LED3;
				}
				
				for(a=0;a<2;a++)
				{
					if(DATA.adc_flag[a]==0)
					{
						DATA.adc_flag[a]=1;
						DATA.N[a]++;
						DATA.A[a]=data[a];
						DATA.T[a]=data[a];
						DATA.H[a]=data[a];
						DATA.ADC_data_num[a]+=data[a];
					}
					else
					{
						DATA.N[a]++;
						if(DATA.A[a]<data[a]) DATA.A[a]=data[a];
						if(DATA.T[a]>data[a]) DATA.T[a]=data[a];
						DATA.ADC_data_num[a]+=data[a];
						DATA.H[a]=DATA.ADC_data_num[a]/DATA.N[a];
					}				
				}
			}
			else if(DATA.display==1)
			{
				DATA.pwm_mode=!DATA.pwm_mode;
				
				if(DATA.pwm_mode==0) 
				{
					LED_state&=~LED1;
					LED_state|=LED2;
				}
				else
				{
					LED_state|=LED1;
					LED_state&=~LED2;				
				}
			}
			else if(DATA.display==2)
			{
				if(key_flag==0)	//短按
				{
					if(++DATA.ERC_flag==2) DATA.ERC_flag=0;
				}
				else	//长按
				{
					key_flag=2;
					
					DATA.N[DATA.ERC_flag]=0;
					DATA.A[DATA.ERC_flag]=0;
					DATA.T[DATA.ERC_flag]=0;
					DATA.H[DATA.ERC_flag]=0;
					DATA.adc_flag[DATA.ERC_flag]=0;
					DATA.ADC_data_num[DATA.ERC_flag]=0;
				}
				
				sprintf((char *)LCD_LINE_BUF[1],"        REC-PA%1d   ",DATA.ERC_flag==0?4:5);
				sprintf((char *)LCD_LINE_BUF[3],"     N=%-d          ",DATA.N[DATA.ERC_flag]);
				sprintf((char *)LCD_LINE_BUF[4],"     A=%-3.2f       ",DATA.A[DATA.ERC_flag]);
				sprintf((char *)LCD_LINE_BUF[5],"     T=%-3.2f       ",DATA.T[DATA.ERC_flag]);
				sprintf((char *)LCD_LINE_BUF[6],"     H=%-3.2f       ",DATA.H[DATA.ERC_flag]);	
				
				LCD_LINE_state|=LCD_LINE_1|LCD_LINE_3|LCD_LINE_4|LCD_LINE_5|LCD_LINE_6;					
				
			}
		}
	}
}

输入捕获功能

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	static u8 flag=0;
	if(htim==(&htim2))
	{
		if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_2)
		{
			if(flag==0)
			{
				flag=1;
				TIME_IN.data=TIM2->CCR2;
			}
			else if(flag==1)
			{
				flag=0;
				TIME_IN.data=TIM2->CCR2-TIME_IN.data;
				TIME_IN.state=2;
				
				HAL_TIM_IC_Stop_IT(&htim2,TIM_CHANNEL_2);			
			}
		}
	}
}

void TIM_IN_function(void)
{
	if(!TIME.TIM_IN)
	{
		if(TIME_IN.state==0)
		{
			TIME_IN.state=1;
			TIME.OVER_TIME=1000;
			TIM2->CNT=0;
			HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);
		}
		else if(TIME_IN.state==1)
		{
			if(TIME.OVER_TIME==0)
			{
				TIME_IN.state=2;
				HAL_TIM_IC_Stop_IT(&htim2,TIM_CHANNEL_2);
				
				TIME_IN.data=0;
			}
		}
		else if(TIME_IN.state==2)
		{
			TIME_IN.state=0;		
				
			DATA.PA1=TIME_IN.data;

			if(DATA.display==0)
			{
				sprintf((char *)LCD_LINE_BUF[5],"     PA1=%-4d        ",TIME_IN.data==0?0:1000000/TIME_IN.data);
				LCD_LINE_state|=LCD_LINE_5;			
			}
			if(DATA.pwm_mode==0)
			{
				TIM3->ARR=DATA.PA1/DATA.X;
				TIM3->CCR2=DATA.PA1/DATA.X/2;	
			}
			else
			{
				TIM3->ARR=DATA.PA1*DATA.X;
				TIM3->CCR2=DATA.PA1*DATA.X/2;				
			}
			TIME.TIM_IN=TIM_IN_TIME;						
		}
	}
}

串口功能

	char buf[64],len;
u8 UART_Handler(void)
{

	
	if(UART1_RX_LEN==1)	//查询参数 | 切换显示模式
	{
		if(UART1_BUF[0]=='X')
		{
			buf[0]='X';
			buf[1]=':';
			buf[2]=DATA.X+0x30;
			len=3;
		}
		else if(UART1_BUF[0]=='Y')
		{
			buf[0]='Y';
			buf[1]=':';			
			buf[2]=DATA.Y+0x30;
			len=3;
		}
		else if(UART1_BUF[0]=='#')
		{
			DATA.lcd_mode=!DATA.lcd_mode;
			if(DATA.lcd_mode==0)  
			{
				LED_state&=~LED4;
				LCD_WriteReg(R96 , 0x2700); // Gate Scan Line		  0xA700
				LCD_WriteReg(R1  , 0x0000); // set SS and SM bit	  //0x0100
			}
			else 				  
			{
				LED_state|=LED4;
				LCD_WriteReg(R96 , 0xA700); // Gate Scan Line		  0xA700
				LCD_WriteReg(R1  , 0x0100); // set SS and SM bit		  //0x0100				
			}
			LCD_Clear(Black);
			if(DATA.display==0)
			{
				sprintf((char *)LCD_LINE_BUF[1],"        DATA        ");
				sprintf((char *)LCD_LINE_BUF[3],"     PA4=%-3.2f     ",DATA.PA4);
				sprintf((char *)LCD_LINE_BUF[4],"     PA5=%-3.2f     ",DATA.PA5);
				sprintf((char *)LCD_LINE_BUF[5],"     PA1=%-4d        ",DATA.PA1);
				
				LCD_LINE_state|=LCD_LINE_1|LCD_LINE_3|LCD_LINE_4|LCD_LINE_5;
			}
			else if(DATA.display==1)
			{
				sprintf((char *)LCD_LINE_BUF[1],"        PARA        ");
				sprintf((char *)LCD_LINE_BUF[3],"     X=%1d          ",DATA.X);
				sprintf((char *)LCD_LINE_BUF[4],"     Y=%1d          ",DATA.Y);
				
				LCD_LINE_state|=LCD_LINE_1|LCD_LINE_3|LCD_LINE_4;			
			}
			else if(DATA.display==2)
			{
				sprintf((char *)LCD_LINE_BUF[1],"        REC-PA4     ");
				sprintf((char *)LCD_LINE_BUF[3],"     N=%-d          ",DATA.N[0]);
				sprintf((char *)LCD_LINE_BUF[4],"     A=%-3.2f       ",DATA.A[0]);
				sprintf((char *)LCD_LINE_BUF[5],"     T=%-3.2f       ",DATA.T[0]);
				sprintf((char *)LCD_LINE_BUF[6],"     H=%-3.2f       ",DATA.H[0]);
				
				LCD_LINE_state|=LCD_LINE_1|LCD_LINE_3|LCD_LINE_4|LCD_LINE_5|LCD_LINE_6;			
			}			
			
			return 0;
		}
		else return 0;
	}
	else if( (UART1_RX_LEN) && (UART1_BUF[0]=='P') && (UART1_BUF[1]=='A') )	//查询数据
	{
		if(UART1_BUF[2]=='1')
		{
			sprintf(buf,"PA1:%-5d",1000000/DATA.PA1);
			len=9;
		}
		else if(UART1_BUF[2]=='4')
		{
			sprintf(buf,"PA4:%-3.2f",DATA.PA4);
			len=8;			
		}
		else if(UART1_BUF[2]=='5')
		{
			sprintf(buf,"PA5:%-3.2f",DATA.PA5);
			len=8;			
		}
		else return 0;
	}
	else return 0;

	HAL_UART_Transmit_DMA(&huart1,(u8 *)buf,len);
	return 1;
}

void UART_function(void)
{
	if(UART_over)
	{
		UART_over=0;
		UART_Handler();
		HAL_UART_Receive_DMA(&huart1,UART1_BUF,UART1_LEN);	
	}
}

LCD翻转功能

			DATA.lcd_mode=!DATA.lcd_mode;
			if(DATA.lcd_mode==0)  
			{
				LED_state&=~LED4;
				LCD_WriteReg(R96 , 0x2700); // Gate Scan Line		  0xA700
				LCD_WriteReg(R1  , 0x0000); // set SS and SM bit	  //0x0100
			}
			else 				  
			{
				LED_state|=LED4;
				LCD_WriteReg(R96 , 0xA700); // Gate Scan Line		  0xA700
				LCD_WriteReg(R1  , 0x0100); // set SS and SM bit		  //0x0100				
			}
			LCD_Clear(Black);
			if(DATA.display==0)
			{
				sprintf((char *)LCD_LINE_BUF[1],"        DATA        ");
				sprintf((char *)LCD_LINE_BUF[3],"     PA4=%-3.2f     ",DATA.PA4);
				sprintf((char *)LCD_LINE_BUF[4],"     PA5=%-3.2f     ",DATA.PA5);
				sprintf((char *)LCD_LINE_BUF[5],"     PA1=%-4d        ",DATA.PA1);
				
				LCD_LINE_state|=LCD_LINE_1|LCD_LINE_3|LCD_LINE_4|LCD_LINE_5;
			}
			else if(DATA.display==1)
			{
				sprintf((char *)LCD_LINE_BUF[1],"        PARA        ");
				sprintf((char *)LCD_LINE_BUF[3],"     X=%1d          ",DATA.X);
				sprintf((char *)LCD_LINE_BUF[4],"     Y=%1d          ",DATA.Y);
				
				LCD_LINE_state|=LCD_LINE_1|LCD_LINE_3|LCD_LINE_4;			
			}
			else if(DATA.display==2)
			{
				sprintf((char *)LCD_LINE_BUF[1],"        REC-PA4     ");
				sprintf((char *)LCD_LINE_BUF[3],"     N=%-d          ",DATA.N[0]);
				sprintf((char *)LCD_LINE_BUF[4],"     A=%-3.2f       ",DATA.A[0]);
				sprintf((char *)LCD_LINE_BUF[5],"     T=%-3.2f       ",DATA.T[0]);
				sprintf((char *)LCD_LINE_BUF[6],"     H=%-3.2f       ",DATA.H[0]);
				
				LCD_LINE_state|=LCD_LINE_1|LCD_LINE_3|LCD_LINE_4|LCD_LINE_5|LCD_LINE_6;			
			}			
			

完整程序下载

下载链接:
链接:https://pan.baidu.com/s/1LMECSy3GuABduu42YUJdSQ
提取码:qy2o

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 蓝桥杯嵌入第十三届省赛题目pdf是指蓝桥杯嵌入程序设计竞赛第十三届省级赛事的题目文档,采用PDF格蓝桥杯嵌入程序设计竞赛是中国高校计算机类专业的一项大型赛事,旨在发掘和培养具有创新能力和实践能力的嵌入程序设计人才。 这份题目文档是参赛选手参加赛事时必须仔细阅读和理解的重要材料。文档中包含了若干题目,每道题目给出了对应的要求和限制条件。这些题目旨在考察选手的嵌入程序设计能力,要求选手能够使用某种特定的硬件平台和开发工具,通过编程实现给定的功能。 选手需要根据题目要求,进行代码设计和编写,并在规定的时间内完成。在比赛过程中,选手需要充分发挥自己的创造力和动手能力,灵活运用所学的嵌入开发技术,对硬件进行编程和控制。 通过参加蓝桥杯嵌入竞赛,选手能够不仅加深对嵌入程序设计的理解和实践,还能锻炼自己的团队协作能力和解决问题的能力。同时,竞赛还为参赛选手提供了展示自己才华和技能的平台,有助于提升个人的竞争力和就业前景。 蓝桥杯嵌入第十三届省赛题目pdf对于参赛选手来说,是一份重要的参考资料,提前熟悉并深入理解题目要求和限制条件,对于比赛的顺利进行和取得好成绩具有重要意义。因此,选手需要认真阅读文档内容,并在赛前做好充分的准备。 ### 回答2: 《蓝桥杯嵌入第十三届省赛题目pdf》是指蓝桥杯嵌入系统开发大赛第十三届省赛的题目所在的pdf文档。 嵌入系统开发大赛是一个国内知名的比赛,旨在培养和选拔优秀的嵌入系统开发人才。每届比赛都会发布一系列的题目,供参赛选手选择并完成。这些题目通常涉及到嵌入系统的设计开发、调试和优化,考察选手在硬件和软件层面的能力。 所以,《蓝桥杯嵌入第十三届省赛题目pdf》所指的文档,应该是包含了该届比赛的题目内容,以供参赛选手进行参考和分析。这份pdf文档可能会包含多个题目,每个题目都会描述需求、规定技术要求和评分标准等内容。选手需要根据题目要求进行系统设计和编程,并在规定时间内提交作品。 参加该比赛的选手通过完成这份《蓝桥杯嵌入第十三届省赛题目pdf》所包含的题目,可以展示他们在嵌入系统开发方面的综合能力,包括硬件设计嵌入编程、系统优化和问题解决能力等。这对于他们今后在嵌入系统领域的发展和就业都具有重要的意义。 总而言之,《蓝桥杯嵌入第十三届省赛题目pdf》是一份比赛题目文档,对于参赛选手来说是进行准备和实践的重要资料。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值