一、硬件介绍:

(采用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次、兰不变)
---白红过度,技术支持网站:
http://www.51hei.com/ 全部程序源代码:点此下载*/

2、具体程序如下:
#include<reg52.h>//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<z;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
 }
}

51单片机+PWM控制渐变七彩灯C51程序相关推荐

  1. 51单片机PWM控制电机

    小时候玩的四驱车,给直流马达接通电源就嗤嗤的跑出去了.电机种类众多,就属控制直流电机最简单,只要对调正负极就能改变电机的转向.另外,直流电机负载能力强,适合做越野车的驱动电机.为了做可调速的越野车,就 ...

  2. 基于51单片机PWM(即脉冲宽度调制)调速数码管显示测速L298M芯片控制直流电机正反运转的项目

    基于51单片机PWM(即脉冲宽度调制)调速数码管显示测速L298芯片控制直流电机正反运转的项目 一.前言 1.基于51单片机PWM(即脉冲宽度调制)调速数码管显示测速L298芯片控制直流电机正反运转的 ...

  3. 基于51单片机的PWM控制直流电机设计( proteus仿真+程序+报告+讲解视频)

    基于51单片机的PWM控制直流电机设计( proteus仿真+程序+报告+讲解视频) 仿真图proteus 7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0031 ...

  4. 51单片机+L293D控制直流电机起保停+数码管PWM调速显示

    51单片机+L293D控制直流电机起保停+数码管PWM调速显示 PWM速度10级可调 采用L293D驱动 数码管显示PWM当前占空比 可优化的地方是数码管可以采用其他驱动芯片来驱动,提高驱动能力和减少 ...

  5. 51单片机+L293D控制直流电机起保停和PWM调速

    51单片机+L293D控制直流电机起保停和PWM调速 仿真演示 *程序源码 #include"reg51.h" #define uint unsigned int #define ...

  6. 控制led亮度C语言程序,单片机pwm控制led亮度原理图

    单片机pwm控制led亮度原理图 用51产生PWM去控制LED,首先要确定PWM的周期T和占空比D,确定了这些以后,可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D ...

  7. 51单片机PWM温控风扇定时关闭手动自动DS18B20测温LCD1602显示

    实践制作DIY- GC0018-PWM温控风扇 一.功能说明: 基于51单片机设计-PWM温控风扇 功能介绍: 1. STC89C52单片机 +LCD1602 +多个按键+风扇+风扇驱动电路+DS18 ...

  8. 51单片机 PWM 直流电机调速+Proteus仿真

    51单片机 PWM 电机调速+Proteus仿真 Proteus仿真 实例代码 /*用PWM控制电机脉冲频率应控制在25HZ-35HZ之间*//*定时1ms,1个周期30ms,脉冲频率为33HZ */ ...

  9. 51单片机STC15W4K56S4控制步进电机28BYJ-48正反转

    步进电机28BYJ-48(12V)介绍: 首先,我们看下步进电机28BYJ-48(12V)外观图,如下: 28BYJ-48(12V)含义如下:28表示电机直径28毫米,B表示电机 ,Y表示永磁,J表示 ...

  10. 51单片机PCA9685控制16路舵机(代码可直接使用)

    51单片机PCA9685控制16路舵机 /**************************************************************************PCA96 ...

最新文章

  1. Python IDLE快捷键一览
  2. 硬核浪漫还看焊武大帝
  3. micropython解释器原理_了解一下 MicroPython 的项目整体架构
  4. 计划策略-30-按销售与库存订单以批量生产
  5. NX界面中获取线、面、体、特征的tag值
  6. 【学习笔记】Docker - 01. Docker是啥
  7. maven 版本号插件_Maven内部版本号插件–用法示例
  8. python掷骰子_用于掷骰子的Python程序(2人骰子游戏)
  9. less、Element-UI等安装配置
  10. [HDU] 3491 Thieves
  11. python矩形碰撞检测算法_简易夺旗游戏(python像素级碰撞检测之颜色碰撞)
  12. thinkphp5 router.php,ThinkPHP5 之route(路由)简述
  13. 统一软件开发过程(rup)理解
  14. 免费PR转场 多种创意图形转场过渡PR动态图形模板MOGRT转场
  15. Ubuntu安装腾讯软件
  16. 阜阳市计算机学校助学金申请书,计算机专业学生助学金申请书范文
  17. Windows 写入缓存
  18. Reservoir Computing简介
  19. 使用VMware安装Ubuntu虚拟机 - 完整教程
  20. 手机html5翻页效果代码,jquery html5手机端翻书效果_手指滑动书本翻页效果代码

热门文章

  1. 为了机器学习把MacBook Pro换成Asus TUF Gaming 全家桶
  2. OCR文本扫描 轮廓检测 透视变换-唐宇迪笔记
  3. 思源黑体ttf_金刚黑体最粗版丨金刚黑体Bold+San Francisco
  4. 数域、有限域(伽罗瓦域)
  5. 模板 | 年度财务分析报告财务工作汇报PPT
  6. 无法解析com.oracle:ojdbc14:XXXXX问题解决方案
  7. java在线购物B2C商城源码 单用户商城源码(支持H5+APP+小程序)
  8. JSONP解决前端跨域问题
  9. 三星note3官方固件rom包android4.4.2,三星N9005/Note3最新官方4.4.2系统刷机包官方root版本稳定纯净...
  10. 推荐系统学习(一)--电影推荐系统搭建