×
单片机 > 单片机程序设计 > 详情

单片机RGB彩灯渐变七彩灯无频闪 源程序

发布时间:2020-12-25 发布时间:
|


/*彩灯自动循环:1、渐变*/


#include

#define uchar unsigned char

#define uint unsigned int

#define dengji 1//LED变化等级调整

sfr P5=0xC8;//xxxx,1111 端口5

uint shudu=30;//LED渐变速度调整

sbit B1=P3^3;

sbit R1=P5^4;

sbit G1=P5^5;

uchar cishu;

uchar num;//定时器计数变量

uint ji;//亮度等级控制变量

uint Rout,Gout,Bout;

void delay(uint z)

{

uint x,y;

for(y=z;y>0;y--)

for(x=2;x>0;x--);

}

void delay1(uint z)

{

uint x,y;

for(y=shudu;y>0;y--)

for(x=z;x>0;x--);

}

void pwm(uint r,uint g,uint b)

{

if(r!=0)

{

R1=1;

delay(r);

R1=0;

}

if(g!=0)

{

G1=1;

delay(g);

G1=0;

}

if(b!=0)

{

B1=1;

delay(b);

B1=0;

}

}

void main()

{

TMOD=0X01;

EA=1;

ET0=1;

TR0=1;

TH0=(65536-256)/256;//给定时器高8位赋值

TL0=(65536-256)%256;//给定时器低8位赋值

while(1)

{


pwm(Rout,Gout,Bout);



}

}

void zhong () interrupt 1

{


TH0=(65536-156)/256;//给定时器高8位赋值

TL0=(65536-156)%256;//给定时器低8位赋值

num++;//将定时计数变自动增加1

if(num>=shudu)//如果速度变量等于定时计数器变量就执行下面大括号语句

{

num=0;//将计数器清0

ji++;//将亮度等级控制变量加1

if((ji>0)&&(ji<100))//如果亮度等级控制变量ji小于100,红灯亮起时间变量为240

{

Rout=240;//红灯亮起变量为240

Gout=0;//绿灯亮起变量为0

Bout=0;//兰灯亮起变量为0

}

if((ji>100)&&(ji<340))/*如果亮度等级控制变量ji大于100小于340(刚好240个等级),

红灯亮起时间变量由原来的240,慢慢减小到0,同时绿灯由原来的0慢慢增到240,形成

红灯到绿灯的渐变过程*/

{

Rout-=dengji;//将红灯变量减1。因为dengji为亮度变化等级(本程序变化等级为1),

Gout=0;//兰灯不变

Bout+=dengji;//将绿灯变量加1

}

if((ji>340)&&(ji<440))/*亮度等级控制变量ji大于340小于440时,让绿灯变量停一段时间

这样就形成了当红灯过度到绿灯时,绿灯会停一会儿的效果。*/

{

Rout=0;//红灯灭

Gout=0;//兰灯灭

Bout=240;//绿灯亮

}

if((ji>440)&&(ji<680))//同理:亮度等级控制变量ji大于440小于680时,由绿灯到兰灯过度

{

Rout+=dengji;//红灯变量不变

Gout+=dengji;//将绿灯变量减1

Bout=240;//将兰灯变量加1

}

if((ji>680)&&(ji<685))//亮度等级控制变量ji大于680小于780时,让兰灯变量停一段时间

{

Rout=240;//红灯灭

Gout=240;//绿灯灭

Bout=240;//兰灯亮一会儿

}

if((ji>685)&&(ji<925))//亮度等级控制变量ji大于780小于1020时,由兰灯到白灯过度

{

Rout-=dengji;//将红灯变量加1

Gout=240;//绿灯变量加1

Bout-=dengji;//兰灯不变

}

if((ji>925)&&(ji<1025))//亮度等级控制变量ji大于1020小于1025时,由兰灯到白灯过度

{

Rout=0;//将红灯变量加1

Gout=240;//绿灯变量加1

Bout=0;//兰灯不变

}

if((ji>1025)&&(ji<1265))//亮度等级控制变量ji大于1025小于1265时,由白光到红光过度

{

Rout+=dengji;//红灯变量不变

Gout-=dengji;//绿灯变量自动减1

Bout=0;//兰灯变量自动减1

}

if(ji>=1265)//当亮度等级控制变量ji大于1210时,就将它清0

ji=0;//将亮度控制等级清0

}

}


关键字:单片机  RGB彩灯  渐变七彩灯  无频闪 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
基于STM32单片机秒中断源和闹钟中断源的解决方案