PWM控制led流星灯(水滴效果)

2019-07-18 17:39发布

各位大神,我最近想做一个基于单片机PWM功能的流星灯(水滴效果),可是看了一些资料,按着书上的程序做了一边还是不行。那灯亮度压根儿就没变,,,求正解啊。。。。
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
sbit PWM=P0^1;
void delay(uchar i)
{
        uchar j;
        for(;i>0;i--)
        {
                for(j=29;j>0;j--)
                _nop_();
                _nop_();
        }
}
void PWMout(uchar q)
{
        PWM=1;
        delay(q);
        PWM=0;
        delay(10-q);
}
void main()
{
        while(1)
        {

                PWMout(0);
                PWMout(1);
                PWMout(2);
                PWMout(3);
                PWMout(4);
                PWMout(5);
                PWMout(6);
                PWMout(7);
                PWMout(8);
                PWMout(9);
                PWMout(10);

        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
单片机z123
2019-07-19 16:19
这是我刚才改的,用数码管显示
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
unsigned int count=800,i;
void delay(unsigned int t)
{
        while(--t);
}
void shui()
{
        P0 = 0xc0;        //点亮LED  
        delay(i);//延时长度,600次循环中从1加至599
        P0 = 0xff;       //熄灭LED
        delay(count-i);//延时长度,600次循环中从599减至1
}
void shuidi()
{
        P0 = 0xff;
        delay(60000);
        for(i=1;i<count;i++)  //i表示低         //电平时间,这个循环中低电平时长从1累加到count(周期)的值,即600次
        shui();
        P0 = 0x00;
        for(i=count-1;i>0;i--)         //与逐渐变亮相反的过程
        shui();
}
void main ()
{   
        while (1)         //主循环
        {
                P2 = 0x00;
                shuidi();
        }            
}

一周热门 更多>