呼吸灯代码

合集下载

基于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呼吸灯实验

实验三:LED呼吸灯实验
LPC_SYSCON->SYSAHBCLKCTRL |= (1UL << 13); /* Enable clock to ADC block */
LPC_ADC->CR = ( 1UL << 0) | /* select AD0 pin */
(23UL << 8) | /* ADC clock is 24MHz/24 */
volatile unsigned short AD_dbg;
/*----------------------------------------------------------------------------
Function that initializes ADC
*----------------------------------------------------------------------------*/
LPC_TMR32B0->TCR=0x01;
NVIC_EnableIRQ(TIMER_32_0_IRQn);
}
void TMR16B1_PWM_Init(void)
{
LPC_SYSCON->SYSAHBCLKCTRL |= ((1UL << 6) | /* enable clock for GPIO */
*----------------------------------------------------------------------------*/
void LED_Out(void) {
if ((LPC_GPIO1->DATA & (1<<9))) {
LED_On ();

led呼吸灯源程序

led呼吸灯源程序

#include<reg52.h> #include<intrins.h> #define uchar unsigned char #define ቤተ መጻሕፍቲ ባይዱint unsigned int sbit LED = P2^5; uchar top = 0; //一个周期里面高电平占的比重(一个周期分成200份, top从0~200) uchar flag = 0; //增减标志位,0标志渐亮,1表示渐暗 uchar count = 0; //定时器计数,100us记一次 void Init_T0()//以计数器T0工作方式2为例 { TMOD &= 0xf0; //设置工作方式 TMOD |= 0x02; TH0 = (256-100)%256; //装入初值 TL0 = (256-100)%256; EA = 1; //打开中断总开关 ET0 = 1; //打开TO中断开关 TR0 = 1; //启动T0开始工作 } void delay(uint x) { uint i; for(;x>0;x--) { for(i=120;i>0;i--) { _nop_();_nop_();_nop_();_nop_(); } } } void Timer0() interrupt 1 { ET0 = 0; //关中断 switch(LED==1)
{ case 0:if(count==(200-top)) { count = 0; LED = 1; if(flag==0)//增减标志位,0表示加,1表示减 { top++; if(top==200) { flag = 1; LED = 1;//LED灯满周期高电平 delay(200);//延长LED灯暗时的时间 } } else { top--; if(top==0) { flag = 0; LED = 0;//LED灯满周期低电平 } } };break; case 1:if(count==top) { count = 0; LED = 0; if(flag==0)//增减标志位,0表示加,1表示减 { top++; if(top==200) { flag = 1; LED = 1;//LED灯满周期低电平

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

循环呼吸灯

循环呼吸灯
{
led1=1,led0=0,delay(pwm);
led1=0,led0=1,delay(cycle-pwm);
}
}
}
void delay(unsigned int x)
{unsigned int a,b;
for(a=x;a>0;a--)
{
led4=1,led5=0,delay(pwm);
led4=0,led5=1,delay(cycle-pwm);
}
P1=0xdf,delay(5000);//5灯亮
for(pwm=1;pwm<cycle;pwm++)//5灯渐灭,6灯渐渐亮
{
led3=1,led2=0,delay(pwm);
led3=0,led2=1,delay(cycle-pwm);
}
P1=0xfb,delay(5000);//2灯亮
for(pwm=1;pwm<cycle;pwm++)//2灯渐灭,1灯渐渐亮
{
led7=1,led6=0,delay(pwm);
led7=0,led6=1,delay(cycle-pwm);
}
P1=0xbf,delay(5000);//6灯亮
for(pwm=1;pwm<cycle;pwm++)//6灯渐灭,5灯渐渐亮
{
led1=1,led2=0,delay(pwm);
led1=0,led2=1,delay(cycle-pwm);
}
P1=0xfb,delay(5000);//2灯亮
for(pwm=1;pwm<cycle;pwm++)//2灯渐灭,3灯渐渐亮

8位led呼吸程序代码

8位led呼吸程序代码

sbit led5=P0^5; sbit led6=P0^6; sbit led7=P0^7; void pwm(int x) { while(x--);//延时函数 } void main() { int t=0,i=0; char f=0; ENLED = 0;ADDR3 = 1;
译码器的打开 ADDR0 = 0;ADDR1 = 1;ADDR2 = 1;
8 位 led 呼吸程序代码
前几天从视频上看到一个水滴掉落的程序,看到自 己笔记本上的 led 呼吸灯,感觉他们的算法要求差不多, 于是写下一下程序,我也得瑟一下,算是原创吧。有不 正之处或者是有需要优化之处欢迎大家批评指正,相互 学习(代码中有 138 译码器的操作,已注释,kingst 的 单片机开发板可直接实现) #include; #define uchar unsigned char #define N 2 //定义的呼吸的速率 #define T 700 //定义 PWM 的周期 sbit ENLED = P1^4;//138 译码器 sbit ADDR0 = P1^0;//138 译码器 sbit ADDR1 = P1^1;//138 译码器 sbit ADDR2 = P1^2;//138 译码器 sbit ADDR3 = P1^3;//138 译码器 sbit led0=P0^0; sbit led1=P0^1; sbit led2=P0^2; sbit led3=P0^3; sbit led4=P0^4;
if(t;=4800&&i;=5600&&i;T) { f=1; t=T; } if(t;=6400)i=0; }
} }
பைடு நூலகம்
译码器的操作 11111011 while(1) { if(i;T) { f=1; t=T;

呼吸灯设计c程序

呼吸灯设计c程序

呼吸灯设计c程序呼吸灯设计C程序简介呼吸灯是一种常见的灯光效果,它模拟了人类呼吸的节奏,灯光逐渐从暗到亮再从亮到暗,循环往复。

在嵌入式系统开发中,通过编写C程序来实现呼吸灯效果是一种常见的做法。

本文将介绍如何使用C语言设计一个简单的呼吸灯程序,并通过连接LED灯连接到单片机上进行调试。

准备工作在编写呼吸灯C程序之前,我们需要准备一些硬件设备和开发工具。

首先,我们需要一块单片机开发板,常用的有Arduino、树莓派等。

其次,我们需要一块LED灯,可以是常见的发光二极管或RGB LED等。

最后,我们需要一个编程环境,例如Arduino IDE或gcc编译器。

程序实现下面是一个简单的呼吸灯C程序的实现:cinclude <stdio.h>include <wiringPi.h>int mn(void) {int brightness = 0;int fadeAmount = 5;wiringPiSetup();pinMode(0, PWM_OUTPUT);while (1) {pwmWrite(0, brightness);brightness += fadeAmount;if (brightness == 0 -- brightness == 255) { fadeAmount = -fadeAmount;}delay(30);}return 0;}程序分析以上程序使用了wiringPi库来控制GPIO,并通过PWM输出来控制LED灯的亮度。

在程序的主函数中,我们定义了两个变量`brightness`和`fadeAmount`分别用于控制当前的亮度和变化的步长。

在无限循环中,我们通过`pwmWrite()`函数来输出当前的亮度值,并通过改变`brightness`的值以及根据亮度的变化方向来改变`fadeAmount`的值,从而实现呼吸灯效果。

具体来说,当`brightness`在[0, 255]范围内变化时,LED灯的亮度会逐渐从暗到亮;当`brightness`达到0或255时,我们改变`fadeAmount`的符号,使亮度的变化方向从亮变暗或从暗变亮。

用51单片机制作呼吸灯

用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;}}}总结经过本次单片机的实验,使我们小组的每个成员对单片机编程的方式方法有了更深一步的认识。

我们通过更具体的学习,和老师的帮助下,我们对单片机的设计有了更深的体会。

(注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。

可复制、编制,期待你的好评与关注)。

呼吸灯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++)

呼吸灯单片机程序

呼吸灯单片机程序

呼吸灯单片机报告本次实验中的程序实现的功能是通过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(脉冲调制)来实现。

但是对于我们初学者来说这东西太复杂了。

下⾯我将教⼤家⽤延时写⼀个超简单的呼吸灯程序
void delayed(unsigned int k)
{//延时函数
unsigned char i,j;
for (i = 0; i < k;i++)
for (j = 0; j < 50; j++);
}
int main()
{
unsigned int i;
while(1)
{
for (i = 0; i < 200; i++)
{
P0 = 0xfe;
delayed(i);//LED灯慢慢的亮起来
P0 = 1;
delayed(200 - i);
}
delayed(500);
for (i = 0; i < 200; i++)
{
P0 = 1;
delayed(i);//LED灯慢慢的灭
P0 = 0xfe;
delayed(200 - i);
}
delayed(500);
}。

css3之呼吸灯效果

css3之呼吸灯效果

css3之呼吸灯效果1、⾸先脑补⼀个知识点,我们在代码中经常看到-webkit或-moz,那这些有什么作⽤了,看下代码就知道了:-webkit-border-radius: 2px; /*Webkit:⾕歌⽀持:圆⾓*/-moz-border-radius: 2px; /*Mozilla:⽕狐⽀持:圆⾓*/-ms-border-radius: 2px; /*Microsoft:IE9⽀持:圆⾓*/-o-border-radius: 2px; /*Opera⽀持:圆⾓*/border-radius: 2px; /*圆⾓*/2、好了,呼吸灯的原理就是修改标签的不透明度,主要利⽤到css3的animation动画<!DOCTYPE html><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"/><title>呼吸灯</title><style type="text/css">/* css代码 */</style></head><body><div class="breath_light" title="呼吸线"></div></body></html>3、css代码是这样的:.breath_light {width: 50px; /* 宽度 */height: 4px; /* ⾼度 */opacity: 0.1; /* 不透明度 */overflow: hidden; /* 溢出隐藏 */background: #99dd33; /* 背景⾊ */margin: 25% auto; /* 外边距 *//* IE10、Firefox and Opera,IE9以及更早的版本不⽀持 */animation-name: breath; /* 动画名称 */animation-duration: 3s; /* 动画时长3秒 */animation-timing-function: ease-in-out; /* 动画速度曲线:以低速开始和结束 */animation-iteration-count: infinite; /* 播放次数:⽆限 *//* Safari and Chrome */-webkit-animation-name: breath; /* 动画名称 */-webkit-animation-duration: 3s; /* 动画时长3秒 */-webkit-animation-timing-function: ease-in-out; /* 动画速度曲线:以低速开始和结束 */-webkit-animation-iteration-count: infinite; /* 播放次数:⽆限 */}@keyframes breath {from { opacity: 0.1; } /* 动画开始时的不透明度 */50% { opacity: 1; } /* 动画50% 时的不透明度 */to { opacity: 0.1; } /* 动画结束时的不透明度 */}@-webkit-keyframes breath {from { opacity: 0.1; } /* 动画开始时的不透明度 */50% { opacity: 1; } /* 动画50% 时的不透明度 */to { opacity: 0.1; } /* 动画结束时的不透明度 */}。

msp430g2553实现呼吸灯程序

msp430g2553实现呼吸灯程序

#include "msp430g2553.h"void delay_1us(void){unsigned int i;for(i=0;i<100;i++);}void delay_nus(unsigned int n){unsigned int i;for(i=0;i<n;i++){delay_1us();}}void delay_1ms(void){unsigned int i;for (i=0;i<1140;i++);}void delay_nms(unsigned int n){unsigned int i;for (i=0;i<n;i++){delay_1ms();}}int main( void ){WDTCTL = WDTPW + WDTHOLD;unsigned const PWMPeriod = 800;//const 限定一个变量不允许被改变unsigned int i;WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗P1DIR |= BIT6; // 设置P1.6为输出P1SEL |= BIT6; // 设置P1.6为TA0.1输出CCR0 = PWMPeriod; // 设置PWM 周期CCTL1 = OUTMOD_7; // 设置PWM 输出模式为:7 - PWM复位/置位模式,// 即输出电平在TAR的值等于CCRx时复位,当TAR的值等于CCR0时置位。

TACTL = TASSEL_2 + MC_1; // 设置TIMERA的时钟源为SMCLK, 计数模式为upwhile(1){//渐亮过程:不断设置CCR1的值,使翻转的时间变长,改变PWM的占空比for(i=0;i<PWMPeriod;i+=1){CCR1=i;delay_nus(6); //占空比变化的延时,调整延迟时间可改变呼吸灯变亮的速度}//渐暗过程:不断设置CCR1的值,使翻转的时间变短,改变PWM的占空比for(i=PWMPeriod;i>0;i-=1){CCR1=i;delay_nus(5); //占空比变化的延时,调整延迟时间可改变呼吸灯变暗的速度}delay_nms(70);}}。

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

写一段程序,使单片机上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)不变。

换而言之,灯是亮一会,灭一会,只不过亮的时间增多,而灭的时间不变,这就相单于提高亮的比例时间,这大概就是占空比提高了,而肉眼看起来就是灯由灭,慢慢变到最亮。

灯由亮变到暗,最后灭,则是减低它的占空比。

看起来就是灯在呼吸了。

这个代码不是我写的,是复制同学的,至于为什么他没有在主函数声明CYCLE-PWM_LOW,而直接调用delay(CYCLE-PWM_LOW),还成功了?我也不清楚。

另外,老师说,等一个灯历经了灭——亮——灭的完整过程,才开始下一个灯,是初学者的做法,效率不高,可以改进为一个灯在灭——亮的过程中间,开始下一个灯的灭——亮,这样看起来效果更好。

但是,我不知道怎么做。

这个同时的问题我不知道怎麽处理,在for循环里,只知道它执行完一条语句才去执行下一条语句。

难道有其他循环体可以使多条语句同时执行,还是for循环有其他用法,可以让多条语句同时执行?。

相关文档
最新文档