51单片机实现七彩呼吸灯程序
单片机呼吸灯原理
单片机呼吸灯原理一、引言单片机是一种微型计算机,它的应用非常广泛。
其中,呼吸灯是单片机应用中比较常见的一个技术。
本文将详细介绍单片机呼吸灯的原理。
二、什么是呼吸灯呼吸灯是一种LED灯光效果,它模拟人类的呼吸方式,让LED灯逐渐变亮或变暗。
这种效果在很多场合都有应用,比如装饰、舞台表演等。
三、实现呼吸灯的方法实现呼吸灯有多种方法,其中最常见的方法是使用PWM(脉冲宽度调制)技术。
PWM技术可以控制输出电压或电流的占空比,从而控制LED灯的亮度。
四、单片机呼吸灯原理1. 硬件连接单片机需要连接一个LED灯和一个电阻器。
电阻器用来限流,防止LED烧坏。
2. 软件实现(1)设置定时器:单片机需要设置一个定时器来产生PWM信号。
(2)设置占空比:通过改变定时器计数值和重载值来改变PWM信号的占空比。
(3)控制LED亮度:通过改变PWM信号的占空比来控制LED灯的亮度。
五、单片机呼吸灯程序下面是一个基于51单片机的呼吸灯程序:#include <reg52.h>sbit LED = P1^0;void main(){unsigned char i, j;while(1){for(i=0; i<255; i++){for(j=0; j<255; j++){if(i==j){LED = 1;}else if(i>j){LED = 0;}else{LED = 1;delay(255-i);LED = 0;delay(i);}}}}}六、总结单片机呼吸灯原理是使用PWM技术来控制LED灯的亮度,从而实现呼吸灯效果。
实现呼吸灯需要硬件连接和软件编程两个方面。
在编程中,需要设置定时器和占空比来产生PWM信号,并通过改变占空比来控制LED亮度。
单片机实现呼吸灯效果的简单方法
概述通本文基于e2s t u d i o开发环境,使用C P K-R A2L1评估板,配置定时器P W M输出,实现呼吸灯效果。
通过该项目可以学会如何使用开发环境新建项目、如何配置一个新的外设、如何调取外设驱动、如何基于F S P进行应用开发。
硬件准备首先需要准备一块评估板,这里我们使用瑞萨提供的R7F A2L1A B2D F M的评估板,芯片封装为P L Q P0064K B-C和内核C o r t e x-M23,最高运行主频为48M H z,具体如图所示。
该评估板支持U S B供电调试,非常适合客户项目前期的验证与开发。
开发板通过P501端口驱动一颗蓝色的L E D,原理如下图所示。
创建工程1、选择菜单的F i l e-N e w C/C++P r o j e c t,按照下图选择,然后点击下一步。
2、填写工程名称和工程的保存位置,请注意不要包含中文路径,点击N e x t。
3、F S P版本选择→器件选择→调试方式选择。
具体如下表,然后点击N e x t,下一个界面可以直接点击N e x t.4、选择工程模板,具体如下图,确认无误点击F i n i s h。
5、工程新建完成后,出现下图界面,此时可以确认一下自己配置的信息是否正确。
工程配置工程配置是项目的关键,涉及项目具体应用到的外设的配置,其中涉及B S P、C l o c k s、P i n s、I n t e r r u p t s、S t a c k s等的配置。
1、点击上一个界面的S t a c k s,增加本项目的T I M E R。
具体如下:2、点击新建的s t a c k,具体如下,弹出属性窗口。
注:若属性窗口无法弹出,可以从菜单W i n d o w-S h o w V i e w里面查找。
3、双击P r o p e r t i e s可全屏,双击可退出全屏。
属性的具体配置如下。
4、把管脚分配到P501,配置完成后,点击右上角的三角按钮(G e n e r a t e P r o j e c t C o n t e n t)。
51单片机(呼吸灯)汇编语言版
单片机实训课程之:呼吸灯一.设计要求二.相关原理三.论证分析四.硬件原理五.软件程序设计六.测试方法与结果七.使用说明(附录)一.设计要求呼吸灯顾名思义就是让LED灯的闪烁像呼吸一样,时呼时吸,时亮时暗。
二.相关原理呼吸灯的原理:呼吸灯,是用LED模拟呼吸的过程,即渐亮再渐暗再渐亮再渐暗……如此往复,再利用LED的余辉和人眼的暂留效应,看上去就和人的呼吸一样了。
三.论证分析程序流程图(1)80C511.单片机定义“单片机”就是将计算机的基本部件集成到一块芯片上,包括CPU、ROM、RAM、并行口、串行口、定时器/计数器、中断系统、系统时钟等。
MCS-51的微处理器是由运算器和控制器构成所的。
运算器:主要用来对操作数进行算术、逻辑运算和位操作。
主要包括算术逻辑运算单元ALU、累加器A、寄存器B、位处理器、程序状态字寄存器PSW以及BCD码修正电路等。
控制器:单片机的指挥控制部件,控制器的主要任务是识别指令,并根据指令的性质控制单片机各功能部件,从而保证单片机各部分能自动而协调地工作。
(2)时钟电路外部时钟方式是使用外部振荡脉冲信号,常用于多片MCS-51单片机同时工作,以便于同步。
外部时钟电路,是由一个12MHz晶振和两个瓷片电容组成,为单片机提供标准时钟,其中两个瓷片电容起微调作用,外接晶振频率精确度直接影响电子钟计时的准确性。
(外部时钟方式是把外部已经有的时钟信号引入到单片机内部。
时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。
在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间。
)2.单片机电子钟利用内部定时/计数器溢出产生中断(12M晶振一般为50ms)再乘以相应的倍率来实现秒、分、时的转换。
从定时/计数器产生中断请求到响应中断需要3-8个机器周期,定时中断子程序中的数据入栈和重装定时/计数器的初值还需要占用数个机器周期,还有从中断入口转到中断子程序也要占用一定的机器周期。
呼吸灯代码
写一段程序,使单片机上LED红·蓝·绿三种颜色的灯呼吸#include"STC89C5xRC.h"void delay100Us(unsigned int cnt){unsigned int i;while(cnt--){i=6;while(i--);}}void delayMs(unsigned int cnt){unsigned int i;while(cnt--){i=82;while(i--);}}void delay(unsigned int t){while(t--);}void main(void){unsigned int CYCLE=600,PWM_LOW=0;P2=0;while(1){delay(40000);for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++){P20=1;P21=1;P22=0;delay(PWM_LOW);P20=1;P21=1;P22=1;delay(CYCLE-PWM_LOW);}for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) {P20=1;P21=1;P22=0;delay(PWM_LOW);P20=1;P21=1;P22=1;delay(CYCLE-PWM_LOW);}delay(40000);for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) {P20=1;P21=0;P22=1;delay(PWM_LOW);P20=1;P21=1;P22=1;delay(CYCLE-PWM_LOW);}for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) {P20=1;P21=0;P22=1;delay(PWM_LOW);P20=1;P21=1;P22=1;delay(CYCLE-PWM_LOW);}delay(40000);for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) {P20=0;P21=1;P22=1;delay(PWM_LOW);P20=1;P21=1;P22=1;delay(CYCLE-PWM_LOW);}for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--){P20=0;P21=1;P22=1;delay(PWM_LOW);P20=1;P21=1;P22=1;delay(CYCLE-PWM_LOW);}}}代码中,P20,P21,P22,分别表示红蓝绿三种颜色,P20=1,表示红灯灭,P20=0,表示红灯亮原理:主要是利用占空比,初始化一个值CYCLE,令PWM_LOW由1开始,每一个循环,先令其中一个灯亮,保持时间为delay(PWM_LOW),然后熄灭,时间为delay(CYCLE-PWM_LOW),随着循环次数增多,delay(PWM_LOW)越来越长,而delay(CYCLE-PWM_LOW)不变。
51单片机PWM呼吸灯源程序
51单片机PWM-呼吸灯源程序/*************************************************** **************** @file : main.c* @xu ran* @date : 2014年5月23日20:55:19 - 2014年5月23日22:32:12* @version : V2.0* @brief : PWM脉冲宽度调制技术实现呼吸灯************************************************* **************** @attention* 实验平台 : 51hei开发板* 单片机 : STC89C52RC MCU 晶振 : 11.0592 MHZ************************************************* ****************/#include //使用STC89C52库/* 三八译码器74HC138 */sbit ADDR3 = P1^3;sbit ENLED = P1^4;sbit PWMOUT = P0^0; //LED0/* PWM占空比 */unsigned char code pwmTable[] = {3, 5, 8, 11, 13, 16, 21, 24, 27, 30, 33, 36, 40, 45, 49,53, 55, 57, 61, 65, 67, 69, 72, 75, 79, 82, 86, 89, 91,93, 96, 99}; // dc%/* PWM的高电平和低电平的定时器的重载值 */ unsigned char Highthr0, Hightlr0;unsigned char Lowthr0, Lowtlr0;/* 定时器T1计数装载值 */unsigned char thr1, tlr1;/* PWM 频率计数值 */unsigned long tmp = 0;/******************local functiondefines**************************/void ConfigPWM(unsigned int fr, unsigned char dc); void ConfigTimer1(unsigned int xms);/******************************************************************//*** @brief : 主函数* @param : 无* @retval : 无*/void main(void){P0 = 0xFF; //初始化P0数据口ADDR3 = 1;ENLED = 0; //选择LEDP1 = (P1 & 0xF8) | 0x06; //LEDS6PWMOUT = 1; //初始化为熄灭ConfigPWM(100, 2); //PWM频率为100HZ, 占空比为2% ConfigTimer1(50); //50ms调整一次占空比EA = 1; //开启总中断!while (1); //wait interrupt happen!}/*** @brief : 配置PWM 调制PWM脉冲宽度* @param : PWM的脉冲宽度 PWM的占空比* @retval : 无*/void ConfigPWM(unsigned int fr, unsigned char dc) {unsigned int high = 0, low = 0;tmp = (11059200/12/fr); //fr频率的计数值high = (tmp * dc) / 100; //高电平计数值low = tmp - high; //低电平计数值high = 65536 - high; //高电平的计数定时器装载初值low = 65536 - low; //低电平的计数定时器装载初值Highthr0 = (unsigned char)(high >;>; 8);Hightlr0 = (unsigned char)high; //高电平Lowthr0 = (unsigned char)(low >;>; 8);Lowtlr0 = (unsigned char)low; //低电平/* 配置Timer0 方式1 */TMOD &= 0xF0; //清零T0控制位TMOD |= 0x01; //方式1TH0 = Highthr0;TL0 = Hightlr0; //先装高电平TR0 = 1;ET0 = 1; //开启定时器T0中断}/*** @brief : 配置Timer1,用来调整PWM占空比* @param : 待定时的时间* @retval : 无*/void ConfigTimer1(unsigned int xms){unsigned long tmp;tmp = 11059200/12;tmp = (tmp * xms) / 1000; //定时xms时间需要的计数值tmp = 65536 - tmp; //需要装载的计数初值thr1 = (unsigned char)(tmp >;>; 8);tlr1 = (unsigned char)tmp;TMOD &= 0x0F; //清零T1控制位TMOD |= 0x10; //T1方式1TH1 = thr1;TL1 = tlr1; //装载初值TR1 = 1;ET1 = 1;}/*** @brief : 调整PWM的占空比 (高电平的脉冲宽度)* @param : 占空比 dc* @retval : 无*/void tiaoZhengPWM(unsigned char dc){unsigned int high = 0, low = 0;high = (tmp * dc) / 100; //高电平计数值low = tmp - high; //低电平计数值high = 65536 - high;low = 65536 - low; //计数装载初值Highthr0 = (unsigned char)(high >;>; 8);Hightlr0 = (unsigned char)high; //取高电平计数装载初值Lowthr0 = (unsigned char)(low >;>; 8);Lowtlr0 = (unsigned char)low; //取低电平计数装载初值}/*** @brief : 定时器T0中断服务改变PWM的状态* @param : 无* @retval : 无*/void Timer0_ISP() interrupt 1{if (PWMOUT) //由高电平切换到低电平{TH0 = Lowthr0;TL0 = Lowtlr0; //装载低电平计数初值PWMOUT = 0; //点亮LED}else{TH0 = Highthr0;TL0 = Hightlr0; //装载高电平计数值PWMOUT = 1; //熄灭LED}}/*** @brief : 定时器T1中断服务调整PWM的占空比* @param : 无* @retval : 无*/void Timer1_ISP() interrupt 3{static unsigned char index = 0;static bit bir = 0; //方向标志 (0 小->;大 1 大->;小)TH1 = thr1;TL1 = tlr1;tiaoZhengPWM(pwmTable[index]); //调整PWM占空比if (bir == 0){index++;//递增if (index >;= 31) //到31立刻改变PWM的控制方向,即占空比由大到小变化(LED 暗->;亮){bir = 1; //改变方向}}else{index--;if (index == 0) //到0时立刻改变PWM的方向,即占空比由小到大变化(LED 亮->;暗){bir = 0; //改变方向}}}/**********************************END OF FILE*************new line****************/。
(完整word版)51单片机实现七彩呼吸灯程序
/*--------第七颜色LED灯呼吸----------*/
LED1=1;
LED2=1;
LED3=1;
Delay(500);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
{
LED1=0;
LED2=0;
LED3=0;
Delay(PWM_LOW);
LED1=1;
LED2=1;
LED2=1;
Delay(500);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
{
LED2=0;
Delay(PWM_LOW);
LED2=1;
Delay(CYCLE-PWM_LOW);
}
LED2=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
{
LED1=0;
LED2=0;
Delay(PWM_LOW);
LED1=1;
LED2=1;
Delay(CYCLE-PWM_LOW);
}
/*--------第五颜色LED灯呼吸----------*/
LED1=1;
LED3=1;
Delay(500);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
{
LED2=0;
Delay(PWM_LOW);
LED2=1;
Delay(CYCLE-PWM_LOW);
}
/*--------第三颜色LED灯呼吸----------*/
LED3=1;
Delay(500);
C51单片机实现呼吸灯和花样流水灯程序
C51单⽚机实现呼吸灯和花样流⽔灯程序1.⽤C51单⽚机实现花样流⽔灯,代码如下:#include <reg52.h>#define LED_A P1 //led灯所⽤的接⼝,是哪个⼝就写P⼏void delayms(){unsigned char x = 0; unsigned char i;unsigned char y = 0;while(y < 0.001) //定义led灯的切换的延时时间,越⼩越快。
{ //(y < 0.001);(x<100);(i<100)都可以修改x = 0;while(x<100){i = 0;while(i<100){i++;}x++;}y++;}}#define LED_NUM 8 //定义led灯的数量,可快速实现不同⽤途的修改;void main(){unsigned char k;unsigned char j;unsigned char LED_ALL[] = {0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F}; //led灯亮灭的⼗六进制数组;unsigned char LED_ALL_2[] = {0XFC,0XF3,0XCF,0X3F}; while(1) { for(k=0;k<3;k++) //第⼀个for实现奇偶灯交叉闪烁三次,想闪烁⼏次就修改(K<3)中的数值; { LED_A = 0xAA; delayms(); LED_A = 0x55; delayms(); } for(k=3;k>0;k--) //实现⼀个流⽔灯左右三次(从左到右再从右到左算⼀次); { for(j=0;j<LED_NUM;j++) { LED_A = LED_ALL[j]; delayms(); } for(j=6;j>0;j--) { LED_A = LED_ALL[j]; delayms(); } } for(k=0;k<3;k++) //实现前四个灯亮后四个灯灭,交叉闪烁3次,修改次数同上; { LED_A = 0xf0; delayms(); LED_A = 0xf; delayms(); } for(k=3;k>0;k--) //实现两个灯依次流⽔3次; { for(j=0;j<4;j++) { LED_A = LED_ALL_2[j]; delayms(); } for(j=2;j>0;j--) { LED_A = LED_ALL_2[j]; delayms(); } } }}2.实现第⼀个灯呼吸,由暗变亮,再由亮变暗,程序如下;#include <reg52.h>sbit LED1 = P3^0;void delay(unsigned int a) //定义⼀个延时函数{ while(--a);}void main(){ unsigned int t,circle=800; //定义变量,circle=800为led灯呼吸的间隔长短,数值越⼩,间隔越短。
51单片机控制LED七彩渐变灯
51单片机控制LED七彩渐变灯自己设计的51单片机控制LED七彩渐变灯MCU:89C51,89S51,89C2051等晶振:12MHz电路驱动(LED连接):P1.0连接蓝色LEDP1.1连接红色LEDP1.2连接绿色LED (必须使用纯绿色高亮LED,不可使用普通草绿管)全为低电平驱动(低电平点亮),可以加三极管驱动,红、蓝、绿LED 也可以交换位置控制方式:PWM频率:约300-700Hz(我没有计算或测量过,只是试验显示效果足够好)调节级数:共600级,相当平滑编译后的HEX文件:687241197859316.rarHEX代码::0D009300E4FEEEC39F50060000000E80F555:0100A000223D:06005F00A9078D828C83CD:10006500E4FDE96008C292FF120093D292E5824551:10007500836009C291AF82120093D291EB4A600965:0D008500C290AF03120093D2900DBD0AD5BA:010********B:100003007508C8E4F509F50AE5086008E50A70040F:1000130015080509E5096008E50870041509050ACE:10002300E50A6008E5097004150A0508E5082509CD:10003300FFE433FE7C00EF250AFFEC3EFEEF64C8CD:100043004E60087508C8E4F509F50AE509FD7C006A :0C005300E50AFB7A00AF0812005F80ACE9:030000000200A15A:0C00A100787FE4F6D8FD75810A020003A8:00000001FFC语言源程序:/*******************************程序名称:七彩LED渐变程序编写者:ZH YUMCU:51/2051晶振:12MHz*********************************/ #include#includesbit gl=P1^2; //绿色sbit rl=P1^1; //红sbit bl=P1^0; //兰timer(unsigned char t){unsigned char b;for(b=0;b{_nop_();_nop_();_nop_();}}LEDout(unsigned char g,r,b){unsigned char a;for(a=0;a<10;a++){if(g!=0){gl=0;timer(g);gl=1;}if(r!=0){rl=0;timer(r);rl=1;}if(b!=0){bl=0;timer(b);bl=1;}}}main(){ unsigned char g,r,b;g=200;r=0;b=0;while(1){if(g!=0&&b==0){g--;r++;}if(r!=0&&g==0){r--;b++;}if(b!=0&&r==0){b--;g++;}if(g+r+b!=200){g=200;r=0;b=0;}LEDout(g,r,b);}}入无法下载HEX,大家可以用KEIL自己编译,或者使用记事本保存HEX代码(重命名为.HEX 文件)都可以再把.hex文件写入单片机,接好电路即可工作自己做的LED渐变灯(使用三极管8550驱动)及部分效果图:。
用51单片机制作呼吸灯
用51单片机制作呼吸灯//晶振11.0592//灯光在单片机控制之下完成由亮到暗的逐渐变化,感觉像是在呼吸//本例在51hei-5型开发板上实现了一个数码管和一个led灯一起实现呼吸效果//文件下载:51hei/f/fxd.rar#includereg52.h#define uint unsigned int#define uchar unsigned char sbit D1=P0 ; uchar sr;uchar jf; uchar code table[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,2 8,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49}; void light(uchar num);void delay(uint z); void main(){//设置计数器//选取计数方式1TMOD = 0x11;//给计数器写初值TH0 = 0;TL0 = 0;//////////////////////操作单片机//开启CPU中断EA = 1;/////////////////////开启定时器T0位中断ET0 = 1;//开启计数器TR0 = 1;//操作二极管P1=0;while(1){ if(sr50) light(sr); else sr=0;}}//子函数void light(uchar num) {uchar tme;D1 = 0;tme = table[num];delay(tme);D1 = 1;delay(49-tme);}//中断函数void time () interrupt 1{//自变量自加if (jf2) { jf++; TH0 =0; TL0 = 0; }if (jf==2) {//写初值jf=0; TH0 = 254; TL0 = 254; sr++; } }void delay(uint z){uint x,y;for(x=10;x0;x--) for(y=z;y0;y--);} tips:感谢大家的阅读,本文由我司收集整编。
呼吸灯单片机程序
呼吸灯单片机报告本次实验中的程序实现的功能是通过51系列的单片机,实现数码管由暗变亮,由亮变暗的闪烁过程。
#include <reg51.h>#define wave_port P1#define uint unsigned int#define uchar unsigned charsbit led_port=P2^0 ;uint counter;uint h;void main(){uint main_i;counter=0;TMOD=0x01; //1MS 65536-1000TH0=0XFC;TL0=0X18;EA=1;ET0=1;TR0=1;h=0;while(1){if(h<=20){h++;}If(h==20){for(h=20;h>=0;h--)}}}void timer0_int(void) interrupt 1 //中断服务程序{TH0=0XFC;TL0=0X18;counter++;if(counter<=h){wave_port=0xff;}else{wave_port=0x00;}if(counter==10){counter=0;}}}总结经过本次单片机的实验,使我们小组的每个成员对单片机编程的方式方法有了更深一步的认识。
我们通过更具体的学习,和老师的帮助下,我们对单片机的设计有了更深的体会。
(注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。
可复制、编制,期待你的好评与关注)。
单片机PWM技术实现呼吸灯和KTV等娱乐场所的灯光闪烁效果
单片机PWM技术实现呼吸灯和KTV等娱乐场所的灯光闪烁效果程序是在51hei单片机开发板上面做的,电路很简单,最小系统+P0的八个led即可.ADDR0和ENLED那是开发板上的led使能电路控制端,如果是你自己做的电路可以删掉这几个语句.或者不用管他,不会影响程序的运行./*************************************************** ************************************************* *********** @file:main.c* @author :xr* @date:2014年4月15日20:34:05 - 2014年4月15日22:28:08* @version: V1.2.3* @brief :PWM技术实现呼吸灯和KTV等娱乐场所的灯光闪烁效果单片机STC89C52RC MCU 晶振 11.0592MHZ************************************************* ************************************************* ***********/#include ;//74HC138sbit ADDR0 = P1^0;sbit ADDR1 = P1^1;sbit ADDR2 = P1^2;sbit ADDR3 = P1^3;sbit ENLED = P1^4;//sbit PWMOUT = P0^0;//PWM输出#define PWMOUT P0//8个LED小灯同时呼吸//灯光控制编码(调整PWM的占空比)unsigned char code PWM_Table[] = {1, 3, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50,53, 56, 59, 62, 65, 68, 71, 74, 77, 80, 83, 86, 89, 92, 95, 98, 99}; //34个占空比unsigned char heighHR0, heighLR0;//PWM高电平计数初值的高字节和低字节unsigned char lowHR0, lowLR0;//PWM低电平计数初值的高字节和低字节unsigned char thr1, tlr1;//T1计数初值高字节和低字节unsigned long PWMCounter = 0;//PWM设定频率后的对应的所需计数值 UL型void Initial();void ConfigPWM(unsigned int fr, unsigned char dc); void ConfigTimer1(unsigned int xms);void main(void){Initial();/**********呼吸灯效果***************/ ConfigPWM(100, 5);//设定PWM的脉冲宽度为100hz,即10ms,占空比为5%,当PWM的脉冲宽度小于100HZ时,形成的是闪烁的灯光效果ConfigTimer1(50); //定时50ms调整PWM占空比/*PWM技术实现KTV等娱乐场所的灯光闪烁效果*/ /***************灯光闪烁****************//*ConfigPWM(10, 5); //PWM脉冲宽度为10HZ,即1ms, 占空比5%ConfigTimer1(50); //定时20ms调整PWM占空比*/while (1);}/*初始化*/void Initial(){ADDR3 = 1;ENLED = 0;//选择LEDADDR2 = 1;ADDR1 = 1;ADDR0 = 0;//选择LEDS6,即流水灯}/*使用定时器T0配置PWM*/void ConfigPWM(unsigned int fr, unsigned char dc) //参数:fr PWM配置的频率,当是100时,即是100HZ,周期是10ms,dc为占空比{unsigned long tmp;unsigned int heigh, low;//分别存放高电平计数值和低电平计数值tmp = 11059200/12;//一个机器周期的计数频率PWMCounter = tmp / fr;//一个机器周期计数频率是多少个fr计数频率,即fr频率需要的计数值heigh = (PWMCounter * dc) / 100;//高电平所需计数值1/fr周期内高电平计数值low= PWMCounter - heigh;//低电平所需计数值 1/fr 周期内低电平计数值heigh = 65536-heigh;//高电平时定时器需要装入的初值low= 65536-low;//低电平时定时器需要装入的初值heighHR0 = (unsigned char)(heigh >;>; 8); heighLR0 = (unsigned char)heigh;lowHR0= (unsigned char)(low >;>; 8);lowLR0= (unsigned char)low;TMOD &= 0xF0;//清零T0控制位TMOD |= 0x01;//Timer0方式1,16位可设定定时模式TH0 = heighHR0;TL0 = heighLR0;//装入高电平时的初值PWMOUT = 0xFF;//开始PWM输出高电平TR0 = 1;//启动定时器T0ET0 = 1;//开启T0中断EA = 1;//开总中断}/*配置定时器Timer1,用于定时xms调整PWM的占空比*/void ConfigTimer1(unsigned int xms){unsigned long tmp;tmp = 11059200/12;//一个机器周期的计数频率tmp = (tmp * xms) /1000;//定时xms需要的计数频率(即计数次数)tmp = 65536-tmp;//定时xms需要装入的计数初值thr1 = (unsigned char)(tmp >;>; 8);//取高八位tlr1 = (unsigned char)tmp;TMOD &= 0x0F;//清零T1控制位TMOD |= 0x10;//定时器T1方式1,16位可设定时器TH1 = thr1;TL1 = tlr1;TR1 = 1;//启动timer1ET1 = 1;//开启定时器T1中断EA = 1;//开启总中断}/*调整PWM占空比*/void AdjustPWMdc(unsigned char dc){unsigned int heigh, low;heigh = (PWMCounter * dc) / 100; //PWM脉冲中高脉冲所需计数值low= PWMCounter - heigh;//PWM脉冲中低脉冲所需的计数值heigh = 65536-heigh;//高脉冲装入计数的初值low= 65536-low; //低脉冲装入计数的初值/*调整PWM高低脉冲计数初值,来调整PWM的占空比*/heighHR0 = (unsigned char)(heigh >;>; 8); heighLR0 = (unsigned char)heigh;lowHR0= (unsigned char)(low >;>; 8);lowLR0= (unsigned char)low;}/*定时器Timer0中断服务*/void Timer0_ISP() interrupt 1{//在中断中对PWM的输出电平进行判断,若当前输出是高电平,则开始装入低电平的计数初值,PWM输出低电平if (PWMOUT){//Timer0装入PWM一个周期中低脉冲的计数初值TH0 = lowHR0;TL0 = lowLR0;PWMOUT = 0x00;//PWM输出低电平}else //否则装入高电平的计数初值,输出高电平{//Timer0装入PWM一个周期中高脉冲的计数初值TH0 = heighHR0;TL0 = heighLR0;PWMOUT = 0xFF;//PWM输出高脉冲}}/*定时器Timer1中断服务*/void Timer1_ISP() interrupt 3{//注意:index和dir在每次进入中断后都要使用上一次的值,因此必须定义为静态类型static unsigned char index = 0;//占空比索引static bit dir = 0;//方向位,0灯光由亮->;暗 1灯光由暗->;亮TH1 = thr1;TL1 = tlr1;AdjustPWMdc(PWM_Table[index]);//调用调整PWM占空比函数,调整PWM占空比 if (dir == 0){index++;//索引++if (index >;= 33)//34个占空比{index = 33;dir = 1;//改变方向}}else{index--; //索引--if (index == 0){index = 0;dir = 0;//改变方向}}}。
51单片机PWM的控制(呼吸灯)
51单片机PWM的控制(呼吸灯)一、PWMPulse Width Modulation脉冲宽度调制,简称PWM。
PWM(脉冲宽度调制)对模拟信号电平进行数字编码的方法,计算机只能输出0或5V的数字电压值而不能输出模拟电压,而我们如果想获得一个模拟电压值,则需通过使用高分辨率计数器,改变方波的占空比来对一个模拟信号的电平进行编码。
仍输出数字信号,因为满幅值的直流供电只有5V(1)和0V(0)两种。
电压是以一种连接(1)或断开(0)的重复脉冲序列被夹到模拟负载上去的,连接即是直流供电输出,断开即是直流供电断开。
通过对连接和断开时间的控制,只要带宽足够,可以输出任意不大于最大电压值的模拟电压。
输出电压=(接通时间/脉冲时间)*最大电压值•1•2二、51单片机的Timer作者用的单片机是STC89C52,其内部有3个16位Timer,分别为T/C0,T/C1,T/C2,通过配置相关寄存器即可实现Timer的功能控制。
控制PWM需要用到定时器来生成不同占空比的波形,采用定时器中断的方式。
相关寄存器:1.IE寄存器位名称功能0 EX0 外部中断0的中断允许位1 ET0 Timer0的溢出中断允许位2 EX1 外部中断1的中断允许位3 ET1 Timer1的溢出中断允许位位 名称功能 4 ES 串行口中断允许位5 ET2 Timer6 - -7 EA 中断允许总控制位2. TCON 寄存器位 名称 功能0 IT0 外部中断0的触发方式选择位。
功能和IE1类似1 IE0 外部中断0的中断请求标志位。
功能和IE1类似2 IT1 外部中断1的触发方式选择位。
当IT1=1时,为下降沿触发方式,也就是从高到低的跳变会触发外部中断1。
当IT1=0时,为低电平触发,也就是单片机检测到该引脚电平为低时,会触发外部中断13 IE1 外部中断1的中断请求标志位。
当IE1=1的时候,表示外部中断1被触发,正在请求单片机处理中断事件。
51单片机彩灯控制器的设计
51单片机彩灯控制器的设计51单片机作为一种非常常见的微控制器,被广泛应用于各种控制系统中。
彩灯控制器是一种常见的应用,通过控制51单片机的IO口来控制彩灯的颜色和亮度,实现彩灯的闪烁、呼吸、渐变等效果。
本文将介绍51单片机彩灯控制器的设计过程。
首先,我们需要明确彩灯控制器的功能需求。
常见的彩灯控制器一般需要具备以下功能:1.控制彩灯的颜色和亮度;2.实现多种灯效,如闪烁、呼吸、渐变等;3.可以通过外部设备(如按钮、遥控器等)进行控制;4.响应外部输入(如声音、光线等)来控制彩灯;5.具备存储功能,保存用户设定的彩灯模式。
根据上述功能需求,我们可以着手进行彩灯控制器的设计。
下面将从硬件设计和软件设计两个方面进行详细介绍。
1.硬件设计:硬件设计包括电路设计和PCB设计两个方面。
电路设计主要是根据51单片机的引脚功能,选择合适的元器件连接到相应的引脚上,以实现各功能模块的电路连接。
常见的彩灯控制器电路包含以下模块:电源供应模块、单片机控制模块、彩灯输出模块、外设接口模块等。
PCB设计则是将电路布板到PCB板上,保证电路的稳定性和可靠性。
2.软件设计:软件设计是51单片机彩灯控制器的核心。
通过编写程序代码,控制单片机的IO口来实现控制彩灯的颜色和亮度,以及各种灯效。
软件设计需要掌握51单片机的编程方法,了解该单片机IO口的使用方法和特点。
在软件设计中,需要通过编程实现以下功能:-通过外部设备输入控制信号,如按钮、遥控器等,来控制彩灯的开关、亮度等;-通过外部输入信号,如声音、光线等,来触发彩灯的相应效果;-实现各种彩灯效果,如闪烁、呼吸、渐变等,通过控制IO口输出信号实现。
除了基本的功能设计,彩灯控制器还可以扩展一些附加功能。
例如,可以通过添加存储模块,实现保存用户设置的彩灯模式,下次开机时可以快速恢复设置。
还可以通过添加无线通信模块,实现远程控制彩灯,或者通过添加传感器模块,实现根据环境变化自动调节彩灯等。
51单片机的七彩LED灯渐变调光调色程序
51单片机的七彩LED灯渐变调光调色程序//------------------------------------------------------------------------------------// Main.c//------------------------------------------------------------------------------------// Copyright (C) 2013 Shenyang JYXD.// WEN BO RUI// Tool chain: KEIL Full 'c'////#pragma CD OE DB SB// Compilation directives#include;#include;#define uchar unsigned char#define uint unsigned intuint Period;//Period刷新周期uint PWM;uint Pulse;//脉冲个数uchar Speed;//速度变量uchar count;uint excount;bit Gra;//渐变/跳变总控制位bit Gra7;//七彩渐亮渐灭控制位bit Gra3;//红绿蓝渐亮渐灭控制位bit BP;//亮到暗,暗到亮转换位bit LEDdelay ;//LED定时到标志位sbit key1 = P3^1;//花样组合键1sbit key2 = P3^0;//花样组合键2sbit key3 = P3^5;//速度组合键1sbit key4 = P3^4;//速度组合键2ucharled1[12]={0x10,0x030,0x20,0x60,0x40,0x50,0x70,0x5 0,0x40,0x60,0x20,0x30};//红、黄、绿、青、蓝、粉、白、粉、蓝、青、绿、黄ucharled2[24]={0x10,0x00,0x30,0x00,0x20,0x00,0x60,0x00 ,0x40,0x00,0x50,0x00,0x70,0x00,0x50,0x00,0x40,0x00,0x60,0x00,0x20,0x00 ,0x30,0x00};uchar led3[3]={0x10,0x20,0x40};//红、绿、蓝uchar ledcount,ledcount1;//*********************************************** ************//以下定义函数// 1毫秒延时函数delayms();花样及速度扫描函数keyscan();//*********************************************** ************/*void delayms(unsigned int ms){unsigned char i ;while(ms--){for(i = 0 ; i ;跳变无灭灯过程void Pattern2();//花样2函数--------->;跳变有灭灯过程void Pattern34();void keyscan(){if((key4==1)&&(key3==1)) {Speed= 20;Period = 25;}//预设4种速度200MSif((key4==0)&&(key3==1)) {Speed= 50;Period = 50;}//500MSif((key4==1)&&(key3==0)) {Speed= 100;Period = 100;}//1Sif((key4==0)&&(key3==0)) {Speed= 150;Period = 200;}//1.5Sif((key2==1)&&(key1==1)) {ledcount1 =0;Pattern1();}//预设4种花样if((key2==0)&&(key1==1)) {ledcount1 =0;Pattern2();}if((key2==1)&&(key1==0)) {ledcount = 0;Gra3 = 1;Pattern34();}if((key2==0)&&(key1==0)) {ledcount = 0;Gra7 = 1;Pattern34();}}void value(){if(Speed == 20) PWM = Pulse*8;if(Speed == 50) PWM = Pulse*4;//脉冲个数if(Speed == 100)PWM = Pulse*2;if(Speed == 150)PWM = Pulse;}void Reset(void){unsigned char coderst[ ]={0xe4,0xc0,0xe0,0xc0,0xe0,0x32};(*((void (*)(void))(rst)))();}void main(){_nop_ ();_nop_ ();_nop_ ();P1 = 0;TMOD = 0x11;//11.0592M晶振的10ms定时初值(100分之一秒)TH0 = 0x0db;TL0 = 0x0ff;TH1 = 0x0ff;//0.05ms(20000分之一秒)TL1 = 0x0D1;EA = 1;//开启总中断允许ET0 = 1;//允许T0定时器中断ET1 = 1;//允许T1定时器中断TR0 = 1;//开启T0定时器EX0=1;//开外部中断0IT0=1;//下降沿触发while(1){keyscan();}}//*********************************************** **************************//Pattern1() 花样函数1-------------跳变无灭灯过程//*********************************************** **************************void Pattern1(){//keyscan();Gra = 0;//跳变位=0if(LEDdelay){LEDdelay = 0;P1 = led1[ledcount];ledcount++;if(ledcount>;11){ledcount = 0;}}}//*********************************************** ************************//Pattern2() 花样函数2-------------跳变有灭灯过程//*********************************************** ************************void Pattern2(){//keyscan();Gra = 0;if(LEDdelay){LEDdelay = 0;P1 = led2[ledcount];ledcount++;if(ledcount>;23){ledcount = 0;}}}//*********************************************** ************************//Pattern3() 花样函数3-------------3彩渐变//*********************************************** ************************/*void Pattern3(){keyscan();if(Speed == 20) Period = 25;if(Speed == 50) Period = 50;if(Speed == 100)Period = 100;if(Speed == 150)Period = 200;Gra = 1;Gra3 = 1;}*///*********************************************** ************************//Pattern4() 花样函数4-------------7彩渐变//*********************************************** ************************void Pattern34(){Gra = 1;//渐变位 = 1}/************************************************ *********/// 定时器0中断服务程序/************************************************ *********/void time0(void) interrupt 1{TR1 =0;TF0 =0;TH0=0xdb;//重新写入初值TL0=0xff;if(!Gra)//执行跳变程序{count ++;if(count >; Speed){LEDdelay = 1;count = 0;}}if(Gra){TR1 = 1;//开启TR1;if(!BP)//{if(Gra7){P1 = led1[ledcount1]; //10ms到,亮相应的LED }if(Gra3){P1 = led3[ledcount1]; //10ms到,亮相应的LED }Pulse++;value();if(Pulse >;= Period) {Pulse = Period;BP = 1;//一个周期完成转换模式}}if(BP){if(Gra7){P1 = led1[ledcount1]; //10ms到,亮相应的LED }if(Gra3){P1 = led3[ledcount1]; //10ms到,亮相应的LED }value();Pulse--;//脉冲个数if(Pulse == 0){Pulse = 0;BP = 0;//一个周期完成转换模式 ledcount1++;if(Gra7){if(ledcount1 >; 11) {ledcount1 = 0;}Gra7 = 0;}if(Gra3){if(ledcount1 >; 2) {ledcount1 = 0;}Gra3 = 0;}}}}/************************************************ *********/// 定时器1中断服务程序/************************************************ *********/void timer1() interrupt 3{PWM --;TH1 = 0xff;//0.05ms(20000分之一秒)TL1 = 0xD1;if(PWM == 0){P1 = 0;TR1 = 0;}}/************************************************ *********/// 外部中断0中断服务程序下降沿触发/*********************************************************/void extern0(void) interrupt 0 {IE0 = 0;// 清标志位excount++;if(excount>;50)// 50大约3秒{EA = 0;//P1_5 = 1;excount = 0;Reset();}}。
LED呼吸灯C51源程序
*【使用说明】:晶振为利用准时器控制产生占空比可变的PWM 波按K3 ,PWM 值增添,则占空比减小,LED 灯渐亮按K4 , PWM 值减小,则占空比增添 ,LED 灯渐暗当 PWM 值增添到最大值或减小到最小值时,蜂鸣器将报警**********************************************************************************/#include<reg51.h>#include<intrins.h>sbit K1=P3^4 ;//PWM 值增添键sbit K2=P3^5;//PWM 值减少键sbit BEEP =P0^4;//蜂鸣器unsigned char PWM=0x7f ;//赋初值void Beep();void delayms(unsigned char ms);void delay(unsigned char t);/*********************************************************/void main(){P1=0xff;TMOD=0x21 ;TH0=0xfc ;//1ms延经常数TL0=0x66 ; TH1=PWM ;// 频率调理//脉宽调理TL1=0 ;EA=1;ET0=1;ET1=1;TR0=1 ;while(1){do{if(PWM!=0xff){PWM++ ;delayms(10);}else Beep() ;}while(K1==0);do{if(PWM!=0x02){PWM-- ;delayms(10);} else Beep() ;}while(K2==0);}}/*********************************************************/// 准时器 0 中断服务程序(频率)/*********************************************************/void timer0() interrupt 1{TR1=0 ;TH0=0xfc ;TL0=0x66 ;TH1=PWM ;TR1=1 ;P1=0x00 ;//启动输出}/*********************************************************///准时器 1 中断服务程序(脉宽)/*********************************************************/void timer1() interrupt 3{TR1=0 ;P1=0xff ;//结束输出}/*********************************************************///蜂鸣器子程序/*********************************************************/void Beep(){unsigned char i;for (i=0;i<100;i++){delay(100) ;BEEP=!BEEP;//Beep 取反}BEEP=1 ;//关闭蜂鸣器delayms(100);}/*********************************************************///延时子程序/*********************************************************/void delay(unsigned char t){while(t--);}/*********************************************************///延时子程序/*********************************************************/ void delayms(unsigned char ms){unsigned char i ;while(ms--){for(i = 0 ; i < 120 ; i++) ;}}/*********************************************************/。
七彩LED渐变程序源码51单片机
七彩LED渐变程序源码-51单片机/*******************************程序名称:七彩LED渐变程序编写者:ZH YUMCU:51/2051晶振:12MHz/*********************************/#include ;sbit g1=P1^6; //绿色sbit r1=P1^7; //红sbit b1=P1^5; //兰sbit key1=P3^3;/*********************************/unsigned char i;unsigned char mode;/*********************************/void delay(unsigned int k){unsigned int i,j;for(i=0;i<k;i++){for(j=0;j<121;j++){;}}}/*********************************/ void interint1() interrupt 2 //using ** //外部中断1处理{EA=0;if(key1==0){delay(20);key1=1;if(key1==0){mode++;if(mode==4)mode=0;}while(key1==0);}key1=1;EA=1;}/*********************************/ timer(unsigned char t){unsigned char b;for(b=0;b<t;b++){; }}/*********************************/ ledout(unsigned char g,r,b) {unsigned char a;for(a=0;a<10;a++){if(g!=0){g1=1;timer(g);g1=0;}if(r!=0){r1=1;timer(r);r1=0;}if(b!=0){b1=1;timer(b);b1=0;}}}/*********************************//*********************************/ main(){unsigned char g,r,b;r1=0;g1=0;b1=0;EA=1;EX1=1;delay(1);while(1){if(mode==0){{if(g!=0&&b==0){g--;r++;}if(r!=0&&g==0){r--;b++;}if(b!=0&&r==0){b--;g++;}if(g+r+b!=100){g=100;r=0;b=0;}ledout(g,r,b);}}if(mode==1){i++;if(i==7)i=0;switch(i){case 0 : r1=1;g1=0;b1=0;delay(100);r1=0;g1=0;b1=0; delay(100); break;case 1 : r1=0;g1=1;b1=0;delay(100);r1=0;g1=0;b1=0; delay(100); break;case 2 : r1=0;g1=0;b1=1;delay(100);r1=0;g1=0;b1=0; delay(100); break;case 3 : r1=1;g1=1;b1=0;delay(100);r1=0;g1=0;b1=0; delay(100); break;case 4 : r1=1;g1=0;b1=1;delay(100);r1=0;g1=0;b1=0; delay(100); break;case 5 : r1=0;g1=1;b1=1;delay(100);r1=0;g1=0;b1=0; delay(100); break;case 6 : r1=1;g1=1;b1=1;delay(100);r1=0;g1=0;b1=0;delay(100); break;default : break;}}if(mode==2){i++;if(i==7)i=0;switch(i){case 0 : r1=1;g1=0;b1=0;delay(300);r1=0;g1=0;b1=0; delay(300); break;case 1 : r1=0;g1=1;b1=0;delay(300);r1=0;g1=0;b1=0; delay(300); break;case 2 : r1=0;g1=0;b1=1;delay(300);r1=0;g1=0;b1=0; delay(300); break;case 3 : r1=1;g1=1;b1=0;delay(300);r1=0;g1=0;b1=0; delay(300); break;case 4 : r1=1;g1=0;b1=1;delay(300);r1=0;g1=0;b1=0; delay(300); break;case 5 : r1=0;g1=1;b1=1;delay(300);r1=0;g1=0;b1=0; delay(300); break;case 6 : r1=1;g1=1;b1=1;delay(300);r1=0;g1=0;b1=0; delay(300); break;default : break;}}if(mode==3){i++;if(i==7)i=0;switch(i){case 0 : r1=1;g1=0;b1=0;delay(300); break;case 1 : r1=0;g1=1;b1=0;delay(300); break;case 2 : r1=0;g1=0;b1=1;delay(300); break;case 3 : r1=1;g1=1;b1=0;delay(300); break;case 4 : r1=1;g1=0;b1=1;delay(300); break;case 5 : r1=0;g1=1;b1=1;delay(300); break;case 6 : r1=1;g1=1;b1=1;delay(300); break;default : break;}}}}。
51单片机呼吸灯实验报告
呼吸灯1 功能与技术分析呼吸灯就是让LED灯的闪烁像呼吸一样,时呼时吸,时亮时暗,利用LED的余辉和人眼的暂留效应,看上去和人的呼吸一样。
可以展示出各种酷炫的图像。
1.1 呼吸灯的实现效果使用调制的方法,灯在高速闪烁时人眼是看不出来的,每个循环给闪烁的熄灭时间加1,灯就会慢慢变暗,在设置熄灭时间加到一定程度就开始减一,就会渐渐变亮了。
使得LED灯按照顺序逐渐改变亮度。
1.2 功能分析灯光在微电脑控制之下完成由亮到暗的绝剑变化,感觉就像是在呼吸。
广泛应用与数码产品,起到装饰和指示工作效果。
目前被广泛用于手机之上,并成为各大品牌新款手机的卖点之一。
1.3 技术分析用C语言编程实现PWM(脉宽调制)输出驱动LED,逐渐增加PWM的占空比从而实现LED模拟呼吸的过程,即渐亮再渐暗再渐亮再渐暗……如此往复,再利用LED的余辉和人眼的暂留效应,看上去就和人的呼吸一样。
2 硬件基础与设计整个系统的搭建,由以下元器件组成:1、12MHz晶振一个;2、stc89c51单片机一个;3、30pf无极性电容2个;4,、按钮一个;5、10K电阻一个;6、10uf有极性电容一个;7、洞洞板一个;8、LED灯若干。
2.1 基于51单片机的最小系统的设计STC89C51RC是采用8051核的ISP(In System Programming)在系统可编程芯片,最高工作时钟频率为80MHz,片内含8K Bytes 的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。
STC89C51RC系列单片机是单时钟/机器周期(1T)的兼容8051 内核单片机,是高速/ 低功耗的新一代8051 单片机,全新的流水线/精简指令集结构,内部集成MAX810 专用复位电路。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机用PWM的RGB呼吸灯程序
程序设计思路:灯在高速闪烁人眼是看不出来的,开的时候,以非常快的速度开-关,逐渐加大开的时间比率,减小关的时间比率。
关的时候,以非常快的速度开-关,逐渐加大关的时间比率,减小开的时间比率。
程序如下:
#include<reg51.h>
typedef unsigned int WORD;
/*-----------定义单片机引脚-----*/
sbit LED1=P1^1;
sbit LED2=P1^2;
sbit LED3=P1^3;
void Delay(WORD t); //函数声明
WORD z,y;
void main (void)//主函数
{
WORD CYCLE=500,PWM_LOW=0;//定义周期并赋值
while (1) //主循环
{
/*--------第一颜色LED灯呼吸---------*/
LED1=1;
Delay(500);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) //实现暗缓慢到亮{
LED1=0; //点亮LED灯
Delay(PWM_LOW);
LED1=1;
Delay(CYCLE-PWM_LOW);
}
LED1=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) //实现亮缓慢到暗{
LED1=0;
Delay(PWM_LOW);
LED1=1;
Delay(CYCLE-PWM_LOW);
}
//同理可以实现剩下的六种颜色
/*--------第二颜色LED灯呼吸----------*/
LED2=1;
Delay(500);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
{
LED2=0;
Delay(PWM_LOW);
LED2=1;
Delay(CYCLE-PWM_LOW);
}
LED2=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) {
LED2=0;
Delay(PWM_LOW);
LED2=1;
Delay(CYCLE-PWM_LOW);
}
/*--------第三颜色LED灯呼吸----------*/
LED3=1;
Delay(500);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) {
LED3=0;
Delay(PWM_LOW);
LED3=1;
Delay(CYCLE-PWM_LOW);
}
LED3=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) {
LED3=0;
Delay(PWM_LOW);
LED3=1;
Delay(CYCLE-PWM_LOW);
}
/*--------第四颜色LED灯呼吸----------*/
LED1=1;
LED2=1;
Delay(500);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) {
LED1=0;
LED2=0;
Delay(PWM_LOW);
LED1=1;
LED2=1;
Delay(CYCLE-PWM_LOW);
}
LED1=0;
LED2=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) {
LED1=0;
LED2=0;
Delay(PWM_LOW);
LED1=1;
LED2=1;
Delay(CYCLE-PWM_LOW);
}
/*--------第五颜色LED灯呼吸----------*/
LED1=1;
LED3=1;
Delay(500);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) {
LED1=0;
LED3=0;
Delay(PWM_LOW);
LED1=1;
LED3=1;
Delay(CYCLE-PWM_LOW);
}
LED1=0;
LED3=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) {
LED1=0;
LED3=0;
Delay(PWM_LOW);
LED1=1;
LED3=1;
Delay(CYCLE-PWM_LOW);
}
/*--------第六颜色LED灯呼吸----------*/
LED2=1;
LED3=1;
Delay(500);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) {
LED2=0;
LED3=0;
Delay(PWM_LOW);
LED2=1;
LED3=1;
Delay(CYCLE-PWM_LOW);
}
LED2=0;
LED3=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) {
LED2=0;
LED3=0;
Delay(PWM_LOW);
LED2=1;
LED3=1;
Delay(CYCLE-PWM_LOW);
}
/*--------第七颜色LED灯呼吸----------*/
LED1=1;
LED2=1;
LED3=1;
Delay(500);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) {
LED1=0;
LED2=0;
LED3=0;
Delay(PWM_LOW);
LED1=1;
LED2=1;
LED3=1;
Delay(CYCLE-PWM_LOW);
}
LED1=0;
LED2=0;
LED3=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) {
LED1=0;
LED2=0;
LED3=0;
Delay(PWM_LOW);
LED1=1;
LED2=1;
LED3=1;
Delay(CYCLE-PWM_LOW);
}
}
}
void Delay(WORD t)
{
while(--t);
}。