单片机PWM控制RGB-led程序

单片机PWM控制RGB-led程序,第1张

RGB-LED变化出64中不同的颜色,......

----

每种颜色的LED,要有四种亮度。

三种颜色搭配,就有 64 种颜色了。

每种颜色的LED,要有四种亮度:不亮、1/3亮、2/3亮、全亮。

其实,并不难控制。

都用不上 PWM 控制器。

用一个定时器,每隔一毫秒中断一次,对三路输出,控制一下即可。

 使用按键(PUSHBUTTON)控制LED灯号的开关,当按键被按下时打开LED灯号,按键放开时关闭LED灯号。

材料

Arduino的主板×1

LED×1

按钮或开关开关×1

10K电阻×1

面包板×1

单心线X N

接线

把LED接到PIN13,长脚(阳极)接到PIN13,短脚(阴极)接到GND;

按钮一支脚接到+5 V;

PIN2接到按钮的另一支脚,同一支脚位接一个10K的电阻连到GND;

源码如下:

const int buttonPin = 2// the number of the pushbutton pin

const int ledPin = 13 // the number of the LED pin

// variables will change:

int buttonState = 0// variable for reading the pushbutton status

void setup() {

// initialize the LED pin as an output:

pinMode(ledPin, OUTPUT)

// initialize the pushbutton pin as an input:

pinMode(buttonPin, INPUT)

}

void loop(){

// read the state of the pushbutton value:

buttonState = digitalRead(buttonPin)

// check if the pushbutton is pressed.

// if it is, the buttonState is HIGH:

if (buttonState == HIGH) {

// turn LED on:

digitalWrite(ledPin, HIGH)

}

else {

// turn LED off:

digitalWrite(ledPin, LOW)

}

说明:

L01〜L02:定义按键与LED的脚位,按键接在PIN2码,而LED接在PIN13;

L16:读取按键的状态并保存到buttonState变数里;

L20〜L26:这支程式的目的是按下按键时要打开LED灯号,放开按键时要关闭的LED灯号,因此,假如buttonState为高,代表按键状态是按下(压制)的,此时要打开LED,反之,假如buttonState为低,代表按键状态是放开的,此时要关闭LED。

注:这支是Arduino的内建的程序,点选

File >Examples >2.Digital >Button

就可以找到。

#include<reg52.h>  

//端口定义

sbit RED    =    P2^0//红光控制端,0点亮 

sbit GREEN  =    P2^1//绿光控制端,0点亮 

sbit BLUE   =    P2^2//蓝光控制端,0点亮

//函数声明

void Delay(unsigned int t)  

void RGB(unsigned char R ,unsigned char G ,unsigned char B) 

//主函数

void main (void)

{   

    RED = 1  GREEN = 1  BLUE = 1 

    //开始时先关闭LED,当然由于单片机上电就输出 1 ,所以可不写               

    while (1)         //主循环

    {

        //7色光依次逐渐变亮

        //改变调用顺序可以改变颜色先后次序

        RGB(1,1,0)

        RGB(1,0,1)

        RGB(1,0,0)

        RGB(0,1,1)

        RGB(0,1,0)

        RGB(0,0,1)

        RGB(0,0,0)

    }

}

 

void Delay(unsigned int t)

{

 while(--t)

}

//7色光依次逐渐变亮

RGB(unsigned char R ,unsigned char G ,unsigned char B)

{

    unsigned int pwm , set = 500         

    for(pwm=1pwm<setpwm++)

    { 

             RED    = 1        //熄灭LED 

             GREEN  = 1

             BLUE   = 1 

             Delay(set-pwm)//延时长度,500次循环中从599减至1

             RED    = R        

             GREEN  = G

             BLUE   = B        

             Delay(pwm)//延时长度,500次循环中从1加至599

    }

}

//改变set可以改变变化快慢

//同理你可以写出7色逐渐变暗的程序

这里的程序只是提供一个思路,你如果直接复制粘贴的话会出现格式错误

把每两行中间的空行删掉一般就可消除格式错误

如果再有什么小问题根据编译信息提示稍作修改就行

串电阻的话一般这样算:

R = [ U - U(LED) ] / I

U是LED和电阻总的电压,U(LED)是LED工作电压,I 是LED工作电流,一般10--20mA

电流大小取的适中就行了,再计算要串联的电阻值


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7895439.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-11
下一篇2023-04-11

发表评论

登录后才能评论

评论列表(0条)

    保存