标题:
单片机led灯闪烁问题 定时器控制 闪烁不同步
[打印本页]
作者:
89464608
时间:
2017-3-13 15:48
标题:
单片机led灯闪烁问题 定时器控制 闪烁不同步
stc单片机,我用定时器0控制LED闪烁,但是闪烁不同步,比如我先用串口发送命令使第一个灯闪烁,再发送命令使第二个灯闪烁,发现这两个灯闪烁不同步,有什么解决办法呢?求指教!
作者:
Longan.Wang
时间:
2017-3-13 16:19
闪烁频率用同一个寄存器控制,两LED是否闪烁分别用两个标志位控制,OK
作者:
89464608
时间:
2017-3-13 16:38
Longan.Wang 发表于 2017-3-13 16:19
闪烁频率用同一个寄存器控制,两LED是否闪烁分别用两个标志位控制,OK
我在外面设标志位,在定时器里面根本不管用。方便留个QQ么
作者:
yzwzfyz
时间:
2017-3-14 22:44
接收端的单片机,收到命令后,不要急于响应,做一个适当的延时同步,再响应就OK了。
作者:
TIANYUN1573
时间:
2017-3-14 23:23
你把程序写出来啊
作者:
超神NK
时间:
2017-3-15 14:25
你发送第二次时,直接让2个LED重新开始闪烁不就行了。
作者:
Longan.Wang
时间:
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 = 自定义不闪烁状态(亮或灭);
}
....
}
作者:
啤酒瓶子老大
时间:
2022-11-3 21:28
楼上大佬都回答的挺好的。我的理解是,多创建几个标志位,也许就能解决问题。
好好的利用if
如果利用的好,那么就成功了。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1