找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10319|回复: 47
收起左侧

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

  [复制链接]
回帖奖励 25 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
ID:222821 发表于 2018-8-11 16:12 | 显示全部楼层 |阅读模式
51单片机问题,紧急求助!
怎样使得单片机的LED灯闪烁又不影响主程序运行???
我想通过单片机接收串口命令让一个LED灯闪烁,但同时又不影响其他程序的运行,应该怎样去写这个程序呢?
回复

使用道具 举报

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 很给力!

查看全部评分

回复

使用道具 举报

ID:385308 发表于 2018-8-11 17:32 | 显示全部楼层
把LED灯闪烁的程序写进一个串口接收的函数,再把这个函数引入到主函数里。
回复

使用道具 举报

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

使用道具 举报

ID:222821 发表于 2018-8-12 17:30 | 显示全部楼层
wulin 发表于 2018-8-11 17:28
//可以放在主函数循环中,不影响其它程序
void Twinkle()
{

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

使用道具 举报

ID:385559 发表于 2018-8-12 19:19 | 显示全部楼层
定时器中断
回复

使用道具 举报

ID:385559 发表于 2018-8-12 19:19 | 显示全部楼层
定时器中断,或者主函数设标志查询
回复

使用道具 举报

ID:364278 发表于 2018-8-12 19:43 | 显示全部楼层
通过计数的方法,就是达到这个数就跳出循环,时间很短,不会影响主函数运行
回复

使用道具 举报

ID:385569 发表于 2018-8-12 20:09 | 显示全部楼层
可以用定时器中断,具体用法根据实际程序编写需要灵活运用
回复

使用道具 举报

ID:355699 发表于 2018-8-12 22:29 | 显示全部楼层
中断不就是实现这个功能的吗
回复

使用道具 举报

ID:385613 发表于 2018-8-12 23:34 | 显示全部楼层
让LED闪烁怎么会影响其他程序?
回复

使用道具 举报

ID:385629 发表于 2018-8-13 08:21 | 显示全部楼层
单独的中断处理比较好
回复

使用道具 举报

ID:385582 发表于 2018-8-13 08:59 | 显示全部楼层
单独写一个函数控制LED灯,然后在主函数的开头调用就行了啊
回复

使用道具 举报

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

使用道具 举报

ID:385659 发表于 2018-8-13 09:53 | 显示全部楼层
使用定时器中断,或者主函数设标志查询
回复

使用道具 举报

ID:104472 发表于 2018-8-13 09:59 | 显示全部楼层
中断计数延时置标,主函数判断动作
回复

使用道具 举报

ID:379051 发表于 2018-8-13 10:30 | 显示全部楼层
定时器中断是最合适的。
回复

使用道具 举报

ID:371798 发表于 2018-8-13 10:31 | 显示全部楼层
STM32的话就可以使用DMA,因为DMA不是由CPU执行的,不会影响到主程序。
回复

使用道具 举报

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

使用道具 举报

ID:385727 发表于 2018-8-13 11:45 | 显示全部楼层
可以使用定时器终端,设置好时间间隔,在终端中实现led灯状态翻转
回复

使用道具 举报

ID:385723 发表于 2018-8-13 11:46 | 显示全部楼层
采用定时器中断
回复

使用道具 举报

ID:174087 发表于 2018-8-13 11:50 | 显示全部楼层
xiaoyuzhou123 发表于 2018-8-12 23:34
让LED闪烁怎么会影响其他程序?

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

使用道具 举报

ID:385798 发表于 2018-8-13 14:53 | 显示全部楼层
wulin 发表于 2018-8-11 17:28
//可以放在主函数循环中,不影响其它程序
void Twinkle()
{

太厉害了
回复

使用道具 举报

ID:385808 发表于 2018-8-13 15:06 | 显示全部楼层
使用定时器产生中断去控制LED闪烁
回复

使用道具 举报

ID:381280 发表于 2018-8-13 15:49 | 显示全部楼层
定时器中断,延时设置好参数
回复

使用道具 举报

ID:385861 发表于 2018-8-13 16:27 | 显示全部楼层
使用定时器,设定100Hz执行一次,避免一直等待
回复

使用道具 举报

ID:385864 发表于 2018-8-13 16:30 | 显示全部楼层
定时中断啊
回复

使用道具 举报

ID:385881 发表于 2018-8-13 16:49 | 显示全部楼层
定时器中断里 改变LED状态
回复

使用道具 举报

ID:385885 发表于 2018-8-13 16:59 | 显示全部楼层
最简单的方法就是用中断,建议看看单片机手册
回复

使用道具 举报

ID:385695 发表于 2018-8-13 17:03 | 显示全部楼层
用定时器中断
回复

使用道具 举报

ID:342142 发表于 2018-8-13 17:17 | 显示全部楼层
定时器中断就ok
回复

使用道具 举报

ID:385895 发表于 2018-8-13 17:18 | 显示全部楼层
我是来要币的 想下个资料
回复

使用道具 举报

ID:385897 发表于 2018-8-13 17:25 | 显示全部楼层
可以使用DMA
回复

使用道具 举报

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 带校正时分秒的时钟1302(6位LED数码管显示).rar

732.75 KB, 下载次数: 5

回复

使用道具 举报

ID:362591 发表于 2018-8-18 09:46 | 显示全部楼层
用中断来写
回复

使用道具 举报

ID:387479 发表于 2018-8-18 10:15 | 显示全部楼层
用定时器中断实现
回复

使用道具 举报

ID:385372 发表于 2018-8-18 17:11 | 显示全部楼层
用中断来实现啊,在串口程序中触发LED闪烁的标志位,定时器中断监控这个位,并根据定时时长来改变LED状态
回复

使用道具 举报

ID:387767 发表于 2018-8-19 10:58 | 显示全部楼层
用中断来实现
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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