任务一:按键控制定时流水灯
任务要求
通过Systick实现流水灯频率控制,要求循环一次流水灯耗时1s。
使用外部中断功能,用按键控制流水灯。按下按键一开启流水灯,再按下按键一关闭流水灯,按下按键二暂停流水灯。
实现思路
为了实现同一个按键控制开启关闭的功能,用exti监测按键按下次数,return CountSensor_Count返回按下按键数量,并在OLED上显示(便于调试);在返回值为奇数时开启流水灯,偶数时关闭流水灯.
视频展示
关键代码#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
#include "EXTI.h"
#include "LED.h"
int main(void)
{
CountSensor_Init();
LED_Init();
OLED_Init();
OLED_ShowString(1,1,"Count:");
GPIO_SetBits(GPIOA,GPIO_Pin_All);
while(1)
{
OLED_ShowNum(1,7,CountSensor_Get(),5);
OLED_ShowNum(2,7,Countting_Get(),5);
uint16_t key_count = CountSensor_Get();
int16_t key_Countting = Countting_Get();
if((key_Countting+1)%2==0){
if((key_count+1)%2==0)
{
GPIO_Write(GPIOA, ~0x0001); //0000 0000 0000 0001
Delay_ms(100);
GPIO_Write(GPIOA, ~0x0002); //0000 0000 0000 0010
Delay_ms(100);
GPIO_Write(GPIOA, ~0x0004); //0000 0000 0000 0100
Delay_ms(100);
GPIO_Write(GPIOA, ~0x0008); //0000 0000 0000 1000
Delay_ms(100);
GPIO_Write(GPIOA, ~0x0010); //0000 0000 0001 0000
Delay_ms(100);
GPIO_Write(GPIOA, ~0x0020); //0000 0000 0010 0000
Delay_ms(100);
GPIO_Write(GPIOA, ~0x0040); //0000 0000 0100 0000
Delay_ms(100);
GPIO_Write(GPIOA, ~0x0080); //0000 0000 1000 0000
Delay_ms(100);
}
}
else {
GPIO_SetBits(GPIOA,GPIO_Pin_All);
}
}
}
|