/* * Timer.c * * Created on: Feb 28, 2025 * Author: bihon */ #include "Timer.h" uint16_t Timer_Value; //用于存储计时时间 static uint16_t Time;//静态变量,用于实际计时 volatile uint8_t Timer_Stop_Permission;//计时中断允许标志 volatile uint8_t Timer_Stop_Mark; //计时器停止标志 /** * @brief 设置定时器的计时时间 * @param set_time 要设置的计时时间(单位:ms) * @param stop_perm 计时中断允许标志,0 表示不允许中断,1 表示允许中断 * @return 设置成功返回 1,参数错误设置失败返回 0 * @note 由于定时器周期为 2ms,实际计时时间为 set_time / 2 */ uint8_t Timer_Set(uint16_t set_time, uint8_t stop_perm) { if(set_time >= 2) { Timer_Value = set_time / 2; Time = Timer_Value;//为定时器赋计数值 Timer_Stop_Permission = stop_perm;//为定时器允许中断标志赋值 Timer_Stop_Mark = 0;//定时器停止标志恢复默认值 return 1;//设置成功 }else { return 0;//参数错误,设置失败 } } /** * @brief 开始倒计时,在定时器中断中调用 * @return 计时结束返回 1,计时未结束或被停止返回 0,计时过程被打断返回2 */ uint8_t Timer_Start_Count() { //定时器周期为2ms,实际计时数据为设定时间除2 if(!Timer_Stop_Mark) { if(Time >= 0) { if(Time == 0) { return 1;//计时结束 } Time--; return 0;//仍在计时 } }else { Time = 0;//计数器清零 return 2;//停止计时 } } /** * @brief 停止定时器计时 */ void Timer_Stop_Count() { if(Timer_Stop_Permission == 1) { Timer_Stop_Mark = 1; } }