標(biāo)題:
單片機(jī)RGB彩燈漸變七彩燈無頻閃 源程序
[打印本頁]
作者:
yinqing452
時間:
2019-11-18 12:39
標(biāo)題:
單片機(jī)RGB彩燈漸變七彩燈無頻閃 源程序
/*彩燈自動循環(huán):1、漸變*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define dengji 1//LED變化等級調(diào)整
sfr P5=0xC8;//xxxx,1111 端口5
uint shudu=30;//LED漸變速度調(diào)整
sbit B1=P3^3;
sbit R1=P5^4;
sbit G1=P5^5;
uchar cishu;
uchar num;//定時器計數(shù)變量
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++;//將定時計數(shù)變自動增加1
if(num>=shudu)//如果速度變量等于定時計數(shù)器變量就執(zhí)行下面大括號語句
{
num=0;//將計數(shù)器清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時,讓綠燈變量停一段時間
這樣就形成了當(dāng)紅燈過度到綠燈時,綠燈會停一會兒的效果。*/
{
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)//當(dāng)亮度等級控制變量ji大于1210時,就將它清0
ji=0;//將亮度控制等級清0
}
}
作者:
屋頂?shù)膽胸?nbsp;
時間:
2020-1-24 14:42
怎么delay1后面沒用到?
作者:
lulgs
時間:
2020-1-26 12:17
實物有嗎?測試過嗎
作者:
dzltlgq
時間:
2021-5-21 16:11
sbit R1=P3^4;
sbit G1=P3^5;修改
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1