定时器(简单的进行封装)

1.定时器的分类

到时间才会执行

  • 延迟定时器:多长时间之后执行一次 例如:广告弹出

  • 间歇性定时器(轮循):间隔多长时间执行一次 例如:倒计时,轮播图...

2.设置定时器

  • 延迟定时器:setTimeout(函数,时间);

    • 函数:实名函数 、匿名函数

    • 时间:单位ms (省略单位) 1s = 1000ms;

// 获取元素
var aImg = document.getElementsByTagName("img")[0];
var span = document.getElementsByTagName("span")[0];


// 设置定时器
setTimeout(function(){
    aImg.style.display = "block";
    span.style.display = "block";
},5000);

// 点击关闭
span.onclick = function(){
    aImg.style.display = "none";
    this.style.display = "none";
}

 

间歇性定时器(轮循):setInterval(函数,时间);

  • 函数:实名函数 、匿名函数

  • 时间:单位ms (省略单位) 1s = 1000ms;

// 获取元素
var span = document.getE
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的软件定时器封装代码示例,适用于STM32: 首先,定义一个定时器结构体,其中包含定时器 ID、定时器周期、定时器回调函数等信息: ``` typedef struct { uint8_t id; // 定时器 ID uint32_t period; // 定时器周期,单位为毫秒 void (*callback)(void); // 定时器回调函数 uint32_t tick; // 定时器计数器 } Timer_t; ``` 接下来,定义一个定时器数组,并初始化为全 0: ``` #define MAX_TIMER_NUM 10 // 最大定时器数量 Timer_t Timer_List[MAX_TIMER_NUM] = {0}; ``` 然后,实现一个定时器初始化函数,用于配置定时器时钟和定时器中断: ``` void Timer_Init(void) { // 配置定时器时钟为 1ms SysTick_Config(SystemCoreClock / 1000); } ``` 接着,实现一个定时器注册函数,用于向定时器数组中添加定时器: ``` uint8_t Timer_Register(uint32_t period, void (*callback)(void)) { uint8_t i; for (i = 0; i < MAX_TIMER_NUM; i++) { if (Timer_List[i].id == 0) { // 如果该定时器未被占用 Timer_List[i].id = i + 1; Timer_List[i].period = period; Timer_List[i].callback = callback; Timer_List[i].tick = 0; return Timer_List[i].id; // 返回定时器 ID } } return 0; // 返回 0 表示注册失败 } ``` 接着,实现一个定时器删除函数,用于从定时器数组中移除定时器: ``` void Timer_Delete(uint8_t id) { uint8_t i; for (i = 0; i < MAX_TIMER_NUM; i++) { if (Timer_List[i].id == id) { // 如果找到该定时器 Timer_List[i].id = 0; // 将该定时器 ID 置为 0,表示未被占用 Timer_List[i].period = 0; Timer_List[i].callback = NULL; Timer_List[i].tick = 0; break; } } } ``` 最后,实现一个定时器服务函数,在 SysTick 中断中调用该函数,用于判断定时器是否到期,如果到期则执行定时器回调函数: ``` void Timer_Service(void) { uint8_t i; for (i = 0; i < MAX_TIMER_NUM; i++) { if (Timer_List[i].id != 0) { // 如果该定时器已被占用 Timer_List[i].tick++; // 定时器计数器加 1 if (Timer_List[i].tick >= Timer_List[i].period) { // 如果定时器到期 Timer_List[i].tick = 0; // 重置定时器计数器 Timer_List[i].callback(); // 执行定时器回调函数 } } } } ``` 在主函数中调用定时器初始化函数,然后在 SysTick 中断中调用定时器服务函数即可。 以上是一个简单的软件定时器封装代码示例,可以根据实际需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值