EDA365电子论坛网
标题:
关于PWM呼吸灯的几个问题,求解答
[打印本页]
作者:
niubility
时间:
2022-11-29 10:07
标题:
关于PWM呼吸灯的几个问题,求解答
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
***it LED = P2^0;
u16 timer1, count, value;
bit flag;
void TimeInit()//¶¨Ê±1us
{
TMOD |= 0x10;
TH1 = 0xFF;
TL1 = 0xFF;
TR1 = 1;
EA = 1;
ET1 = 1;
}
void main()
{
LED = 1;
timer1 = 0;
count = 0;
value = 0;
flag = 0;
TimeInit();
while(1);
}
void Time() interrupt 2
{
TH1 = 0xFF;
TL1 = 0xFF;
//while(1)
// {
timer1++;
count++;
if(timer1 == 1000)
{
timer1 = 0;
LED = 1;
}
if(count == 100)
{
count = 0;
if(flag == 0)
{
value++;
}
if(flag == 1)
{
value--;
}
}
if(value == 1000)
{
flag = 1;
}
if(value == 0)
{
flag = 0;
}
if(value > timer1)
{
LED = 0;
}
else
{
LED = 1;
}
// }
}
# B, a* a7 w( }
5 [. v- n3 _+ U6 w
复制代码
z1 x2 M- L" N9 b
; I. h4 X8 `% e
这是我编写的PWM呼吸灯程序,但是只有在中断里面加上while(1)循环他才能呼吸。没有这个while直接就不亮了,但我看别人的呼吸灯函数中断内没有while循环也能呼吸,这是为什么?
9 a: V$ Q$ s8 a9 D4 L" e/ M, k
还有一个问题,加上while循环后的呼吸灯在逐渐变暗的时候“灯亮灭的抖动”明显,怎么能让他看起来流畅一点。
# _/ W( q. J1 Q& v& ]( P
作者:
jack_are
时间:
2022-11-29 10:55
在中断里面加while循环,这个程序架构很明显是有问题的,定时器中断只是用来处理紧急的情况,你可以在中断里面操控变量,在主程序中放一个while(1){} 去根据变量的值反转IO
作者:
CRAZY_argentina
时间:
2022-11-29 13:10
中断执行后就退出了,怎么能while1呢,思路都是错误的
作者:
zhi_hui_zhou
时间:
2022-11-29 13:39
利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,OLED屏的亮和暗就是这样控制的
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2