当前位置:网站首页>Final of the 13th Blue Bridge Cup embedded design and development project
Final of the 13th Blue Bridge Cup embedded design and development project
2022-06-22 12:33:00 【However, naturally】
frame
Competition questions

CubeMX To configure
ADC


Input capture

Pulse output

A serial port

Program display
Key function
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) // Short press
{
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) // Short press
{
if(++DATA.ERC_flag==2) DATA.ERC_flag=0;
}
else // Long press
{
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;
}
}
}
}
Input capture function
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;
}
}
}
Serial function
char buf[64],len;
u8 UART_Handler(void)
{
if(UART1_RX_LEN==1) // Query parameters | Switch display mode
{
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') ) // Query data
{
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 Flip function
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;
}
Complete program download
Download link :
link :https://pan.baidu.com/s/1LMECSy3GuABduu42YUJdSQ
Extraction code :qy2o
边栏推荐
- Tensorflow2 模型优化环境快速搭建
- C language itoa() function and atoi() function explanation (integer to character c implementation)
- Ogg12 processing ogg-01163 fault error
- 帮忙看一下,这个sql怎么会执行失败呢
- 0179-Largest Number( 最大数)
- Latex希腊字母对照表
- 关于buildroot编译问题--功能配置了,但未编译进内核
- getenv、setenv函数(获取和设置系统环境变量) 与 环境变量
- V4L2像素格式及其对应的含义
- Flutter:剥离StatefulWidget——简化页面开发、跳转以及传值
猜你喜欢

Vue混写Minxin、虚拟Dom/ref、动态组件、缓存keep

Getting started with fluent Animation: inner and outer reverse ring loading animation

OceanBase数据库助力理想汽车智能生产线 可实现30秒内自动恢复

重磅直播|BizDevOps:数字化转型浪潮下的技术破局之路

磁盘rejecting I/O to offline device故障导致4TB生产数据库无法访问

Opencv invokes the USB camera to solve the "select timeout" problem

PyCharm编写shell脚本无法运行

分享7个免费超清的影视资源站!不管是剪辑还是珍藏都实用到哭!

SAP-MM-MIGO 311工厂内转移挑拨库存

0179-Largest Number( 最大数)
随机推荐
zcu102 PL端流水灯
oracle处理插入重复记录的技巧
分享7个免费超清的影视资源站!不管是剪辑还是珍藏都实用到哭!
Opencv invokes the USB camera to solve the "select timeout" problem
SAP-ABAP-BAPI_GOODSMVT_CREATE创建物料凭证bapi的各种情况如何赋值
0179-Largest Number( 最大数)
CAT敏捷团队教练工作坊 (Coaching Agile Teams) | 8月20日开课
Flutter——ListView源码分析之child-view的构建
Small demo of QT page layout class
uboot do_load函数分析
Error: unresolved variable $bus and "typeerror: cannot read property '$on' of undefined“
sql行列转换
【mysql】where 和 having 的区别
Flutter imitates airbnb's price range filter. (I)
Vue混写Minxin、虚拟Dom/ref、动态组件、缓存keep
[high frequency written test questions] 513 Find the value in the lower left corner of the tree
职场杰出人士的20个好习惯
odps sql的执行流程不是从上到下执行吗
stm32 hal串口中断分析
Flutter——实现网易云音乐的Tabbar切换效果