原理
由于藍橋杯的板子帶有鎖存器,并且與lcd屏幕有沖突,所以這個就成了考點。
主要就是用定時器來實現,同時也要兼顧lcd的沖突。
一、處理LCD函數
首先來解決與lcd屏幕沖突的問題,把我們所有用到的lcd函數改裝一下。
?以下是基本格式
void LCD函數名(void)
{uint16_t temp = GPIOC->ODR;//其他代碼----//---//---GPIOC->ODR = temp;
}
目的是在每一次調用LCD相關的函數時候,把引腳的狀態恢復為原態。
二、配置定時器
配置一個基本定時+中斷功能即可
通過配置PSC和ARR 把周期設置成0.1s
記得中斷使能
三、代碼
你要實現某條件下,led閃爍,就需要設置一個標志位,等到他條件滿足的時候,在while循環里面就一直不斷地關閉led。
與此同時,開啟定時器,在中斷回調函數里面不斷開啟
由于while循環執行的更塊,所以,每隔0.1s就會進一次中斷,也就是每0.1sLED會亮一次。
這樣就實現了閃爍的效果。
寫一個函數放在while里。 ? ? ? ?
//滿足某條件,就開啟TIM1
//滿足某條件,就關閉TIM1
這樣就可以實現自由控制是否閃爍
int main()
{HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);//先關閉鎖存器LCD_Init();LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);//其他代碼//-----------//-----------//其他代碼while(){ //其他代碼------------
寫一個函數放在while里。
//滿足某條件,就開啟TIM1
//滿足某條件,就關閉TIM1//這樣就可以實現自由控制是否閃爍if(標志位條件){HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7 << 2, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);}//其他代碼----------}}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7 << 2, GPIO_PIN_RESET); // 2閃爍HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);}