原创 用PWM控制渐变七彩灯C51程序

2012-5-28 08:36 3333 11 13 分类: MCU/ 嵌入式

一、硬件介绍:

 (采用5050LED 2W) RGB三色LED控制引脚分别为单片机P1.2 、 P1.1  、 P1.0。LED正极接主电源(24V)正极,负极接驱动3颗三极管的集电极,单片机控制脚分别接3颗NPN三极管,三极管发射极接地,而单片机的供电是来自三端稳压器7805,祥细原理如下:


 

二、实物图片:



 

三、软件部分:

1、/*原理:
 
先亮红灯(保持一会儿)----红绿过度(绿加1、红减1循环240次)------
绿灯亮起(保持一会儿)----绿兰过度(兰加1、绿减1循环240次)
-----兰灯亮起(保持)-----兰白过度(绿加1、红加1循环240次、兰不变)

2、具体程序如下:
#include//MCU头文件
#define uchar unsigned char//字浮型宏定义
#define uint unsigned int//整型宏定义
#define shudu 30//LED渐变速度调整
#define dengji 1//LED变化等级调整
sbit B1=P1^0;//红色灯控制IO口
sbit G1=P1^1;//绿色灯控制IO口
sbit R1=P1^2;//兰色灯控制IO口
uchar Rout,Bout,Gout;//红绿兰3个变量
/***************************************************/
/**********************延时子程序*******************/
/***************************************************/
void delay(uint z)
{
 uint x,y;//局部变量定义
 for(x=0;x<5;x++)//延时外循环
 for(y=0;y }
/**********************************************/
/**********PWM控制红绿兰3种灯亮灭时间**********/
/**********************************************/
void RGBpwm(uchar Rou,uchar Gou,uchar Bou)//3个局部变量,些部分为带参数函数
{
 if(Rou!=0)//如果红灯变量不等于0就亮红灯
 {
  R1=1;//红灯亮
  delay(Rou);//红灯亮起时间
  R1=0;//红灯灭
 }
 if(Gou!=0)//如果红灯变量不等于0就亮红灯
 {
  G1=1;//绿灯亮
  delay(Gou);//绿灯亮起的时间 
  G1=0;//绿灯灭
 }
 if(Bou!=0)//如果红灯变量不等于0就亮红灯
 {
  B1=1;//兰灯亮
  delay(Bou);//兰灯亮起的时间
  B1=0;//兰灯灭
 }
}
 
/***********************************************/
/********************主程序*********************/
/***********************************************/
void main()
{
 TMOD=0x01;//选择定时器在方式1下工作
 EA=1;//打开总中断
 ET0=1;//打开定时器中断
 TR0=1;//打开定时器
 R1=0;//开机将红灯关闭
 G1=0;//开机将绿灯关闭
 B1=0;//开机将兰灯关闭
 TH0=(65536-256)/256;//给定时器高8位赋值
 TL0=(65536-256)%256;//给定时器低8位赋值
 while(1)//程序主循环
 {
  RGBpwm(Rout,Gout,Bout);//调用RGBpwm子程序
 }
}
/*************************************************/
/*中断服务子程序(控制LED红绿兰亮灭时间占空比例)*/
/*************************************************/
void zhong() interrupt 1//中断向量位为1
{
 uint num;//定时器计数变量
 uint ji;//亮度等级控制变量
 TH0=(65536-256)/256;//给定时器高8位赋值
 TL0=(65536-256)%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+=dengji;//将绿灯变量加1
   Bout=0;//兰灯不变
  }
  if((ji>340)&&(ji<440))/*亮度等级控制变量ji大于340小于440时,让绿灯变量停一段时间
  这样就形成了当红灯过度到绿灯时,绿灯会停一会儿的效果。*/
  {
   Rout=0;//红灯灭
   Gout=240;//绿灯亮
   Bout=0;//兰灯灭
  }
  if((ji>440)&&(ji<680))//同理:亮度等级控制变量ji大于440小于680时,由绿灯到兰灯过度
  {
   Rout=0;//红灯变量不变
   Gout-=dengji;//将绿灯变量减1
   Bout+=dengji;//将兰灯变量加1
  }
  if((ji>680)&&(ji<780))//亮度等级控制变量ji大于680小于780时,让兰灯变量停一段时间
  {
   Rout=0;//红灯灭
   Gout=0;//绿灯灭
   Bout=240;//兰灯亮一会儿
  }
  if((ji>780)&&(ji<1020))//亮度等级控制变量ji大于780小于1020时,由兰灯到白灯过度
  {
   Rout+=dengji;//将红灯变量加1
   Gout+=dengji;//绿灯变量加1
   Bout=240;//兰灯不变
  }
  if((ji>1020)&&(ji<1025))//亮度等级控制变量ji大于1020小于1025时,由兰灯到白灯过度
  {
   Rout=240;//将红灯变量加1
   Gout=240;//绿灯变量加1
   Bout=240;//兰灯不变
  }
  if((ji>1025)&&(ji<1265))//亮度等级控制变量ji大于1025小于1265时,由白光到红光过度
  {
   Rout=240;//红灯变量不变
   Gout-=dengji;//绿灯变量自动减1
   Bout-=dengji;//兰灯变量自动减1
  }
  if(ji>1265)//当亮度等级控制变量ji大于1210时,就将它清0
  ji=0;//将亮度控制等级清0
 }
};y++);>

文章评论2条评论)

登录后参与讨论

用户377235 2015-1-3 09:19

我对液景七彩逐渐变色灯和该灯的软件程序很感性趋有望得到帮助谢谢了!

用户377235 2013-12-4 11:23

最后那个白光屏闪怎么去掉呢?
相关推荐阅读
用户1553569 2014-01-25 14:26
51单片机教程之基础编(基于C语言)
本文转载自: http://www.51hei.com/mcu/2675.html  大家好,我是陈滨,本人是去年9月份开始学单片机,到现在一年多了,现在本人基本掌握了单片机编程,开始深入学习...
用户1553569 2012-06-05 11:17
冷无法克制的嗔痴之毒
天越来越冷了,睡的觉也越来越多了,慢慢地进入了冬眠时代。睡神对他所取得的一切丝毫未感到满足,总是在我身上不断地榨取,一点一点的剥夺我的存在时间。 很公开的宣布我的失败,情绪管理上的失败,尽管我...
用户1553569 2012-05-29 01:29
产品分享!LED流星雨灯(51单片机程序代码+视频)
 最近公司生产了一款流星雨灯!现把它分享给大家!   一、图片分享:    二、PCB文件分享:      三、原理图分享: br /&g...
用户1553569 2012-05-29 01:27
单片机程序调试黑皮书
1、程序的确定性比硬件大,不要害怕程序问题。 2、写程序,最重要的不是学会某种语言,而是会分析问题并提出解决问题的方法。 3、含有中断的程序较为复杂,需要编写者清楚同一时刻,...
用户1553569 2012-05-03 16:50
51单片机实现流星雨led灯的效果-很牛逼
发现一个很牛的单片机实现的流星雨效果的灯 一、图片分享:    二、PCB文件分享:      三、原理图分享:       ...
我要评论
2
11
关闭 站长推荐上一条 /2 下一条