基于51单片机的呼吸灯设计C语言
声控灯程序C语言,基于51单片机的声控灯的设计.doc

声控灯程序C语⾔,基于51单⽚机的声控灯的设计.docPAGE 3基于51单⽚机的声控⼩灯电⼦信息⼯程技术信息⼯程系电⼦信息⼯程技术信息⼯程系年 10 ⽉ 20 ⽇诚 信 声 明本⼈郑重声明:所呈交的毕业设计⽂本和成果,是本⼈在指导⽼师的指导下,独⽴进⾏研究所取得的成果。
成果不存在知识产权争议,本毕业设计不含任何其他个⼈或集体已经发表过的作品和成果。
本⼈完全意识到本声明的法律结果由本⼈承担。
毕业设计者签名:年 ⽉ ⽇⽬ 录1.绪论 (4)1.1论⽂选题的⽬的和意义 (4)1.2国内外关于该论题的研究现状和发展趋势..................... (4)TOC \o "1-3" \h \z \u 2.课程设计的思路和设计说明 (5)2.1题⽬要求 (5)2.2设计思路及说明 (5)3.设计⽅案的⽐较和论证 (5)3.1软件设计⽅法 (5)3.2硬件设计⽅法 (6)4. 声控灯模块设计 (8)4.1光敏电阻.................................... (8)4.2驻极体话筒................................. (9)4.3电源电路设计 (9)4.4串⼝通信的实现 (10)4.5声控模块设计 (11)4. 6声控电路设计 (11)4.7时钟模块设计 (11)4.8系统程序编写 (11)4.9 51单⽚机系统及功能实现 (11)5.设计过程中遇到的问题及解决⽅法 (12)6.实验结果及结论 (12)6.1声控电路结果分析...... (12)致谢 (13)参考⽂献 (13)附页 (15)基于51单⽚机的声控⼩灯摘要:在⽣活中,我们⽆时⽆刻不在使⽤着灯,如台灯、路灯、⽇光灯、照明灯、彩灯等等,但不管什么⽅式的灯,他们的作⽤都是⼀致的——照明。
因此,设计⼀个既实⽤⽅便的照明灯则是我们共同的愿望。
设计⼀种极不浪费电⼒⼜⽅便实⽤的照明灯更是我们⼀直以来努⼒的⽬标。
51单片机pwm呼吸灯原理

51单片机pwm呼吸灯原理
呼吸灯是一种常见的电子灯光效果,在嵌入式系统中使用PWM(脉宽调制)
技术可以实现呼吸灯效果。
51单片机作为一种常用的嵌入式系统控制器,也可以
利用其内部的PWM功能来实现呼吸灯效果。
PWM是一种通过改变脉冲信号的高低电平比例来控制信号的占空比的技术。
在呼吸灯中,我们可以利用PWM的占空比来控制LED灯的亮度变化,从而实现
灯光逐渐变亮再逐渐变暗的效果。
实现51单片机的PWM呼吸灯效果需要主要以下几个步骤:
1. 配置单片机的PWM模块:先确定使用哪个定时器的PWM功能,然后设置
定时器工作模式和计数器初值。
2. 设置占空比:根据呼吸灯的效果要求,选择适当的周期和占空比。
通过改变PWM的脉冲信号的高电平时间和周期来控制LED的亮度变化。
3. 控制流程:编写程序,通过适当的控制结构如循环语句,在适当的时间段改
变PWM占空比,从而实现呼吸灯效果。
具体实现时,需要根据具体的单片机型号和编程语言来进行具体的配置和编程。
在编写程序时,可以利用定时器中断来实现精确的时间控制,以达到更加流畅的呼吸灯效果。
总之,通过合理配置51单片机的PWM模块,并编写相应的程序实现占空比
的变化控制,可以轻松实现呼吸灯效果。
这种效果不仅可以为电子产品增添美感,还可以用于指示、装饰等方面。
呼吸灯单片机课程设计

呼吸灯单片机课程设计一、课程目标知识目标:1. 学生能理解单片机的基本原理,掌握呼吸灯单片机的硬件组成及其功能。
2. 学生能掌握C语言编程的基础知识,并运用其编写简单的程序控制单片机实现呼吸灯效果。
3. 学生了解并掌握基本的电路连接和调试方法。
技能目标:1. 学生能独立完成单片机的硬件连接,进行电路搭建。
2. 学生能运用C语言编写程序代码,实现呼吸灯的渐变效果。
3. 学生能通过调试电路和程序,解决呼吸灯单片机运行过程中出现的问题。
情感态度价值观目标:1. 培养学生动手实践、解决问题的能力,激发他们对单片机编程的兴趣。
2. 培养学生团队合作精神,学会在团队中沟通、协作,共同完成任务。
3. 培养学生严谨、细致的学习态度,养成编程规范和良好的电路搭建习惯。
课程性质:本课程为实践性课程,结合理论知识与动手操作,培养学生的编程能力和实践技能。
学生特点:学生具备一定的电子电路基础知识,对编程有一定了解,但实践经验不足。
教学要求:教师需引导学生掌握单片机基本原理和编程方法,注重实践操作,鼓励学生自主探索和团队合作。
在教学过程中,关注学生个体差异,提供个性化指导,确保每位学生都能达到课程目标。
通过课程学习,使学生能够将所学知识应用于实际项目中,提高解决实际问题的能力。
二、教学内容1. 理论知识:- 单片机基础原理:介绍单片机的硬件结构、工作原理和性能特点。
- C语言编程基础:回顾C语言基础知识,讲解常用的编程语句和语法。
2. 实践操作:- 硬件连接:指导学生进行单片机、呼吸灯模块及相关元器件的硬件连接。
- 程序编写:教授学生编写控制呼吸灯的程序代码,实现渐变效果。
- 电路调试:教授学生如何对搭建的电路和编写的程序进行调试,解决常见问题。
3. 教学大纲:- 第一阶段:单片机基础原理学习,占总课时1/4。
- 第二阶段:C语言编程基础学习,占总课时1/4。
- 第三阶段:实践操作,包括硬件连接、程序编写和电路调试,占总课时1/2。
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个机器周期,定时中断子程序中的数据入栈和重装定时/计数器的初值还需要占用数个机器周期,还有从中断入口转到中断子程序也要占用一定的机器周期。
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****************/。
51单片机汇编语言及C语言经典实例

51单片机汇编语言及C语言经典实例汇编语言是一种用来编写计算机指令的低级语言,它与机器语言十分接近,可以直接控制计算机硬件。
而C语言是一种高级程序设计语言,它具有结构化编程和模块化设计的特点。
本文将介绍51单片机汇编语言和C语言的经典实例,并进行详细解析。
一、LED指示灯的闪烁我们首先来看一个经典的51单片机汇编语言的实例——LED指示灯的闪烁。
我们可以通过控制单片机的IO口来实现LED的闪烁效果。
以下是汇编语言的代码:```assemblyORG 0 ; 程序起始地址MOV P1, #0; 将 P1 置为0,熄灭LEDLJMP $ ; 无限循环```以上代码使用了51单片机的MOV指令和LJMP指令。
MOV指令用来将一个立即数(这里是0)存储到寄存器P1中,控制对应的I/O口输出低电平,从而熄灭LED。
而LJMP指令则是无条件跳转指令,将程序跳转到当前地址处,实现了无限循环的效果。
对应的C语言代码如下:```c#include <reg51.h>void main() {P1 = 0; // 将 P1 置为0,熄灭LEDwhile(1); // 无限循环}```以上代码使用了reg51.h头文件,该头文件提供了对51单片机内部寄存器和外设的访问。
通过将P1赋值为0,控制IO口输出低电平,实现了熄灭LED的效果。
while(1)是一个无限循环,使得程序一直停留在这个循环中。
二、数码管的动态显示接下来我们介绍51单片机汇编语言和C语言实现数码管动态显示的经典实例。
数码管动态显示是通过控制多个IO口的高低电平来控制数码管显示不同的数字。
以下是汇编语言的代码:```assemblyORG 0 ; 程序起始地址MOV A, #0FH ; 设置数码管全亮,A存储数码管控制位MOV P2, A ; 将 A 的值存储到 P2,控制数码管的数码控制位DELAY: ; 延时循环MOV R7, #0FFH ; 设置延时计数值LOOP1: ; 内层循环MOV R6, #0FFH ; 设置延时计数值LOOP2: ; 内部延时循环DJNZ R6, LOOP2 ; 延时计数减1并判断是否为0,不为0则继续循环DJNZ R7, LOOP1 ; 延时计数减1并判断是否为0,不为0则继续循环DJNZ A, DELAY ; A减1并判断是否为0,不为0则继续循环JMP DELAY ; 无限循环,实现动态显示```以上代码中,我们通过MOV指令来将一个立即数(0x0F)存储到寄存器A中,控制数码管显示0-9的数字。
用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单片机pwm呼吸灯原理

PWM呼吸灯原理概述PWM(Pulse Width Modulation,脉宽调制)是一种通过改变信号的脉冲宽度来控制信号的平均功率的技术。
在51单片机中,通过使用PWM技术可以实现呼吸灯效果,即灯光逐渐变亮再逐渐变暗的效果。
本文将详细解释与51单片机PWM呼吸灯原理相关的基本原理。
基本原理PWM呼吸灯的基本原理是通过不断改变LED的亮度来产生呼吸灯效果。
具体步骤如下:1. 设置定时器首先需要设置一个定时器,用于产生固定频率的脉冲信号。
定时器的工作模式为自动重装载模式,即当定时器计数达到设定值后,会自动重新加载初始值,并产生一个中断信号。
2. 设置占空比占空比(Duty Cycle)是指PWM信号中高电平的时间占整个周期的比例。
在呼吸灯效果中,占空比会不断变化,从而产生灯光逐渐变亮再逐渐变暗的效果。
占空比的大小决定了LED的亮度。
3. 改变占空比为了实现呼吸灯效果,需要不断改变占空比的大小。
可以通过改变定时器的初始值来改变占空比。
初始值越小,高电平时间越短,占空比越小,LED的亮度越低;初始值越大,高电平时间越长,占空比越大,LED的亮度越高。
4. 周期性改变占空比为了实现呼吸灯效果,需要周期性地改变占空比。
可以通过定时器中断来触发改变占空比的操作。
当定时器产生中断时,改变定时器的初始值,从而改变占空比。
为了实现呼吸灯效果,可以设定一个周期,在周期内逐渐增加或减小占空比。
5. 控制LED亮度最后一步是根据占空比的大小来控制LED的亮度。
当占空比为100%时,LED处于最亮状态;当占空比为0%时,LED处于最暗状态。
通过改变占空比的大小,可以实现灯光逐渐变亮再逐渐变暗的效果。
实现步骤根据上述基本原理,可以按照以下步骤来实现51单片机的PWM呼吸灯效果:1.初始化定时器,设置定时器的工作模式为自动重装载模式。
2.设置定时器的初始值,即占空比的大小。
3.设置定时器的中断,当定时器计数达到设定值后,触发中断。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告书题目: 基于51单片机的呼吸灯设计信息工程学院课程设计任务书年月日摘要本设计是基于单片机的原理与接口设计,采用单片机I/O口,加以C 语言编程实现LED渐亮再渐暗类似人的呼吸一样的效果。
关键词AT89C51,PWM(脉宽调制)一、设计要求:呼吸灯就是让LED灯的闪烁像呼吸一样,时呼时吸,时亮时暗,利用LED的余辉和人眼的暂留效应,看上去和人的呼吸一样。
二、设计原理:用C语言编程实现PWM(脉宽调制)输出驱动LED,逐渐增加PWM 的占空比从而实现LED模拟呼吸的过程,即渐亮再渐暗再渐亮再渐暗……如此往复,再利用LED的余辉和人眼的暂留效应,看上去就和人的呼吸一样。
三、整体方案设计8个LED按照顺序逐个实现呼吸效果。
加以其他闪烁花样增加更炫彩的效果。
四、实验元件及器材(1)元件:LED(发光二极管)8个1KΩ电阻8个1nf电容2个晶振1个AT89C51芯片1个(2)器件:Atmega128开发板1块计算机1台五、硬件原理(1)主电路:8个LED分别连接AT89C51的P1口,使用共阳方式,并加以1kΩ的电阻接入电源。
(2)时钟电路:外部时钟方式是使用外部振荡脉冲信号。
六、软件设计及系统仿真调试(1)调试方法:利用keil软件进行C语言程序编写及调试,再利用Proteus仿真软件进行仿真实验。
(2)调试过程所遇问题:1、由于呼吸灯的程序在仿真软件Proteus中实现的效果不明显,很难辨别LED是否具有呼吸的效果。
所以边用keil调试程序边用STC烧写软件直接写入开发板,从而很明显看出LED是否具有呼吸效果;2、程序运行时,出现LED闪烁过快,由于人眼的暂留效应看似LED全部一直亮着,经调试,修改延时时间,实现呼吸效果。
七、结论与心得在本次设计中,C语言程序在开发板中得以实现应有的功能。
在调试过程中,发现很多问题都是由于不细心导致的,因此在以后的设计方案中,要集中精力,莫粗心大意。
再者就是知识量的不足,虽然是一个小小的设计方案,但是查阅了很多相关资料,在日后,要多充足自己的知识量,保证C程序的编写质量。
参考文献[1]郭天祥,《新概念51单片机C语言教程》,电子工业出版社,2009年1月[2]徐爱钧,《单片机高级语言C51应用程序设计》,电子工业出版社,2000年5月附件A:呼吸灯设计电路图附件B:C语言程序清单#include<reg51.h>/*-----------定义单片机引脚-----*/sbit LED0=P1^0;sbit LED1=P1^1;sbit LED2=P1^2;sbit LED3=P1^3;sbit LED4=P1^4;sbit LED5=P1^5;sbit LED6=P1^6;sbit LED7=P1^7;void Delay(unsigned int t); //函数声明unsigned int z,y;void main (void)//主函数{unsigned int CYCLE=500,PWM_LOW=0;//定义周期并赋值while (1) //主循环{/*--------整排LED灯呼吸---------*/P1=0x00;Delay(500); //加延时,可以看到熄灭的过程(下面程序同理)for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) //PWM_LOW表示低{P1=0x00;Delay(PWM_LOW);P1=0xff;Delay(CYCLE-PWM_LOW);}P1=0xff;for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) //与逐渐变亮相反的过程{P1=0x00; //点亮LEDDelay(PWM_LOW);P1=0xff; //熄灭LEDDelay(CYCLE-PWM_LOW); //主循环中添加其他需要一直工作的程序,延时长度,600次循环中从599减至1 }/*--------第一颗LED灯呼吸---------*/LED0=1;Delay(500);for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) {LED0=0;Delay(PWM_LOW);LED0=1;Delay(CYCLE-PWM_LOW);}LED0=0;for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) {LED0=0;Delay(PWM_LOW);LED0=1;Delay(CYCLE-PWM_LOW);}/*--------第二颗LED灯呼吸----------*/LED1=1;Delay(500);for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) {LED1=0;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灯呼吸----------*/LED4=1;Delay(500);for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) {LED4=0;Delay(PWM_LOW);LED4=1;Delay(CYCLE-PWM_LOW);}LED4=0;for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) {LED4=0;Delay(PWM_LOW);LED4=1;Delay(CYCLE-PWM_LOW);}/*--------第六颗LED灯呼吸----------*/LED5=1;Delay(500);for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++){LED5=0;Delay(PWM_LOW);LED5=1;Delay(CYCLE-PWM_LOW);}LED5=0;for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) {LED5=0;Delay(PWM_LOW);LED5=1;Delay(CYCLE-PWM_LOW);}/*--------第七颗LED灯呼吸----------*/LED6=1;Delay(500);for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) {LED6=0;Delay(PWM_LOW);LED6=1;Delay(CYCLE-PWM_LOW);}LED6=0;for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) {LED6=0;Delay(PWM_LOW);LED6=1;Delay(CYCLE-PWM_LOW);}/*--------第八颗LED灯呼吸----------*/LED7=1;Delay(500);for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) {LED7=0;Delay(PWM_LOW);LED7=1;Delay(CYCLE-PWM_LOW);}LED7=0;for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) {LED7=0;Delay(PWM_LOW);LED7=1;Delay(CYCLE-PWM_LOW);}P1=0x00;for(z=500;z>0;z--)for(y=110;y>0;y--);P1=0xff;for(z=500;z>0;z--)for(y=110;y>0;y--);P1=0x00;for(z=500;z>0;z--)for(y=110;y>0;y--);P1=0xff;for(z=500;z>0;z--)for(y=110;y>0;y--);}}void Delay(unsigned int t){ while(--t);}。