主要代码如下(除了按键扫描和点灯):
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "lcd.h"
#include "stdio.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
/* 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 lcd_pro(void);
void lcd_psd(void);
void lcd_sta(void);
void led_pro(void);
void pwm_pro(void);
void usart_pro(void);
void L1_pro(void);
void L2_pro(void);
void key_pro(void);
uint8_t mima_check(void);
int lcd_flag=0;
uint8_t lcdstring[50];
uint8_t rxstring[50]={0};
int b1=-1;
int b2=-1;
int b3=-1;
int b1_flag=0;
int b2_flag=0;
int b3_flag=0;
int mima[3]={0,0,0};
uint16_t ucled=0x00;
int led_flag=0;
__IO uint32_t led1_setpoint=0;
__IO uint32_t led2_setpoint=0;
__IO uint32_t led3_setpoint=0;
__IO uint32_t pwm_setpoint=0;
int cuo_cnt=0;
int i=0;
int pwm_flag=0;
/* 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_TIM2_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
LCD_Init();
LCD_Clear(Black);
LCD_SetBackColor(Black);
LCD_SetTextColor(White);
HAL_UART_Receive_IT(&huart1,rxstring, 50);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
lcd_pro();
key_pro();
led_pro();
L1_pro();
L2_pro();
pwm_pro();
// usart_pro();
}
/* USER CODE END 3 */
}
/**
* @brief System Clock Configuration
* @retval None
*/
/* USER CODE BEGIN 4 */
void lcd_pro(void)
{
if(lcd_flag==0)
lcd_psd();
else
lcd_sta();
}
void lcd_psd(void)
{
sprintf((char *)lcdstring," PSD ");
LCD_DisplayStringLine(Line1,lcdstring);
if(b1_flag==0)
sprintf((char *)lcdstring," B1:@ ");
else
sprintf((char *)lcdstring," B1:%d ",b1);
LCD_DisplayStringLine(Line3,lcdstring);
if(b2_flag==0)
sprintf((char *)lcdstring," B2:@ ");
else
sprintf((char *)lcdstring," B2:%d ",b2);
LCD_DisplayStringLine(Line4,lcdstring);
if(b3_flag==0)
sprintf((char *)lcdstring," B3:@ ");
else
sprintf((char *)lcdstring," B3:%d ",b3);
LCD_DisplayStringLine(Line5,lcdstring);
}
void lcd_sta(void)
{
sprintf((char *)lcdstring," STA ");
LCD_DisplayStringLine(Line1,lcdstring);
sprintf((char *)lcdstring," F:2000HZ ");
LCD_DisplayStringLine(Line3,lcdstring);
sprintf((char *)lcdstring," D:10%s ","%");
LCD_DisplayStringLine(Line4,lcdstring);
}
void led_pro(void)
{
led_disp(ucled);
}
void L1_pro(void)
{
if(led_flag==1)
{
if(uwTick-led1_setpoint>5000)
{
led_flag=0;
ucled=ucled&0xfe;
lcd_flag=0;
LCD_Clear(Black);
b1_flag=0;
b2_flag=0;
b3_flag=0;
b1=-1;
b2=-1;
b3=-1;
return;
}
ucled=ucled|0x01;
}
}
void L2_pro(void)
{
if(cuo_cnt>=3&&led_flag==2)
{
if(uwTick-led2_setpoint>5000)
{
ucled=ucled&0xfd;
led_flag=0;
return;
}
if(uwTick-led3_setpoint<100) return;
else
led3_setpoint=uwTick;
i++;
if(i%2==0)
ucled=ucled|0x02;
else
ucled=ucled&0xfd;
}
}
void pwm_pro(void)
{
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
if(pwm_flag==0)
{
__HAL_TIM_SET_AUTORELOAD(&htim2, 999);
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2, 500);
}
else if(pwm_flag==1)
{
if(uwTick-pwm_setpoint>5000)
{
pwm_flag=0;
return;
}
__HAL_TIM_SET_AUTORELOAD(&htim2, 499);
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2, 50);
}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(rxstring[0]-48==mima[0]&&rxstring[1]-48==mima[1]&&rxstring[2]-48==mima[2]&&rxstring[3]=='-')
{
ucled=ucled|0x01;
mima[0]=rxstring[4]-48;
mima[1]=rxstring[5]-48;
mima[2]=rxstring[6]-48;
}
}
void key_pro(void)
{
if(key_scan()==1)
{
while(key_scan()!=0);
b1_flag=1;
b1++;
if(b1==10)
b1=0;
}
if(key_scan()==2)
{
while(key_scan()!=0);
b2_flag=1;
b2++;
if(b2==10)
b2=0;
}
if(key_scan()==3)
{
while(key_scan()!=0);
b3_flag=1;
b3++;
if(b3==10)
b3=0;
}
if(key_scan()==4)
{
while(key_scan()!=0);
if(mima_check()==1)
{
LCD_Clear(Black);
lcd_flag=1;
led_flag=1;
uwTick=0;
cuo_cnt=0;
pwm_flag=1;
}
else
{
uwTick=0;
cuo_cnt++;
led_flag=2;
}
}
}
uint8_t mima_check(void)
{
if(b1==mima[0]&&b2==mima[1]&&b3==mima[2])
return 1;
else
return 0;
}
/* USER CODE END 4 */
写的比较急,没有注释,看不懂的可私聊