找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机led灯闪烁问题 定时器控制 闪烁不同步

[复制链接]
跳转到指定楼层
楼主
ID:164449 发表于 2017-3-13 15:48 来自触屏版 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stc单片机,我用定时器0控制LED闪烁,但是闪烁不同步,比如我先用串口发送命令使第一个灯闪烁,再发送命令使第二个灯闪烁,发现这两个灯闪烁不同步,有什么解决办法呢?求指教!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:77589 发表于 2017-3-13 16:19 | 只看该作者
闪烁频率用同一个寄存器控制,两LED是否闪烁分别用两个标志位控制,OK
回复

使用道具 举报

板凳
ID:164449 发表于 2017-3-13 16:38 来自触屏版 | 只看该作者
Longan.Wang 发表于 2017-3-13 16:19
闪烁频率用同一个寄存器控制,两LED是否闪烁分别用两个标志位控制,OK

我在外面设标志位,在定时器里面根本不管用。方便留个QQ么
回复

使用道具 举报

地板
ID:123289 发表于 2017-3-14 22:44 | 只看该作者
接收端的单片机,收到命令后,不要急于响应,做一个适当的延时同步,再响应就OK了。
回复

使用道具 举报

5#
ID:134192 发表于 2017-3-14 23:23 | 只看该作者
你把程序写出来啊
回复

使用道具 举报

6#
ID:170892 发表于 2017-3-15 14:25 | 只看该作者
你发送第二次时,直接让2个LED重新开始闪烁不就行了。

评分

参与人数 1黑币 +30 收起 理由
admin + 30 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:77589 发表于 2022-11-3 17:19 | 只看该作者
// 随便写了一下,意思一下。根据实际情况自己修改一下。
// 假设Timer 1ms中断一次,LED闪烁频率为1Hz
#define LED1        P1_1
#define LED2        P1_2

unsigned int cnt = 0;            // 控制闪烁频率
unsigned char status = 0;      // 所有LED使用的状态,
unsigned char led1_flag = 0; // LED1闪烁控制,1允许闪烁,0禁止闪烁,受你串口命令控制
unsigned char led2_flag = 0; // LED2闪烁控制,1允许闪烁,0禁止闪烁,受你串口命令控制

// 定时器中断,没用过这款MCU,随便取个名字,自己选有用的看
void Timer_IRS(void)
{
        ......
        cnt++;
        if (cnt >= 500){
                cnt = 0;
                status ^= 1;
        }
        ......
}

int main(){
        ....
        if (led1_flag){
                LED1 = status;
        }
        else{
               LED1 = 自定义不闪烁状态(亮或灭);
        }
        if (led2_flag){
                LED2 = status;
        }
        else{
               LED2 = 自定义不闪烁状态(亮或灭);
        }
        ....
}
回复

使用道具 举报

8#
ID:230742 发表于 2022-11-3 21:28 | 只看该作者
楼上大佬都回答的挺好的。我的理解是,多创建几个标志位,也许就能解决问题。
好好的利用if
如果利用的好,那么就成功了。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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