赛题
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