1 题目
2 程序
/* USER CODE BEGIN PTD */
char buf1[20],buf2[20],buf3[20],buf4[20],buf5[20],buf6[20],buf7[20],buf8[20],buf9[20];
struct keys
{
int step;
int length;
int state;
}key[5];
int display;
double v1,v2;
int t;
double v1l=1.2,v1u=2.2,v2l=1.4,v2u=3.0;
double vu[6]={0,2.2,2.4,2.6,2.8,3.0},vl[6]={0,1.2,1.4,1.6,1.8,2.0};
int choice;
int i=1,j=1,k=2,p=5;
double ok1,nok1,ok2,nok2;
double p1,p2;
int led1,led2;
int cnt1,cnt2;
char tran[100],tran1[10]={"R37"},tran2[10]={"R38"};
/* USER CODE END PTD */
/* USER CODE BEGIN PFP */
double getADC()
{
HAL_ADC_Start(&hadc1);
HAL_ADC_Start(&hadc2);
v1=HAL_ADC_GetValue(&hadc2);
// t=100000; while(t--);
v2=HAL_ADC_GetValue(&hadc1);
// t=100000; while(t--);
sprintf(buf2," R37:%.2lfV",v1*3.3/4096);
sprintf(buf3," R38:%.2lfV",v2*3.3/4096);
}
void LED_CLOSE()
{
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM1)
{
key[1].state=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);
key[2].state=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);
key[3].state=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);
key[4].state=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
switch(key[1].step)
{
case 0:
{
if(key[1].state==GPIO_PIN_RESET)
{
key[1].step++;
}
}
break;
case 1:
{
if(key[1].state==GPIO_PIN_RESET)
{
display++;
LCD_Clear(Black);
if(display%3==0)
{
LCD_DisplayStringLine(Line1,(uint8_t*)buf1);
LCD_DisplayStringLine(Line3,(uint8_t*)buf2);
LCD_DisplayStringLine(Line4,(uint8_t*)buf3);
}
if(display%3==1)
{
LCD_DisplayStringLine(Line1,(uint8_t*)buf4);
LCD_DisplayStringLine(Line3,(uint8_t*)buf5);
LCD_DisplayStringLine(Line4,(uint8_t*)buf6);
}
if(display%3==2)
{
LCD_DisplayStringLine(Line1,(uint8_t*)buf7);
LCD_DisplayStringLine(Line3,(uint8_t*)buf8);
LCD_DisplayStringLine(Line4,(uint8_t*)buf9);
}
key[1].step++;
}
else
{
key[1].step=0;
}
}
break;
case 2:
{
if(key[1].state==GPIO_PIN_SET)
{
key[1].step=0;
}
}
break;
}
if(display%3==1)
{
switch(key[2].step)
{
case 0:
{
if(key[2].state==GPIO_PIN_RESET)
{
key[2].step++;
}
}
break;
case 1:
{
if(key[2].state==GPIO_PIN_RESET)
{
choice++;
key[2].step++;
}
else
{
key[2].step=0;
}
}
break;
case 2:
{
if(key[2].state==GPIO_PIN_SET)
{
key[2].step=0;
}
}
break;
}
}
if(display%3==0)
{
switch(key[2].step)
{
case 0:
{
if(key[2].state==GPIO_PIN_RESET)
{
key[2].step++;
}
}
break;
case 1:
{
if(key[2].state==GPIO_PIN_RESET)
{
if(v1*3.3/4096<vu[j]&&v1*3.3/4096>vl[i])
{
ok1++;
led1=1;
}
else
{
nok1++;
}
p1=ok1/(ok1+nok1);
sprintf(buf8," PR37:%.1lf%%",p1*100);
//LCD_DisplayStringLine(Line3,(uint8_t*)buf8);
key[2].step++;
}
else
{
key[2].step=0;
}
}
break;
case 2:
{
if(key[2].state==GPIO_PIN_SET)
{
key[2].step=0;
}
}
break;
}
}
if(display%3==1)
{
switch(key[3].step)
{
case 0:
{
if(key[3].state==GPIO_PIN_RESET)
{
key[3].step++;
}
}
break;
case 1:
{
if(key[3].state==GPIO_PIN_RESET)
{
if(choice%4==1)
{
i++;
if(i==6) i=1;
sprintf(buf5," SR37:%.1lf-%.1lf",vl[i],vu[j]);
sprintf(buf6," SR38:%.1lf-%.1lf",vl[k],vu[p]);
ok1=0;
nok1=0;
p1=0;
sprintf(buf8," PR37:0.0%%");
}
if(choice%4==0)
{
j++;
if(j==6) j=1;
sprintf(buf5," SR37:%.1lf-%.1lf",vl[i],vu[j]);
sprintf(buf6," SR38:%.1lf-%.1lf",vl[k],vu[p]);
ok1=0;
nok1=0;
p1=0;
sprintf(buf8," PR37:0.0%%");
}
if(choice%4==3)
{
k++;
if(k==6) k=1;
sprintf(buf5," SR37:%.1lf-%.1lf",vl[i],vu[j]);
sprintf(buf6," SR38:%.1lf-%.1lf",vl[k],vu[p]);
ok2=0;
nok2=0;
p2=0;
sprintf(buf9," PR38:0.0%%");
}
if(choice%4==2)
{
p++;
if(p==6) p=1;
sprintf(buf5," SR37:%.1lf-%.1lf",vl[i],vu[j]);
sprintf(buf6," SR38:%.1lf-%.1lf",vl[k],vu[p]);
ok2=0;
nok2=0;
p2=0;
sprintf(buf9," PR38:0.0%%");
}
LCD_DisplayStringLine(Line3,(uint8_t*)buf5);
LCD_DisplayStringLine(Line4,(uint8_t*)buf6);
key[3].step++;
}
else
{
key[3].step=0;
}
}
break;
case 2:
{
if(key[3].state==GPIO_PIN_SET)
{
key[3].step=0;
}
}
break;
}
}
if(display%3==0)
{
switch(key[3].step)
{
case 0:
{
if(key[3].state==GPIO_PIN_RESET)
{
key[3].step++;
}
}
break;
case 1:
{
if(key[3].state==GPIO_PIN_RESET)
{
if(v2*3.3/4096<vu[p]&&v2*3.3/4096>vl[k])
{
ok2++;
led2=1;
}
else
{
nok2++;
}
p2=ok2/(ok2+nok2);
sprintf(buf9," PR38:%.1lf%%",p2*100);
//LCD_DisplayStringLine(Line3,(uint8_t*)buf8);
key[3].step++;
}
else
{
key[3].step=0;
}
}
break;
case 2:
{
if(key[3].state==GPIO_PIN_SET)
{
key[3].step=0;
}
}
break;
}
}
if(display%3==1)
{
switch(key[4].step)
{
case 0:
{
if(key[4].state==GPIO_PIN_RESET)
{
key[4].step++;
}
}
break;
case 1:
{
if(key[4].state==GPIO_PIN_RESET)
{
if(choice%4==1)
{
i--;
if(i==0) i=5;
sprintf(buf5," SR37:%.1lf-%.1lf",vl[i],vu[j]);
sprintf(buf6," SR38:%.1lf-%.1lf",vl[k],vu[p]);
}
if(choice%4==0)
{
j--;
if(j==0) j=5;
sprintf(buf5," SR37:%.1lf-%.1lf",vl[i],vu[j]);
sprintf(buf6," SR38:%.1lf-%.1lf",vl[k],vu[p]);
}
if(choice%4==3)
{
k--;
if(k==0) k=5;
sprintf(buf5," SR37:%.1lf-%.1lf",vl[i],vu[j]);
sprintf(buf6," SR38:%.1lf-%.1lf",vl[k],vu[p]);
}
if(choice%4==2)
{
p--;
if(p==0) p=5;
sprintf(buf5," SR37:%.1lf-%.1lf",vl[i],vu[j]);
sprintf(buf6," SR38:%.1lf-%.1lf",vl[k],vu[p]);
}
LCD_DisplayStringLine(Line3,(uint8_t*)buf5);
LCD_DisplayStringLine(Line4,(uint8_t*)buf6);
key[4].step++;
}
else
{
key[4].step=0;
}
}
break;
case 2:
{
if(key[4].state==GPIO_PIN_SET)
{
key[4].step=0;
}
}
break;
}
}
if(display%3==2)
{
switch(key[4].step)
{
case 0:
{
if(key[4].state==GPIO_PIN_RESET)
{
key[4].step++;
}
}
break;
case 1:
{
if(key[4].state==GPIO_PIN_RESET)
{
ok1=0;
nok1=0;
p1=0;
ok2=0;
nok2=0;
p2=0;
sprintf(buf8," PR37:0.0%%");
sprintf(buf9," PR38:0.0%%");
LCD_DisplayStringLine(Line3,(uint8_t*)buf8);
LCD_DisplayStringLine(Line4,(uint8_t*)buf9);
key[4].step++;
}
else
{
key[4].step=0;
}
}
break;
case 2:
{
if(key[4].state==GPIO_PIN_SET)
{
key[4].step=0;
}
}
break;
}
}
getADC();
if(display%3==0)
{
LCD_DisplayStringLine(Line1,(uint8_t*)buf1);
LCD_DisplayStringLine(Line3,(uint8_t*)buf2);
LCD_DisplayStringLine(Line4,(uint8_t*)buf3);
}
if(display%3==1)
{
LCD_DisplayStringLine(Line1,(uint8_t*)buf4);
LCD_DisplayStringLine(Line3,(uint8_t*)buf5);
LCD_DisplayStringLine(Line4,(uint8_t*)buf6);
}
if(display%3==2)
{
LCD_DisplayStringLine(Line1,(uint8_t*)buf7);
LCD_DisplayStringLine(Line3,(uint8_t*)buf8);
LCD_DisplayStringLine(Line4,(uint8_t*)buf9);
}
if(display%3==0)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11|GPIO_PIN_12,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
if(display%3==1)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10|GPIO_PIN_12,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
if(display%3==2)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_12,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11|GPIO_PIN_10,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
switch(led1)
{
case 0:
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
break;
case 1:
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
cnt1++;
if(cnt1==50)
{
cnt1=0;
led1=0;
}
}
break;
}
switch(led2)
{
case 0:
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
break;
case 1:
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
cnt2++;
if(cnt2==50)
{
cnt2=0;
led2=0;
}
}
break;
}
}
}
/* USER CODE END PFP */
/* USER CODE BEGIN 2 */
LCD_Init();
LCD_Clear(Black);
LCD_SetBackColor(Black);
LCD_SetTextColor(White);
LED_CLOSE();
HAL_TIM_Base_Start_IT(&htim1);
sprintf(buf1," GOODS");
sprintf(buf4," STANDARD");
sprintf(buf5," SR37:1.2-2.2");
sprintf(buf6," SR38:1.4-3.0");
sprintf(buf7," PASS");
sprintf(buf8," PR37:0.0%%");
sprintf(buf9," PR38:0.0%%");
HAL_UART_Receive_DMA(&huart1,(uint8_t*)tran,100);
__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);
LCD_DisplayStringLine(Line1,(uint8_t*)buf1);
LCD_DisplayStringLine(Line3,(uint8_t*)buf2);
LCD_DisplayStringLine(Line4,(uint8_t*)buf3);
/* USER CODE END 2 */
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)==SET)
{
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
HAL_UART_DMAStop(&huart1);
if(!strcmp(tran,tran1))
{
sprintf(zifuchuan,"R37:%d,%d,%.1lf%%",(int)ok1+(int)nok1,(int)ok1,p1*100);
HAL_UART_Transmit_DMA(&huart1,(uint8_t*)zifuchuan,100);
}
else if(!strcmp(tran,tran2))
{
sprintf(zifuchuan,"R38:%d,%d,%.1lf%%",(int)ok2+(int)nok2,(int)ok2,p2*100);
HAL_UART_Transmit_DMA(&huart1,(uint8_t*)zifuchuan,100);
}
else
{
HAL_UART_Transmit_DMA(&huart1,(uint8_t*)zifuchuan,0);
}
memset(tran,0,sizeof(tran));
HAL_UART_Receive_DMA(&huart1,(uint8_t*)tran,100);
}
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}