找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10375|回复: 47
打印 上一主题 下一主题
收起左侧

怎样使得单片机的LED灯闪烁又不影响主程序运行?

  [复制链接]
回帖奖励 25 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
51单片机问题,紧急求助!
怎样使得单片机的LED灯闪烁又不影响主程序运行???
我想通过单片机接收串口命令让一个LED灯闪烁,但同时又不影响其他程序的运行,应该怎样去写这个程序呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩1
回复

使用道具 举报

沙发
ID:385298 发表于 2018-8-11 16:46 | 只看该作者
用中断来实现啊,在串口程序中触发LED闪烁的标志位,定时器中断监控这个位,并根据定时时长来改变LED状态。
回复

使用道具 举报

板凳
ID:384109 发表于 2018-8-11 16:55 | 只看该作者
使用定时器来控制LED的闪烁,主程序只需要设置一个标志,来代表启动或关闭闪烁,在定时器里判断这个标志,并执行相应的操作
回复

使用道具 举报

地板
ID:213173 发表于 2018-8-11 17:28 | 只看该作者
//可以放在主函数循环中,不影响其它程序
void Twinkle()
{
        static unsigned int count=0;//定义静态局部变量
        if(sign==1)//如果闪烁标志为真,由串口命令使能
        {
                count++;//计数延时
                if(count>=30000)//可以按实际需要调整闪烁频率
                {
                        count=0;
                        LED=~LED;        //LED取反
                }
        }
        else
        {
                count=0;                //计数变量清0
                LED=0;                        //LED熄灭
        }
}

评分

参与人数 2黑币 +23 收起 理由
jipinxlm + 8 赞一个!
yousunny + 15 很给力!

查看全部评分

回复

使用道具 举报

5#
ID:385308 发表于 2018-8-11 17:32 | 只看该作者
把LED灯闪烁的程序写进一个串口接收的函数,再把这个函数引入到主函数里。
回复

使用道具 举报

6#
ID:298053 发表于 2018-8-11 18:27 | 只看该作者
通过判断串口接收数据来打开或关闭一个定时器中断,在这个中断服务函数里面再写led闪烁的代码(不影响主函数),控制定时时间长短就可以控制闪烁频率,led闪烁频率(就是进入中断频率),这种频率很低也不会影响主函数运行
回复

使用道具 举报

7#
ID:222821 发表于 2018-8-12 17:30 | 只看该作者
wulin 发表于 2018-8-11 17:28
//可以放在主函数循环中,不影响其它程序
void Twinkle()
{

谢谢您了,很有效果。
回复

使用道具 举报

8#
ID:385559 发表于 2018-8-12 19:19 | 只看该作者
定时器中断
回复

使用道具 举报

9#
ID:385559 发表于 2018-8-12 19:19 | 只看该作者
定时器中断,或者主函数设标志查询
回复

使用道具 举报

10#
ID:364278 发表于 2018-8-12 19:43 | 只看该作者
通过计数的方法,就是达到这个数就跳出循环,时间很短,不会影响主函数运行
回复

使用道具 举报

11#
ID:385569 发表于 2018-8-12 20:09 | 只看该作者
可以用定时器中断,具体用法根据实际程序编写需要灵活运用
回复

使用道具 举报

12#
ID:355699 发表于 2018-8-12 22:29 | 只看该作者
中断不就是实现这个功能的吗
回复

使用道具 举报

13#
ID:385613 发表于 2018-8-12 23:34 | 只看该作者
让LED闪烁怎么会影响其他程序?
回复

使用道具 举报

14#
ID:385629 发表于 2018-8-13 08:21 | 只看该作者
单独的中断处理比较好
回复

使用道具 举报

15#
ID:385582 发表于 2018-8-13 08:59 | 只看该作者
单独写一个函数控制LED灯,然后在主函数的开头调用就行了啊
回复

使用道具 举报

16#
ID:385659 发表于 2018-8-13 09:45 | 只看该作者
使用中断实现,看门狗程序监控中断位置,或者是做一个函数,使得和其他程序一起运行
回复

使用道具 举报

17#
ID:385659 发表于 2018-8-13 09:53 | 只看该作者
使用定时器中断,或者主函数设标志查询
回复

使用道具 举报

18#
ID:104472 发表于 2018-8-13 09:59 | 只看该作者
中断计数延时置标,主函数判断动作
回复

使用道具 举报

19#
ID:379051 发表于 2018-8-13 10:30 | 只看该作者
定时器中断是最合适的。
回复

使用道具 举报

20#
ID:371798 发表于 2018-8-13 10:31 | 只看该作者
STM32的话就可以使用DMA,因为DMA不是由CPU执行的,不会影响到主程序。
回复

使用道具 举报

21#
ID:385699 发表于 2018-8-13 10:50 | 只看该作者
使用timer中断,设置好中断时间间隔,也就是你需要led灯闪烁的间隔,每进入一次让LED状态改变一次,完成闪烁功能
回复

使用道具 举报

22#
ID:385727 发表于 2018-8-13 11:45 | 只看该作者
可以使用定时器终端,设置好时间间隔,在终端中实现led灯状态翻转
回复

使用道具 举报

23#
ID:385723 发表于 2018-8-13 11:46 | 只看该作者
采用定时器中断
回复

使用道具 举报

24#
ID:174087 发表于 2018-8-13 11:50 | 只看该作者
xiaoyuzhou123 发表于 2018-8-12 23:34
让LED闪烁怎么会影响其他程序?

LED闪烁必然会涉及到延时,如果是用最基本的循环延时或者nop延时肯定是要影响CPU的处理的
回复

使用道具 举报

25#
ID:385798 发表于 2018-8-13 14:53 | 只看该作者
wulin 发表于 2018-8-11 17:28
//可以放在主函数循环中,不影响其它程序
void Twinkle()
{

太厉害了
回复

使用道具 举报

26#
ID:385808 发表于 2018-8-13 15:06 | 只看该作者
使用定时器产生中断去控制LED闪烁
回复

使用道具 举报

27#
ID:381280 发表于 2018-8-13 15:49 | 只看该作者
定时器中断,延时设置好参数
回复

使用道具 举报

28#
ID:385861 发表于 2018-8-13 16:27 | 只看该作者
使用定时器,设定100Hz执行一次,避免一直等待
回复

使用道具 举报

29#
ID:385864 发表于 2018-8-13 16:30 | 只看该作者
定时中断啊
回复

使用道具 举报

30#
ID:385881 发表于 2018-8-13 16:49 | 只看该作者
定时器中断里 改变LED状态
回复

使用道具 举报

31#
ID:385885 发表于 2018-8-13 16:59 | 只看该作者
最简单的方法就是用中断,建议看看单片机手册
回复

使用道具 举报

32#
ID:385695 发表于 2018-8-13 17:03 | 只看该作者
用定时器中断
回复

使用道具 举报

33#
ID:342142 发表于 2018-8-13 17:17 | 只看该作者
定时器中断就ok
回复

使用道具 举报

34#
ID:385895 发表于 2018-8-13 17:18 | 只看该作者
我是来要币的 想下个资料
回复

使用道具 举报

35#
ID:385897 发表于 2018-8-13 17:25 | 只看该作者
可以使用DMA
回复

使用道具 举报

36#
ID:111634 发表于 2018-8-13 18:30 | 只看该作者
本帖最后由 zl2168 于 2018-8-14 18:13 编辑

介绍你几个参考案例,都有闪烁功能,又不影响主程序运行,自己去对照研究。
先Proteus仿真,确认有效。
实例91  具有校正功能的时钟1302LCD1602显示)
实例91 带校正时钟1302(LCD1602显示).rar (52.68 KB, 下载次数: 10)


实例93  具有校正功能的时钟1302LED数码管显示)
实例94  模拟电子钟(由80C51定时器产生秒时基) 实例94 模拟电子钟(由80C51定时器产生秒时基).rar (43.05 KB, 下载次数: 4)

以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1,书中电路和程序设计有详细说明,程序语句条条有注解。

实例93 带校正时分秒的时钟1302(6位LED数码管显示).rar

732.75 KB, 下载次数: 5

回复

使用道具 举报

37#
ID:362591 发表于 2018-8-18 09:46 | 只看该作者
用中断来写
回复

使用道具 举报

38#
ID:387479 发表于 2018-8-18 10:15 | 只看该作者
用定时器中断实现
回复

使用道具 举报

39#
ID:385372 发表于 2018-8-18 17:11 | 只看该作者
用中断来实现啊,在串口程序中触发LED闪烁的标志位,定时器中断监控这个位,并根据定时时长来改变LED状态
回复

使用道具 举报

40#
ID:387767 发表于 2018-8-19 10:58 | 只看该作者
用中断来实现
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表