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

来源:本站
导读:目前正在解读《51单片机+PWM控制渐变七彩灯C51程序》的相关信息,《51单片机+PWM控制渐变七彩灯C51程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《51单片机+PWM控制渐变七彩灯C51程序》的详细说明。
简介:51单片机+PWM控制渐变七彩灯C51程序。

一、硬件介绍:

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

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

二、实物图片:

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

三、软件部分:

1、原理:

先亮红灯(保持一会儿)----红绿过度(绿加1、红减1循环240次)------

绿灯亮起(保持一会儿)----绿兰过度(兰加1、绿减1循环240次)

-----兰灯亮起(保持)-----兰白过度(绿加1、红加1循环240次、兰不变)

---白红过度

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程序》最后刷新时间 2024-03-14 00:52:09,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《51单片机+PWM控制渐变七彩灯C51程序》该内容的真实性请自行鉴别。