多组LED灯防闪烁扫描
多组LED灯防闪烁扫描
每个LED灯扫描间隔小于10ms就不会闪烁,还有亮度不均匀也会导致LED灯闪烁,比如前一秒亮度60%,后一秒亮度80%,LED也会闪烁。如果有多组LED灯需要扫描,那么可以采用每个任务占用一个固定的时间块的办法编程。
举个栗子:
比如系统中有2组LED灯需要扫描,有4个任务需要执行(这里的任务并不是操作系统中的任务)iic、按键扫描、控制外部电机和外部温度传感器。那么可以采用以下的办法:首先找出占用时间最多的任务所需要的时间来确定每个时间块的长度ModuleTime,当然最长时间不能超过10ms。还有一点需要注意的是Module的个数一定要是双数,就算任务的个数是单个也要补一个空任务来扫描LED。
任务执行的逻辑如下:
第一个ModuleTime;LED1-on,LED2-OFF +iic
第二个ModuleTime;LED1-OFF,LED2on +按键扫描
第三个ModuleTime;LED1on,LED2OFF +外部电机控制
第四个ModuleTime;LED1OFF,LED2on +外部温度传感器
第五个,,
第六个,,,,
如果用示波器来看这两组LED的波形的话,会看到两组周期为ModuleTime毫秒 互补的方波,就是两组LED轮流导通,这里不是采用延时的方法,这样就不会影响系统其它任务的执行,而且还可以无限增加任务而不会对系统有影响,对于后期升级很有用。
如果有三组LED,方法也是一样,但是需要注意的是这时候时间块长度最长只能是5个ms了,同一时间只能开其中一组LED,而另外两组是处于关闭状态,所以每组LED只有1/3的时间是开通的,而2/3的时间是关闭的,关闭的时间不能超过10ms,这样就很容易算出每个时间块的最大长度了。
下面来了看一个比较完整的代码
//这里假设每个时间块为10个ms,
#include<xxxxxx.h>
int module=0;//如果是在主函数中切换任务的话,这个不需要在这里定义
bit flag=0;//这个必须是全局变量
main()
{init();//各种初始化while(1){//.................................................//第0个任务,iicif((module==0)&&(flag==1)){led1on();led2off();iic();flag=0;/*把这个标志位关闭掉,比如时间块为5ms,而这个任务只用1ms就完成了,那没必要让这个任务连续重复5次,如果需要多次连续重复的话那就把标志位去掉得了*/}//.................................................//第一个任务,按键扫描if((module==1)&&(flag==1)){led1off();led2on();keyscan();flag=0;}//.................................................//第二个任务,电机控制if((module==2)&&(flag==1)){led1on();led2off();motor();flag=0;这里写代码片}//.................................................//第三个任务,外部温度传感器if((module==3)&&(flag==1)){led1off();led2onf();temperature();flag=0;}}
}//***************************************************
//在中断中切换时间块,这里是10ms进中断切换一次任务,任务切换的速度决定了时间块的长度
void interrupt()
{module++;//切换任务,当然,如果心情不好也可以把任务这个切换放在主函数里面if(module==3){module=0;}flag=1;//打开标志位,这个标志位只能在这个打开,不能放在主函数里打开
}
多组LED灯防闪烁扫描相关推荐
- 【实战】物联网安防监控项目【4】———从网页上控制A9的LED灯
前言 学习了一个新知识,当然要记录一下啦.这两天学习了boa服务器.cgic标准库和html标签语言,又双叕解锁一个嵌入式的新玩法.cgic库是沟通C语言和html网页编程语言的一座桥梁,通过在lin ...
- 【TB-02模组专题⑤】微信小程序通讯TB02 模块控制 STM32 单片机LED灯
本<安信可ble mesh蓝牙模组TB-02模组专题>系列博客学习由官方博客 CSDN安信可博客 潜心所力所写.如有不对之处,请留言,我们及时更改. 1.BLE MESH开发环境linux ...
- 泰凌微ble mesh蓝牙模组天猫精灵学习之旅 ① 小白也痴迷,如何在 Linux环境搭建编译烧录 安信可TB02,点亮一盏LED灯;
本<泰凌微ble mesh蓝牙模组天猫精灵学习之旅>系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.小 ...
- led灯模组是什么东西_【轻工标准抢先知】LED灯、LED灯具和LED模组的测试方法
如今越来越多的人在新房装修时采用LED灯作为家庭照明灯具,LED灯具也因光色自然柔和均匀.节能环保.使用寿命长等特点在室内外照明中广泛使用.目前,我国已成为LED灯.灯具和模块等LED产品的制造大国. ...
- 安防监控实现之从网页上控制A9的LED灯
文章目录 声明 实验整体框架图: 网页发送数据模拟控制Ubuntu的LED灯 网页发送数据控制A9的LED灯 声明 华清远见教育集团 15年专注高端IT培训 做良心教育,做专业教育,做受人尊敬的职业教 ...
- led灯模组是什么东西_现代灯具什么牌子好 节能LED灯新品推荐
阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到最新文章了.每天都有分享.完全是免费订阅,请放心关注.声明:图文来源于网络,版 ...
- 一席长文让你看懂LED灯需要做哪些检测
一. LED灯具测试参考依据 <GB 7000.1-2015灯具 第1部分:一般要求与试验> <整体式LED路灯的测量方法> <外壳防护等级(IP代码)GB/T 4208 ...
- led灯条串联图_飞利浦32寸LED液晶显示器故障维修记
一台飞利浦321E5Q 32寸液晶LED显示器,出现黑屏故障. 首先怀疑是电源故障,于是开盖检查,先拧掉固定支架的四只螺丝钉,再去掉后盖上十五只螺丝钉,找一个小硬卡片先从上面撬开,从上往下掀起,注意塑 ...
- STM32F 103C8T6开发板 点亮LED灯
每组IO口含下面7个寄存器.7个寄存器可以控制一组GPIO的16个IO口. GPIOx_CRL:端口配置低寄存器 GPIOx_CRH:端口配置高寄存器 GPIOx_IDR:端口输入寄存器 GPIOx_ ...
最新文章
- 用js方法做提交表单的校验
- VS2008 VS2010发布网站时如何产生固定命名的 Dll 文件
- Python十大装腔语法
- MEMS为何独领风骚?看完这篇秒懂!
- 前端学习(1848)vue之电商管理系统电商系统的开发模式和技术选型
- html htc控件详解,*.HTC 文件的简单介绍-网页设计,HTML/CSS
- Android RecyclerView快速上手
- linux 文件-s,Linux下访问文件的基本模式
- 【Python成长之路】从零做网站开发 -- 下拉选择项的实现
- (45)FPGA面试技能提升篇(Hyperlink接口)
- STM32 DMA传输
- sublime text3 eslint 安装教程
- 天龙八部linux 换win,Linux从菜鸟到大师之天龙八部 第三部文本编辑处理.doc
- JAVA验证身份证号码校验码是否正确
- Aurora AD308e 一体机驱动
- 驱动精灵修复服务器,驱动精灵一键修复系统组件工具
- android 安装多个app下载,多点下载2021安卓最新版_手机app官方版免费安装下载_豌豆荚...
- 软件测试职业规划 (面试题)
- 347.前K个高频元素 C++
- DICOM医学图像处理:DICOM存储操作之 “多幅JPG图像数据存入DCM文件”
热门文章
- 数据结构练习题――Hero In Maze 简单版(JSU-ZJJ)
- 为XCODE4.3 添加 Window-Based Application 模板
- 自荐信当计算机课代表,北京邮电大学自主招生考生自荐信范文
- excel运行提示运行错误9,下标越界,怎么处理
- 2020海南酒店展将携手中国国际饭店业大会于11月27日举办
- 剑灵服务器在维修吗,回坑老玩家请教剑灵服务器问题
- 荣宁之声 | 宝钗说马云的996工作制:老板熬鸡汤,就是耍流氓
- 离职腾讯,总得说点什么吧
- PromiseA+规范之手写Promise
- java水浒无双武松_《水浒无双》景阳冈武松打虎的分享心得