8LED花样流水灯编程与硬件设计详解

需积分: 10 1 下载量 29 浏览量 更新于2024-08-20 收藏 830KB PPT 举报
花样流水灯闪烁项目是一个基于单片机技术的实际应用,它利用8个LED灯进行动态闪烁,旨在增强商铺广告效果,提升城市景观美感,并引导消费者。本项目主要分为以下几个部分: 1. **项目需求**: - 目标是在商铺建筑的棱角处安装LED流水灯,通过循环闪烁吸引注意力,用于广告宣传和环境美化。 - 具体案例是设计一个包含8个LED灯的广告牌流水灯项目。 2. **工作原理分析**: - 项目的核心是单片机控制LED灯的开关,采用循环模式:LED1点亮时,其他7个灯熄灭;LED2点亮时,LED1熄灭,如此类推,形成流水效果。 - 水流灯电路由单片机最小系统(包括单片机、晶振电路和复位电路)、电源电路以及LED灯电路组成。 3. **硬件电路设计**: - 使用11.0592MHz的晶振电路,外接30pF的电容以稳定时钟。 - 复位电路采用手动复位,通过单片机的RST引脚,持续高电平至少两个机器周期触发复位。 - LED灯与470欧姆的限流电阻串联,以确保在5V供电下,LED电流保持在6mA到10mA之间,防止过度电流导致LED损坏。 4. **软件程序设计**: - 主要代码使用了`reg51.h`和`intrins.h`头文件,定义了主函数和延时函数。 - 在主函数中,首先将所有LED灯关闭,然后逐个点亮LED,通过循环左移操作(`_crol_()`函数)实现流水灯的效果,程序进入无限循环直到断电。 5. **系统调试与总结**: - 项目的实施涉及硬件连接和软件编程的双重调试,确保流水灯按照预期规律闪烁。 - 完成项目后,需要对调试结果进行总结,评估系统性能并可能对设计进行优化。 整个项目不仅锻炼了编程技能,还涉及电子元件的选择、电路设计和实际应用,对于理解和掌握单片机控制基础有很高的实践价值。
2013-07-05 上传
花样最多 8 灯流水灯代码 #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include /******************************************************************/ /* 花样表格 */ /******************************************************************/ unsigned char code seg[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0x00,0,0x55,0x55,0xaa,0xaa};//rom允许情况可以无限添加 /******************************************************************/ /* 延时函数 */ /******************************************************************/ void delay(unsigned int cnt)//简易延时 { while(--cnt); } /******************************************************************/ /* 主函数 */ /******************************************************************/ main() { unsigned char i; while(1) { P2=0xFE; //第一个LED亮 for(i=0;i<8;i++) { delay(10000); P2 <<=1; } P2=0x7F; //第七个LED亮 for(i=0;i>=1; } P2=0xFE; //第一个LED亮 for(i=0;i<8;i++) { delay(10000); P2 <<=1; P2 |=0x01; } P2=0x7F; //第七个LED亮 for(i=0;i>=1; P2 |=0x80; } /*下面通过查表方法获得花样参数*/ for(i=0;i<16;i++)//查表可以简单的显示各种花样 实用性更强 { delay(20000); P2=seg[i]; } } } 补充: 再给你一个流星雨灯,这个程序有点暴力。。。 #include #include #define uint unsigned int void delay(uint n) { while(n--); } main() { mmm:P1=0xfe; delay(15000); while(1) { P1=P1<<1; delay(15000); if(P1==0x00) {P1=0x01;delay(15000);goto mm;} } mm: while(1) { P1=_crol_(P1,1)+1; delay(15000); if(P1==0xff) {delay(15000);goto mmm;} } }