一.main.c
/* USER CODE BEGIN PV */
__IO uint32_t uwTick_key;
__IO uint32_t uwTick_test;
uint32_t test;
//电压
uint32_t Time=0;
uint32_t Time_Sign=0;//开始计时标志位 0-停止计时 1-开始计时
uint32_t Vmax=30;//电压参数最大值
uint32_t Vmin=10;//电压参数最小值
uint32_t Vmax_old=0;//上次最大电压参数
uint32_t Vmin_old=0;//上次最小电压参数
uint32_t ADC_old=0;//记录ADC值之前相较于电压参数的标志位 1-ADC<Vmin 2-ADC>=Vmin&&ADC<=Vmax 3-ADC>Vmax
//LCD
uint8_t LCD_Str[20];
uint8_t LCD_Show=1;//页面索引 1-数据界面 2-参数界面
//KEY
uint8_t key_val=0,key_old=0,key_down=0,key_up=0;
uint8_t Key_state=0;
//LED
uint8_t LED=0;
uint8_t LED2_sign=0;// 0-失能 1-使能
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void LED_Init(void)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
|GPIO_PIN_9|GPIO_PIN_10|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);
}
void LED_SHOW(uint8_t led)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
|GPIO_PIN_9|GPIO_PIN_10|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);
HAL_GPIO_WritePin(GPIOC,led<<8, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
void LED_Proc(void)
{
if(Time_Sign==1)
{
LED|=0x01;
}
else if(Time_Sign==0)
{
LED&=0xfe;
}
if(LED2_sign==1)
{
LED|=0x02;
}
else if(LED2_sign==0)
{
LED&=0xfd;
}
LED_SHOW(LED);
}
void Time_Proc(void)
{
if(ADC*10<Vmin)
{
ADC_old=1;
}
else if( (ADC*10>=Vmin)&&(ADC*10<=Vmax) )
{
if(ADC_old==1)
{
Time=0;
Time_Sign=1;
}
ADC_old=2;
}
else if(ADC*10>Vmax)
{
if(ADC_old==2)
{
Time_Sign=0;
}
ADC_old=3;
}
}
void Key_Proc(void)
{
if( (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==GPIO_PIN_RESET)&&(Key_state==0) )
{
HAL_Delay(10);
if((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==GPIO_PIN_RESET)&&(Key_state==0) )//B1-DOWN
{
Key_state=1;
if(LCD_Show==1)
{
LCD_Show=2;//参数界面
Vmax_old=Vmax;
Vmin_old=Vmin;
}
else if(LCD_Show==2)
{
LCD_Show=1;//数据界面
if(Vmax<Vmin+10)//参数不合理
{
LED2_sign=1;
Vmax=Vmax_old;
Vmin=Vmin_old;
}
else
{
LED2_sign=0;
}
}
}
}
else if((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)!=GPIO_PIN_RESET)&&(Key_state==1))//B1-UP
{
Key_state=0;
}
if( (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==GPIO_PIN_RESET)&&(Key_state==0)&&(LCD_Show==2) )
{
HAL_Delay(10);
if((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==GPIO_PIN_RESET)&&(Key_state==0) )//B2-DOWN
{
Key_state=2;
Vmax+=1;
if(Vmax>=34)
{
Vmax=0;
}
}
}
else if((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)!=GPIO_PIN_RESET)&&(Key_state==2))//B2-UP
{
Key_state=0;
}
if( (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==GPIO_PIN_RESET)&&(Key_state==0) )
{
HAL_Delay(10);
if((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==GPIO_PIN_RESET)&&(Key_state==0)&&(LCD_Show==2) )//B3-DOWN
{
Key_state=3;
Vmin+=1;
if(Vmin>=34)
{
Vmin=0;
}
}
}
else if((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)!=GPIO_PIN_RESET)&&(Key_state==3))//B3-UP
{
Key_state=0;
}
if( (HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)&&(Key_state==0) )
{
HAL_Delay(10);
if((HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)&&(Key_state==0) )//B4-DOWN
{
Key_state=4;
}
}
else if((HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)!=GPIO_PIN_RESET)&&(Key_state==4))//B4-UP
{
Key_state=0;
}
}
void LCD_Proc(void)
{
if(LCD_Show==1)
{
// 123456
sprintf((char *)LCD_Str," Data ");
LCD_DisplayStringLine(Line0,LCD_Str);
sprintf((char *)LCD_Str," V:%3.2fV ",ADC);
LCD_DisplayStringLine(Line2,LCD_Str);
sprintf((char *)LCD_Str," T:%ds ",Time);
LCD_DisplayStringLine(Line3,LCD_Str);
}
else if(LCD_Show==2)
{
// 123456
sprintf((char *)LCD_Str," Para ");
LCD_DisplayStringLine(Line0,LCD_Str);
sprintf((char *)LCD_Str," Vmax:%d.%dV ",Vmax/10,Vmax%10);
LCD_DisplayStringLine(Line2,LCD_Str);
sprintf((char *)LCD_Str," Vmin:%d.%dV ",Vmin/10,Vmin%10);
LCD_DisplayStringLine(Line3,LCD_Str);
}
}
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ADC2_Init();
MX_TIM6_Init();
/* USER CODE BEGIN 2 */
LCD_Init();
LCD_SetTextColor(Black);
LCD_SetBackColor(White);
LCD_Clear(White);
HAL_ADC_Init(&hadc2);
HAL_TIM_Base_Start_IT(&htim6);
LED_Init();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
LCD_Proc();
R37_Proc();
Key_Proc();
Time_Proc();
LED_Proc();
}
/* USER CODE END 3 */
}
二. adc.c
float ADC=0;
uint32_t Get_R37(void)
{
uint32_t adc=0;
HAL_ADC_Start(&hadc2);
HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);
// HAL_ADC_PollForConversion();
adc = HAL_ADC_GetValue(&hadc2);
return adc;
}
void R37_Proc(void)
{
uint32_t i=0,sum=0;
for(i=0;i<10;i++)
{
sum+=Get_R37();
}
ADC = (sum/10)*3.3f/4096;
}
三. tim.c
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM6)
{
// Key_Proc();
if(Time_Sign==1)
{
b++;
if(b==100)
{
Time++;
b=0;
}
}
else if(Time_Sign==0)
{
b=0;
}
// HAL_TIM_Base_Start_IT(&htim6);
}
}