有个呼吸灯程序,怎么做个流水呼吸灯

sinat_28088641 2015-05-10 08:25:17
#include<reg52.h>
#define N 2 //亮暗的速率
#define T 800 //PWM的周期
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;


//======================
void pwm(int x)
{
while(x--);
}
//======================
void flash1(void){
int t = 0;
char f = 0;
int count = 5;//5次,每个函数执行的次数
while(1)
{
LED1= 0;
pwm(t); //Toff,亮的时间
LED1= 1 ;
pwm(T-t+100);//Ton,暗的时间
if(!f) t+=N+1;//亮速率较快,模拟呼吸
else t-=N;//暗速率较慢
if(t>T) {f=1;t=T;}//超过最大值时,返回最大值,标志为暗
if(t<0) {f=0;t=0;}//超过最小值时,返回最小值,标志为亮

LED2= 0;
pwm(t); //Toff,亮的时间

LED2= 1 ;
pwm(T-t+100);//Ton,暗的时间
if(!f) t+=N+1;//亮速率较快,模拟呼吸
else t-=N;//暗速率较慢
if(t>T) {f=1;t=T;}//超过最大值时,返回最大值,标志为暗
if(t<0) {f=0;t=0;}//超过最小值时,返回最小值,标志为亮

LED3= 0;
pwm(t); //Toff,亮的时间
LED3= 1 ;
pwm(T-t+100);//Ton,暗的时间
if(!f) t+=N+1;//亮速率较快,模拟呼吸
else t-=N;//暗速率较慢
if(t>T) {f=1;t=T;}//超过最大值时,返回最大值,标志为暗
if(t<0) {f=0;t=0;}//超过最小值时,返回最小值,标志为亮
}
}
void main()
{
while(1)
{
flash1();
}
}


我试过在中间加上延时 但是就直接变成流水灯了。求大神指导
...全文
1413 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq8585885 2015-05-20
  • 打赏
  • 举报
回复
#include<reg52.h> #define N 2 //亮暗的速率 #define T 800 //PWM的周期 sbit LED1=P1^0; sbit LED2=P1^1; sbit LED3=P1^2; sbit Extio_INT = P1^3; //====================== void pwm(int x) { while(x--); } //====================== void flash1(void) { int t = 0; char f = 0; LED1=1; for(t=1;t<T;t++) { LED1= 0; pwm(t); //Toff,亮的时间 LED1= 1 ; pwm(T-t+100);//Ton,暗的时间 if(!f) t+=N+1;//亮速率较快,模拟呼吸 else t-=N;//暗速率较慢 } for(t=1;t<T;t++) { LED1= 1; pwm(t); //Toff,亮的时间 LED1= 0 ; pwm(T-t+100);//Ton,暗的时间 if(!f) t+=N+1;//亮速率较快,模拟呼吸 else t-=N;//暗速率较慢 } LED1=1; LED2=1; for(t=1;t<T;t++) { LED2= 0; pwm(t); //Toff,亮的时间 LED2= 1 ; pwm(T-t+100);//Ton,暗的时间 if(!f) t+=N+1;//亮速率较快,模拟呼吸 else t-=N;//暗速率较慢 } for(t=1;t<T;t++) { LED2= 1; pwm(t); //Toff,亮的时间 LED2= 0 ; pwm(T-t+100);//Ton,暗的时间 if(!f) t+=N+1;//亮速率较快,模拟呼吸 else t-=N;//暗速率较慢 } LED2=1; delay(5000); LED3=1; for(t=1;t<T;t++) { LED3= 0; pwm(t); //Toff,亮的时间 LED3= 1 ; pwm(T-t+100);//Ton,暗的时间 if(!f) t+=N+1;//亮速率较快,模拟呼吸 else t-=N;//暗速率较慢 } for(t=1;t<T;t++) { LED3= 1; pwm(t); //Toff,亮的时间 LED3= 0 ; pwm(T-t+100);//Ton,暗的时间 if(!f) t+=N+1;//亮速率较快,模拟呼吸 else t-=N;//暗速率较慢 } LED3=1; } void main() { while(1) { if(Extio_INT == 1) flash1(); else { LED1=1; LED2=1; LED3=1; } } } void delay(int xms) { int i,j; for(i=xms;i>0;i--) for(j=120;j>0;j--); }
mangoalx 2015-05-11
  • 打赏
  • 举报
回复
1 用一个LED的呼吸程序 2 加一个count 变量0 - 2计数 3 根据count的值判断点亮三个LED中哪一个

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧