呼吸灯程序C代码实现

合集下载

基于f28335呼吸灯c语言代码

基于f28335呼吸灯c语言代码

基于f28335呼吸灯c语言代码呼吸灯的原理和应用呼吸灯的原理呼吸灯是一种通过改变灯光亮度的效果来呈现灯光闪烁的效果。

它是通过改变灯光亮度的幅值和频率来实现的。

基本原理是在一定的时间内,逐渐增加灯光亮度,然后逐渐减小灯光亮度,以达到灯光像呼吸一样变化的效果。

呼吸灯的应用呼吸灯通常被用于装饰、照明等领域。

例如,它可以用于室内装饰灯、舞台灯光设计等。

同时,呼吸灯也经常被使用在一些电子产品中,如路由器、手机等,用来表示设备工作状态。

TI TMS320F28335简介TI TMS320F28335是一款基于C28x内核的高性能数字信号处理器(DSP)。

它具有高速运算能力和丰富的外设接口,广泛应用于工业控制、电力电子、通信等领域。

该芯片支持大部分C语言编程,并配有专业的开发工具链,如Code Composer Studio,方便开发人员进行软件开发和调试。

基于TI TMS320F28335的呼吸灯实现硬件设计在开始编写呼吸灯的C语言代码之前,我们首先需要设计硬件电路。

以下是所需的硬件组成:•TI TMS320F28335开发板•LED灯•电阻和电容器具体的电路设计如下:1.将LED灯的一个引脚连接到TMS320F28335的GPIO引脚,作为控制信号输出。

2.将LED灯的另一个引脚连接到电源正极。

3.使用电阻和电容器构建一个RC电路,将电阻连接到LED灯的另一端,电容器连接到电源负极。

软件实现在完成硬件设计后,我们可以开始编写C语言代码来实现呼吸灯效果。

以下是所需的步骤:1.配置TMS320F28335的GPIO引脚为输出模式。

2.在无限循环中,逐渐增加LED灯的亮度,在经过一定时间后,逐渐减小LED灯的亮度。

这一过程可以通过改变控制引脚的电平来实现。

3.使用定时器来创建呼吸灯的频率效果。

通过定时器中断,我们可以准确地控制灯光的变化频率。

下面是基于TI TMS320F28335的呼吸灯C语言代码的主要实现部分:#include "DSP2833x_Device.h"// 定义LED灯控制引脚#define LED_GPIO_PIN GPIO0// 初始化GPIO引脚void GPIO_init(){// 将GPIO引脚配置为输出模式EALLOW;GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;EDIS;}// 初始化定时器void Timer_init(){// 配置定时器参数CpuTimer0Regs.TCR.bit.TSS = 0; // 启动定时器CpuTimer0Regs.TCR.bit.TRB = 1; // 重载定时器CpuTimer0Regs.PRD.all = 0x1234; // 设置定时周期}// 延时函数void delay(unsigned long count){unsigned long i;for(i = 0; i < count; i++);}// 主函数int main(void){// 系统初始化// 初始化GPIO引脚GPIO_init();// 初始化定时器Timer_init();// 主循环while(1){// 呼吸灯效果for(int i = 0; i < 100; i++){// 增加LED亮度for(int j = 0; j < 100; j++){// 设置引脚为高电平GpioDataRegs.GPASET.bit.LED_GPIO_PIN = 1; delay(100000);}// 减小LED亮度for(int j = 0; j < 100; j++){// 设置引脚为低电平GpioDataRegs.GPACLEAR.bit.LED_GPIO_PIN = 1; delay(100000);}}}}总结本文介绍了基于TI TMS320F28335的呼吸灯的实现过程。

呼吸灯代码

呼吸灯代码

写一段程序,使单片机上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呼吸灯源程序

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****************/。

C51单片机实现呼吸灯和花样流水灯程序

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灯呼吸的间隔长短,数值越⼩,间隔越短。

呼吸灯程序

呼吸灯程序

#include<reg52.h>#define uint8 unsigned char #define uint16 unsigned int uint8 orc,num;sbit PWM_out = P1^1;void pwm_init(){TMOD = 0x02;TH0 = 0x9c;TL0 = 0x9c;ET0 = 1;EA = 1;TR0 = 1;}void pwm_set(uint8 pwm) {orc = pwm;}void delay(){uint8 i;for(i=0;i<250;i++);}void main(){uint8 i;pwm_init();while(1){pwm_set(i++);delay();}}void pwm_int() interrupt 1 {num++;if(orc >= num)PWM_out = 1;elsePWM_out = 0;}#include "reg51.h" //包含头文件#define uchar unsigned char#define uint unsigned int//***************************************************************************** *********************//延时函数//***************************************************************************** *********************delay(uint time) //int型数据为16位,所以最大值为65535{uint i,j,p; //定义变量i,j,用于循环语句for(i=0;i<time;i++) //for循环,循环50*time次for(j=0;j<2333;j++); //for循环,循环250次for(p=0;p<2333;p++);}//***************************************************************************** *********************//主函数//***************************************************************************** *********************void main() //主函数{uint i; //定义变亮iwhile(1) //进入while死循环{for(i=0;i<200;i++) //for循环,实现LED由亮逐渐变暗{P0=0xff; //熄灭8位发光二极管delay(i); //延时保持熄灭状态i个时间单位P0=0x00; //点亮8位发光二极管delay(200-i); //延时保持点亮状态200-i个时间单位}P0=0xff; //熄灭8位发光二极管delay(5000); //延时保持熄灭状态5000个时间单位,使现象更明显for(i=0;i<200;i++) //for循环,实现LED由暗逐渐变亮{P0=0x00; //点亮8位发光二极管delay(i); //延时保持熄灭状态i个时间单位P0=0xff; //熄灭8位发光二极管delay(200-i); //延时保持点亮状态200-i个时间单位}}}。

不用pwm做呼吸灯c语言程序

不用pwm做呼吸灯c语言程序

不用pwm做呼吸灯c语言程序呼吸灯是一种常见的LED灯效,它模拟人类呼吸的变化,让LED 灯的亮度逐渐增加和减小,给人一种温柔的感觉。

通常情况下,我们会使用脉冲宽度调制(PWM)来实现呼吸灯效果,但是今天我将介绍一种不使用PWM的方法来实现呼吸灯效果的C语言程序。

首先,我们需要了解呼吸灯的原理。

呼吸灯的亮度变化是通过改变LED灯的电流来实现的。

当电流逐渐增加时,LED灯的亮度也会逐渐增加;当电流逐渐减小时,LED灯的亮度也会逐渐减小。

因此,我们可以通过改变LED灯的电流来实现呼吸灯效果。

在C语言中,我们可以使用延时函数来控制电流的变化。

延时函数可以让程序暂停一段时间,然后再继续执行。

通过不断地调整延时的时间,我们可以实现电流的逐渐增加和减小,从而实现呼吸灯效果。

下面是一个简单的C语言程序,用于实现呼吸灯效果:```c#include <stdio.h>#include <unistd.h>int main() {int brightness = 0; // 亮度变量,范围从0到100int direction = 1; // 方向变量,用于控制电流的增加和减小while (1) {printf("当前亮度:%d\n", brightness);if (brightness == 100) {direction = -1; // 当亮度达到最大值时,改变方向为减小} else if (brightness == 0) {direction = 1; // 当亮度达到最小值时,改变方向为增加}brightness += direction; // 根据方向改变亮度usleep(100000); // 延时100毫秒// 在这里可以控制LED灯的电流,实现亮度的变化}return 0;}```在这个程序中,我们使用了一个while循环来不断地改变亮度变量的值。

呼吸灯c语言

呼吸灯c语言
#include<reg52.h> //包含头文件,一般情况不需要改动,//头文件包含特殊>
/*-------------------------IO口定义----------------------------*/
sbit d0=P1^0;//用sbit关键字定义LED到P1.0端口,LED是自己任意定义且容易记忆的符号
{
//与逐渐变亮相反的过程
d0=0;
Delay(PWM_LOW);
d0=1;
Delay(CYCLE-PWM_LOW);
}//主循环中添加其他需要一直工作的程序
}
}
/*----------延时函数,含有输入参数unsigned int t,无返回值unsigned int是定义无符号整形变量,其值的范围是0~65535---------------*/
//电平时间,这个循环中低电平时长从1Biblioteka 加到CYCLE(周期)的值,即600次
d0=0; //点亮LED
Delay(PWM_LOW);//延时长度,600次循环中从1加至599
d0=0;//熄灭LED
Delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至1
}
d0=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
{
unsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值
char y = 1;
while (y--) //主循环
{
d0=1;
Delay(20); //特意加延时,可以看到熄灭的过程
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)

LED呼吸灯C51源程序

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++) ;}}/*********************************************************/。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

吸气的脉宽调整率为 6us(脉冲宽度从 1000us 调整到 10000us,10%~100%) 脉宽加大调整最小值为( 1000us) 脉宽加大调整最大值为( 10000us) 那么吸气的调整次数为: (10000us - 1000us) / 6us = 1500 次 那么吸气的周期为: 1500 * 1ms = 1500ms = 1.5s 呼气的脉宽调整率为 4us(脉冲宽度从 10000us 调整到 1000us,100%~10%) 脉宽减小调整最大值为( 10000us) 脉宽减小调整最小值为( 1000us) 那么呼气的调整次数为: (10000us - 1000us) / 4us = 2250 次 那么呼气的周期为: 2250 * 1ms = 2250ms = 2.25s //采用定时器 TIM2 的 PWM 功能来实现, PWM 脉宽调整的控制周期定为 1ms void LED_Breathing(void) //定时器 TIM2 的 PWM 模式输出 { #define CT 1 //PWM 脉宽调整控制周期(1ms) #define Max 10000 //脉宽最大值限定(10000us) ,最大为 PWM 周期 #define Min 1000 //脉宽最小值限定( 1000us) ,最小为 0 #define Acc 6 //吸气的脉宽调整率为 6us #define Dec 4 //呼气的脉宽调整率为 4us static s32 count = 0; //1ms 时基计数 static s16 t = 1000; //脉冲宽度初始值为 1000us static flag =1; //初始化切换标志为吸气状态 if((GetTickCount() - count) >= CT) //判断脉宽调整的控制周期是否到? { count = GetTickCount(); //返回 1ms 时基计数值 TIM2->CCR3H = (u8)(t >> 8); //改变 PWM 输出比较寄存器的值(高 8 位) TIM2->CCR3L = (u8)(t); //改变 PWM 输出比较寄存器的值(低 8 位) if(flag) //吸气与呼气的状态切换标志 { t += Acc; //吸气状态,脉宽加大,由暗变亮 //大于最大值时定为最大值,此时到最亮,下一状态为由亮变暗 if(t > Max){flag = 0; t = Max;} } else { t -= Dec; //呼气状态,脉宽减小,由亮变暗 //小于最小值时定为最小值,此时到最暗,下一状态为由暗变亮 if(t < Min){flag = 1; t = Min;} } } } 2015-6-5 zhouwude
呼吸灯相关说明(基于 STM8S003F3P6 的 TIM2 定时器的 PWM) 人眼的闪烁分辨率为 50Hz 要使呼吸灯不闪烁,那么 PWM 的频率要高于 50Hz,这里使用 100Hz(周期 10ms) 吸气比呼气的速度要略快一点,吸气与呼气的比率一般为 1:1.5 人正常呼吸一次的时间为 3~5S,一般取中间值 4S 左右 那么吸气取 1.5S,呼气取 2.25S,两者相加约等于 4S 左右 最暗时不能全灭,避免出现闪烁的现象,脉宽调整范围一般设为 10%~100% //这个为简单的 IO 模拟,没有其它任务的话可以用这个实现,如果有其它任务要处理的话, 则不要使用,因为太占 CPU 资源了。 void LED_Breathing(void) //IO 口模拟(约 1S 钟吸的时间和约 1S 钟呼的时间) { s16 i; const s16 PWM = 10000; //脉宽周期 10000us = 10ms = 100Hz const s16 Rate = 100; //每次调整的脉冲宽度 100us //吸,由 0us 按照 100us 递增到 10000us,输出脉宽依次加大,由暗变亮 for(i = 0; i < PWM; i += Rate) //吸的时间,10ms*100 次等于 1S { LED_GREEN = HIGH; //输出脉冲高电平 Delay_us(i); //脉冲高电平持续时间(即 PWM 高电平宽度) LED_GREEN = LOW; //输出脉冲低电平 Delay_us(PWM - i); //脉冲低电平持续时间(即 PWM 低电平宽度) } //呼,由 10000us 按照 100us 递减到 0us,输出脉宽依次减小,由亮变暗 for(i = PWM; i > 0; i -= Rate) //呼的时间,10ms*100 次等于 1S { LED_GREEN = HIGH; //输出脉冲高电平 Delay_us(i); //脉冲高电平持续时间(即 PWM 高电平宽度) LED_GREEN = LOW; //输出脉冲低电平 Delay_us(PWM - i); //脉冲低电平持续时间(即 PWM 低电平宽度) } }
相关文档
最新文档