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

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();
}
}


我试过在中间加上延时 但是就直接变成流水灯了。求大神指导
...全文
1334 2 打赏 收藏 转发到动态 举报
写回复
用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中哪一个
目 录 一、前 言…………………………………………………………… (1) 1.1课题简介………………………………………………………… (1) 1.2设计目的…………………………………………………………… (1) 二、总体设计……………………………………………………………(2) 2.1设计思路…………………………………………………………… (2) 2.2原件清单…………………………………………………………… (2) 三、硬件设计…………………………………………………………… (3) 3.1AT89C51…………………………………………………………… (3) 3.2系统框图 ……………………………………………………………(5) 3.3程序框图 ……………………………………………………………(5)四、软件设计……………………………………………………………(5) 4.1硬件设计…………………………………………………………… (6) 4.2单片机时钟电………………………………………………………(6) 4.3复位电路 ……………………………………………………………(6)4.4控制电路 ……………………………………………………………(7) 4.5工作电路 ……………………………………………………………(7) 五、软件调试……………………………………………………………(8) 5.1设计要求 ……………………………………………………………(8) 5.2软件的流程图………………………………………………………(9) 5.3程序设计 ……………………………………………………………(9) 六、软件调试……………………………………………………………(11) 七、心得体会……………………………………………………………(12) 八、参考文献……………………………………………………………(13) 第一章 前言 1.1 课题简介 单片机全称叫单片微型计算机(Single Chip Microcomputer),是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处 理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时 器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转 换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。  目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导 弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过 程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统, 录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开 单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械以及各种智能机械了。 单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理 及过程控制等领域,大致可分如下几个范畴: 1.在智能仪器仪表上的应用 :,例如精密的测量设备 2.在工业控制中的应用 :用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管 理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。 3.在家用电器中的应用可从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、 列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等 。 5.单片机在医用设备领域中的应用 :例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。 6.在各种大型电器中的模块化应用 :如音乐集成单片机,看似简单的功能,微缩在纯电子芯片中(有别于磁带机的原理) ,就需要复杂的类似于计算机的原理。 本设计着重在于分析计算器软件和开发过程中的环节和步骤,并从实践经验出发对计算 器设计做了详细的分析和研究。本系统就是充分利用了8051芯片的I/O引脚。系统以采用 MCS- 51系列单片机Intel8051为中心器件来设计LED流水灯系统,实现8个LED霓虹灯的左、右 循环显示,并实现循环的速度可调。 1.2 设计目的 1.学习基本理论在实践中综合运用的初步经验,掌握电路设计的基本方法、设计步骤, 培养综合设计与调试能力。 2.掌握汇编语言程序设计方法。 3.培养实践技能,提高分析和解决实际问题的能力。 1.3 设计任务及要求 1.彩灯用8个发光二极管代替。 2.电路具有控制彩灯点亮右移、左移、全亮及全灭等功能(用按键切换彩灯状态) 3、彩灯两点移动时间间隔为0.5秒。 二 、总体设计思路 2.1设计思路 本课题使用AT89C51单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有 八个发光二极管的单片机最小应用系统,即为由发光二极

27,372

社区成员

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

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