单片机控制的彩色LED流水灯

合集下载

单片机最小系统实现花样流水灯

单片机最小系统实现花样流水灯
2.灯阵从由上顶点开始,同时从两边向下延伸点亮。
3.灯阵从由下顶点开始,以逆时针依次点亮,最后回到下顶点。
4.灯阵从由下顶点开始,以顺时针依次点亮,最后回到下顶点。
5.先奇数灯点亮,然后偶数灯点亮,呈交替状态。
6.所有灯先同时点亮,后同时熄灭,呈闪烁状态。
7.以上六种状态依次运行。
以上七种运行方式, 由外部中断(微动开关) 控制,即一次中断运行状态1, 两次中断运行状态2,… 当遇到第八此中断时,再次从状态1开始。
uchar ID;
uchar cnபைடு நூலகம்=0; uint j;
void main()
{SP=0x50;
P1=0x00;
//P0=0x00;
EA=1;
IT0=1;
EX0=1;
TMOD=0x10; TH1=15536/256;
TL1=15536%256;
ET0=1; TR0=1;
ID=1;cnt=0; while(1){if(ID>7)
功;最后用keil C编程软件及STC-ISP下载软件完成STC89C5单 片机对外围流水灯设计的整体控制。
三、设计需求
整个流水灯系统由按键控制,实现各种状态之间的转换,即按 键第一次压下,流水灯进入到第一种状态;按键第二次压下,流水 灯进入到第二种状态;以此类推。
四、设计材料
序号
器件
数量
功能
1
STC-89C52单片机最小系统板
基于STC-89C51的流水灯的设计与实现
一、设计目的
以STC-80C51单片机最小系统为核心,设计多样式流水灯。掌 握外围LED电路的设计方法,熟练掌握C51软件编程控制方法,实 现LED闪烁功能,最终完成单片机的应用与外围电路的开发任务。

单片机流水灯实验报告

单片机流水灯实验报告

单片机流水灯实验报告本实验旨在通过单片机控制LED灯的亮灭,实现流水灯效果。

通过对实验的设计、搭建和调试,我们可以更深入地理解单片机的工作原理和掌握相应的编程技巧。

实验器材和元件:1. 单片机,我们选用了STC89C52单片机作为控制核心;2. LED灯,我们使用8个LED灯作为实验的输出设备;3. 电阻,为了限流,我们使用了适当的电阻;4. 连接线、面包板等。

实验步骤:1. 搭建电路,首先,我们按照电路图将单片机、LED灯和电阻连接在一起,并将电路连接到电源上;2. 编写程序,接下来,我们使用C语言编写单片机的控制程序,实现LED灯的流水灯效果;3. 烧录程序,将编写好的程序通过烧录器烧录到单片机中;4. 调试程序,将烧录好的单片机连接到电路上,进行程序的调试和验证;5. 完善电路,根据实际调试情况,对电路进行必要的调整和完善,确保LED 灯能够按照预期的流水灯效果工作。

实验结果:经过反复调试和完善,我们成功实现了单片机控制LED灯的流水灯效果。

在程序控制下,8个LED灯按照顺序依次亮起并熄灭,形成了流水灯的效果。

整个实验过程非常顺利,取得了预期的效果。

实验心得:通过本次实验,我们对单片机的控制原理有了更深入的理解,也掌握了一定的C语言编程技巧。

在实验的过程中,我们遇到了一些问题,如LED灯未按预期工作、程序逻辑错误等,但通过分析和调试,最终都得到了解决。

实验不仅提高了我们的动手能力,也培养了我们的分析和解决问题的能力。

总结:本次实验不仅让我们熟悉了单片机的控制方法,也让我们体验了从实验设计到调试完善的整个过程。

通过这次实验,我们不仅学到了专业知识,也培养了动手能力和解决问题的能力。

希望在以后的学习和实践中,能够更好地运用所学知识,不断提升自己的能力。

以上就是本次单片机流水灯实验的报告内容,希望对大家有所帮助。

用单片机控制LED流水灯方案(电路程序全部给出)开关电源方案制作

用单片机控制LED流水灯方案(电路程序全部给出)开关电源方案制作

用单片机控制的LED流水灯设计<电路、程序全部给出)开关电源设计制作学习园地&raquo。

您尚未登录注册 | 社区服务 | 勋章中心 | 帮助 | 首页 | 无图版社区服务银行朋友圈开关电源设计制作学习园地 -> 好好学习-天天向上 -> 用单片机控制的LED流水灯设计<电路、程序全部给出) XML RSS2.0 WAP--> 本页主题: 用单片机控制的LED流水灯设计<电路、程序全部给出)加为IE收藏 | 收藏主题 | 上一主题 | 下一主题pwmdy级别: 电源-1级工程师精华: 0发帖: 212威望: 126 点金钱: 212 RMB贡献值: 0 点注册时间:2009-05-21最后登录:2009-11-22用单片机控制的LED流水灯设计<电路、程序全部给出)1.引言当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。

单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。

目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。

学习单片机的最有效方法就是理论与实践并重,本文笔者用AT89C51单片机自制了一款简易的流水灯,重点介绍了其软件编程方法,以期给单片机初学者以启发,更快地成为单片机领域的优秀人才。

2.硬件组成按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。

AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用AT89C51单片机时无须外扩存储器。

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

单片机控制流水灯

单片机控制流水灯

单片机控制流水灯前言随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯不断变化闪烁。

LED灯由于其丰富的灯光色彩,低廉的造价以及控制简单等特点而得到了广泛的应用,用彩灯来装饰街道和城市建筑物已经成为一种时尚。

但目前市场上各式样的LED灯控制器大多数用全硬件电路实现,电路结构复杂、功能单一,这样一旦制作成品只能按照固定的模式闪亮,不能根据不同场合、不同时间段的需要来调节亮灯时间、模式、闪烁频率等动态参数。

这种彩灯控制器结构往往有芯片过多、电路复杂、功率损耗大等缺点。

此外从功能效果上看,亮灯模式少而且样式单调,缺乏用户可操作性,影响亮灯效果。

因此有必要对现有的彩灯控制器进行改进。

流水灯是一串按一定的规律像流水一样连续闪亮。

流水灯控制是可编程控制器的一个应用,其控制思想在工业控制技术领域也同样适用。

流水灯控制可用多种方法实现,但对现代可编程控制器而言,利用移位寄存器实现最为便利。

通常用左移寄存器实现灯的单方向移动;用双向移位寄存器实现灯的双向移动。

本案例利用价格低廉的AT89C52系列单片机控制基色LED灯泡从而实现丰富的变化。

目录前言 (1)1、课程设计的目的和要求 (3)1.1 设计目的 (3)1.2 设计要求 (3)2、设计方案选择 (4)3、硬件设计 (4)3.1 设计思路 (4)3.2 流水灯电路原理图 (4)3.2.1元件清单 (5)3.2.2 硬件电路模块分析 (6)3.3 主要元件说明 (9)3.3.3 振荡器特性 (12)3.3.4 芯片擦除 (12)4、软件设计 (12)4.1 主程序设计 (12)4.2 程序流程图 (15)5、使用keil、proteus软件调试仿真说明 (16)5.1仿真过程 (16)5.2仿真结果 (16)6、结束语 (16)7、参考文献 (17)1、课程设计的目的和要求1.1 设计目的近年来随着科技的发展,单片机的应用正在不断走向深入,同时带动传统控制检测日新月异更新,在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象点的软件结合,加以完善。

基于单片机的LED流水彩灯设计

基于单片机的LED流水彩灯设计

第1章概述近几年来,彩灯对于美化、亮化城市有着不可轻视的重要工作。

因此作为城市装饰的彩灯需求量越来越大,对与彩灯的技术和花样也越来越高。

但传统的彩灯控制电路一般是由数字电路组成,这种彩灯控制器电路结构复杂、成本较高、功率损耗大,此外从功能效果上看,彩灯模式少而且样式单调,缺乏用户可操作性,影响亮灯效果。

因此有必要对现有的彩灯控制器进行改进。

然而单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。

LED彩灯具有成本低、发光纯度高、发光热量小、耗电量低、超长寿命的特点。

所以利用单片机作LED彩灯控制,不仅是使控制花样、路数大大增加,成本也很低,而且对环境能源没有污染,有着很大的发展前景。

本方案是一种基于AT-89C51单片机的彩灯控制方案,实现对LED彩灯的控制。

主要以AT-89C51单片机作为主控核心与发光二极管、晶振、复位、电源等组成电路,利用软件编辑实现彩灯流水灯的效果。

第2章方案设计2.1设计任务(1)共有红、绿、蓝3色彩灯各8个,要求按一定顺序和时间关系运行:红色发光二极管由弱到强—>绿色发光二极管由弱到强—>蓝色发光二极管由弱到强。

(2)利用三基色原理,控制每次点亮红色发光二极管,绿色发光二极管,蓝色发光二极管的数目,实现黄色,紫色,青色。

(3)控制不同颜色发光二极管的数目,实现花样彩灯。

(4)编写程序代码。

(5)程序分析与调试。

2.2工程方案按照设计任务要求,红,绿,蓝光由弱到强,每个颜色用8个发光二极管,在程序控制下,先亮一个,再亮两个,再亮三个,慢慢的直到最后全亮,就能看到由弱到强的现象。

如果同一颜色使用更多的发光二极管,显示效果会更柔和。

要实现黄色,紫色,青色光,只能根据三基色原理进行合成。

所谓三基色是指红,绿,蓝三色,人眼对红,绿,蓝最为敏感,大多数可以通过红,绿,蓝3种颜色按照不同的比例合成产生。

同时,绝大多数单色光也可以分解成红绿蓝三种光。

单片机控制流水灯

单片机控制流水灯

单片机应用技术
1
28
2
27
4K
1
40
2
39
3
38
4
37
3
26
4
25
5
24
6 7
RAM
23 22
8 6264 21
9
20
10
19
11
18
12
17
13
16
14
15
5
36
存 储
6 7
片80内31
35 34
8 R8O75M1 33
9
32

10 11
8051
31 30
12
29
13 89C51 28
14 片内 27
软件设计
单片机应用技术
思索一下程序怎样编写,首先看电路图中旳8个单色灯, 从上到下分别是L0~L7,我们首先应该点亮L0,然后熄 灭L0;接着点亮L1,然后熄灭L1,以此类推,最终点亮 L7,再熄灭L7,周而复使继续下去。
单片机应用技术
详细程序如下:
#include “reg51.h”
void delay()
0FFFH
0FFEH ...
002BH
中断5
0023H
中断4
001BH
中断3
0013H
中断2
000BH
(PC)
0003H 0002H 0001H 0000H
中断1
8位
串行口中断
定时器1中断
外部中断1
定时器0中断
外部中断0 0000H是程序执行旳起始单元, 在这三个单元存储一条 无条件转移指令
程序存储器资源分布

单片机控制左右来回循环的流水灯-推荐下载

单片机控制左右来回循环的流水灯-推荐下载

#include<intrins.h>
unsigned char temp;
LED 的 P1 口赋值
int a;
void delay(void);
void main()
{
temp=0xfe;
P1=temp;
while(1)
{
for(a=0;a<7;a++)
{
}
//定义字符变量 temp,temp 左移或右移并给连接
//定义延迟函数 delay()
//给 temp 赋初值
//temp 赋值给 P1 口,第一个 LED(红色)点亮
//主程序,括号中的程序将一直循环
//左移部分,LED 从左到右依次点亮
temp=_crol_(temp,1); //_crol_语句控制变量 temp 左移
delay();
P1=temp;
左右来回循环的流水灯
设计要求 8 个发光二极管 LED0~LED7 经限流电阻分别接至 P1 口的 P1.0~P1.7 引脚 上,阳极共同接高电平。编程实现制作左右来回循环的节日彩灯,显示规律如 下图所示。
题 37 图 节日彩灯的花样显示的规律
为了使显示效果更加绚丽多彩,P1 端口 8 个引脚分别接有不同颜色的发光
程序中设置中Leabharlann 变量 temp 用来给 P1 口赋值,命令_crol_和_cror_用于使 temp 左移或右
移,例如当 temp=11111110B 时,执行_crol_(temp,1)之后 temp=11111101,应用此两条语句
必须把头文件<intrins.h>包含进来。
全部代码如下:
#include<reg51.h>

用AT89C51单片机实现8个彩色LED发光的流水灯电路

用AT89C51单片机实现8个彩色LED发光的流水灯电路

用 AT89C51单片机实现 8个彩色 LED发光的流水灯电路1.摘要:流水灯是常见的装饰,常见于舞台等场合,本设计主要使用AT89C51芯片,利用P1的8个端口通过74LS373驱动,连接8个发光二极管,通过P1.0到P1.7值的控制,使8个彩色LED依次发光,以达到显示的效果。

二、设计任务和要求用AT89C51芯片,设计一个能控制8个发光二极管轮流闪的流水灯电路。

四、硬件电路设计及描述本设计主要使用AT89C51芯片,利用P1的8个端口通过74LS373驱动,连接8个发光二极管,通过P1.0到P1.7值的控制,使8个彩色LED轮流亮灭,以达到显示的效果。

1.软件设计思路及描述主程序设计思路为,开始时点亮一个灯,其余全灭。

然后执行左移,8个灯依次点亮。

“RLA A”是一条左移指令,它的用途是把A累加器中的值循环左移。

设A=1111 1110,则执行一次指令后,A累加器中的值就变为1111 1101,执行第二次后就变为1111 1011,也就是各位数字不断向左移动,而最右一位由最左一位移入。

1.设计流程图1.编辑源程序将原代码生成一个后缀为.asm的文件,点击确定后,打开这一选项即可添加源程序代码。

源程序:ORG 0000HLJMP STARTORG 30HSTART:MOV A,#0FEHLOOP:MOV P1,ARL ALCALL DELAYLJMP LOOPDELAY:MOV R7,#250D1:MOV R6 #250D2:DJNZ R6,$DJNZ R7,D1RETEND八、软件编译,载入,调试1、保存文本内容后,点击源代码菜单下的全部编译,即可对程序进行编译,生成以.Hes后缀的文件。

2、程序载入CPU3、调试:程序加载完成后,点击按钮运行调试仿真。

九、运行仿真运行仿真后出现效果如下图:ledD1、D2、D3、D4、D5、D6、D7、D8依次点亮。

十、结与体会通过这次课程设计,不仅加深了对单片机控制系统及其语言的应用与理解,锻炼了自己这方面的能力,而且还学到了不少新东西,使自己的专业知识、专业技能有所提高。

单片机-流水灯的程序

单片机-流水灯的程序
程序分析:
#include<reg51.h> sbit led1=P2^0; sbit led2=P2^1; sbit led3=P2^2; sbit led4=P2^3; sbit led5=P2^4; sbit led6=P2^5; sbit led7=P2^6; sbit led8=P2^7; void delay (unsigned char x);
其中void表示这 个函数执行完后 不返回任何数据。 ()内无任何东西, 所以这是个无参 数的函数。 Delayms是函数名。
1
2
3
4
5
6
2)带参数函数的用位定义实现流水灯(8位二极管循环点亮)
编程思路: a) 先点亮第一盏灯,延时点亮第二盏, 依次延时8盏灯全部点亮。 b) 当8盏灯全部点亮时,熄灭8盏灯。 c) 进入循环。
循环移动
循环左移 最高位移入最低位,其它依次向左移动一位。C语言中 没有专门的指令,通过移位指令和简单逻辑运算来实现循环左移,或直接利用C51库中自带的函数-crol-实现。
循环右移 最低位移入最高位,其它位依次向右移一位,C语言中没有专门的指令,通过移位指令与简单的逻辑运算可以实现循环右移,或专门利用C51库中自带函数-cror-实现
方法二:利用总线控制实现流水灯(8位二极管循环点亮)
相关知识 二进制和十六进制之间的相互转换
二进制
十六进制
二进制
十六进制
0000
0
0100
4
0001
1
0101
5
0010
2
0110
6
0011
3
0111
7
二进制
十六进制
二进制

单片机控制流水灯

单片机控制流水灯

程序框架设计
01
主程序框架
主程序是单片机程序的核心,负 责程序的启动、初始化、中断处 理等任务。
02
中断服务程序框架
03
功能模块框架
中断服务程序用于处理外部中断 事件,如按键按下、定时器溢出 等。
功能模块是实现特定功能的程序 块,如LED灯控制、定时器计数 等。
程序功能模块设计
LED灯控制模块
该模块负责控制LED灯的亮灭状态, 可以通过编程实现流水灯效果。
物联网技术的应用
未来,单片机可能会更多地应用于物联网领域, 与互联网结合,实现更广泛的控制和应用。
3
人工智能与单片机的结合
未来,人工智能技术可能会与单片机结合,实现 更智能的控制和应用。
THANKS
[ 感谢观看 ]
02
包括主程序和中断服务程序,主程序负责循环控制LED灯,中断
服务程序负责处理外部中断。
调试过程
03
通过串口调试工具或示波器等工具对程序进行调试,确保程序
正确运行。
实际运行效果展示
流水灯效果
通过单片机控制LED灯的亮灭,实现流水灯效果 。
速度控制
通过程序延时控制LED灯亮灭的时间间隔,实现 流水灯的速度变化。
硬件连接
将单片机与LED灯连接,通过GPIO口控制LED灯的亮灭。
控制逻辑
通过编写程序控制单片机GPIO口的输出,实现LED灯的顺序亮 灭,形成流水灯效果。
延时控制
通过程序延时控制LED灯亮灭的时间间隔,实现流水灯的速度变 化。
控制程序编写及调试
编程语言
01
使用C语言或汇编语言编写单片机程序。
程序结构
电源管理优化
采用高效的电源管理方案,降 低流水灯的能耗。

LED流水灯单片机的设计

LED流水灯单片机的设计

LED流水灯单片机的设计引言:设计目标:设计一个能够实现LED流水灯效果的电路,使用单片机控制灯光的亮灭和流动速度,并通过按键控制流水灯的运行。

设计过程:1.硬件设计:1.1 选择LED:选择合适的LED灯珠,通常使用常见的5mm圆形LED 灯。

1.2连接方式:将多个LED按照串联或并联方式连接,以形成流水灯效果。

1.3电流限制:通过串联合适的电阻,将电流限制在每个LED的额定值以下。

2.单片机选型:2.1功能要求:选择具备足够的I/O管脚数量,用于控制LED的亮灭和流动速度,以及接受按键输入的单片机。

2.2仿真和编程支持:选择具备仿真和编程支持的单片机,以方便调试和开发。

3.单片机与LED的连接:3.1端口选择:选择合适的I/O口进行连接,根据LED连接方式决定使用串口或并口进行连接。

3.2串行或并行输出:设置相应的单片机端口为输出模式,并将其与LED连接。

4.软件设计:4.1初始化:对单片机进行初始化设置,包括设置I/O口状态和初始化计时器。

4.2流水灯特效:使用循环控制语句控制LED流动的方向和速度,并通过改变LED的亮灭状态实现不同的灯光效果。

4.3按键控制:使用中断或轮询方式检测按键输入,并通过控制流水灯的运行状态来实现按键控制功能。

5.测试和调试:5.1仿真调试:使用仿真软件对设计的电路和代码进行调试,确保运行正常。

5.2硬件调试:将设计的电路和程序烧入实际的单片机和电路板中,通过观察和测试,确保流水灯的特效和按键控制功能正常。

总结:LED流水灯单片机设计是一个简单且具有实践意义的项目,通过设计和控制LED流水灯,可以提高对单片机的理解和熟练程度。

本文介绍了设计流程和关键步骤,希望对读者有所帮助。

通过本项目的实践,可以进一步扩展其他LED灯光效果的设计和控制。

单片机c语言编程控制流水灯

单片机c语言编程控制流水灯

说了这么多了,相信你也看了很多资料了,手头应该也有必备的工具了吧!(不要忘了上面讲过几个条件的哦)。

那个单片机究竟有什么功能和作用呢?先不要着急!接下来让我们点亮一个LED(搞电子的应该知道LED是什么吧^_^)我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机上接上最少的外围电路元件让单片机工作。

一般只须连接晶体、VCC、GND、RST即可,一般情况下,AT89C51的31脚须接高电平。

#include<reg51.h> //头文件定义。

或用#include<at89x51.h>其具体的区别在于:后者定义了更多的地址空间。

//在Keil安装文件夹中,找到相应的文件,比较一下便知!sbit P1_0 = P1 ^ 0; //定义管脚void main (void){while(1){P1_0 = 0;//低电平有效,如果把LED反过来接那么就是高电平有效}}就那么简单,我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。

因为我们把LED的正通过电阻接至VCC。

P1_0 = 0; 类似与C语言中的赋值语句,即把0 赋给单片机的P1_0引脚,让它输出相应的电平。

那么这样就能达到了我们预先的要求了。

while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。

如果我们要试着点亮其他的LED,也类似上述语句。

这里就不再讲了。

点亮了几个LED后,是不是让我们联想到了繁华的街区上流动的彩灯。

我们是不是也可以让几个LED依次按顺序亮呢?答案是肯定的!其实显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。

假设我们有8个LED分别接在P1口的8个引脚上。

硬件连接,在P1_1--P1_7上再接7个LED即可。

例程如下:#include<reg51.h>sbit P1_0 = P1 ^ 0;sbit P1_1 = P1 ^ 1;sbit P1_2 = P1 ^ 2;sbit P1_3 = P1 ^ 3;sbit P1_4 = P1 ^ 4;sbit P1_5 = P1 ^ 5;sbit P1_6 = P1 ^ 6;sbit P1_7 = P1 ^ 7;void Delay(unsigned char a){unsigned char i;while( --a != 0){for(i = 0; i < 125; i++); //一个; 表示空语句,CPU空转。

51单片机的七彩LED灯渐变调光调色程序

51单片机的七彩LED灯渐变调光调色程序

51单片机的七彩LED灯渐变调光调色程序//------------------------------------------------------------------------------------// Main.c//------------------------------------------------------------------------------------// Copyright (C) 2013 Shenyang JYXD.// WEN BO RUI// Tool chain: KEIL Full 'c'////#pragma CD OE DB SB // Compilation directives#include<reg2051.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuint Period; //Period刷新周期uint PWM;uint Pulse; //脉冲个数uchar Speed; //速度变量uchar count;uint excount;bit Gra; //渐变/跳变总控制位bit Gra7; //七彩渐亮渐灭控制位bit Gra3; //红绿蓝渐亮渐灭控制位bit BP; //亮到暗,暗到亮转换位bit LEDdelay ; //LED定时到标志位sbit key1 = P3^1; //花样组合键1sbit key2 = P3^0; //花样组合键2sbit key3 = P3^5; //速度组合键1sbit key4 = P3^4; //速度组合键2ucharled1[12]={0x10,0x030,0x20,0x60,0x40,0x50,0x70,0x50,0x40,0x60, 0x20,0x30};//红、黄、绿、青、蓝、粉、白、粉、蓝、青、绿、黄ucharled2[24]={0x10,0x00,0x30,0x00,0x20,0x00,0x60,0x00,0x40,0x00,0 x50,0x00,0x70,0x00,0x50,0x00,0x40,0x00,0x60,0x00,0x20,0x00,0x30,0x 00};uchar led3[3]={0x10,0x20,0x40}; //红、绿、蓝uchar ledcount,ledcount1;//*********************************************************** //以下定义函数// 1毫秒延时函数delayms();花样及速度扫描函数keyscan();//*********************************************************** /*void delayms(unsigned int ms){unsigned char i ;while(ms--){for(i = 0 ; i < 120 ; i++) ;}}*/void Pattern1(); //花样1函数--------->跳变无灭灯过程void Pattern2(); //花样2函数--------->跳变有灭灯过程void Pattern34();void keyscan(){if((key4==1)&&(key3==1)) {Speed = 20;Period = 25;} //预设4种速度200MSif((key4==0)&&(key3==1)) {Speed = 50;Period = 50;} //500MSif((key4==1)&&(key3==0)) {Speed = 100;Period = 100;} //1Sif((key4==0)&&(key3==0)) {Speed = 150;Period = 200;} //1.5Sif((key2==1)&&(key1==1)) {ledcount1 = 0;Pattern1();} //预设4种花样if((key2==0)&&(key1==1)) {ledcount1 = 0;Pattern2();}if((key2==1)&&(key1==0)) {ledcount = 0;Gra3 = 1;Pattern34();}if((key2==0)&&(key1==0)) {ledcount = 0;Gra7 = 1;Pattern34();}}void value(){if(Speed == 20) PWM = Pulse*8;if(Speed == 50) PWM = Pulse*4; //脉冲个数if(Speed == 100)PWM = Pulse*2;if(Speed == 150)PWM = Pulse;}void Reset(void){unsigned char code rst[ ]={0xe4,0xc0,0xe0,0xc0,0xe0,0x32};(*((void (*)(void))(rst)))();}void main(){_nop_ ();_nop_ ();_nop_ ();P1 = 0;TMOD = 0x11; //11.0592M晶振的10ms定时初值(100分之一秒)TH0 = 0x0db;TL0 = 0x0ff;TH1 = 0x0ff; //0.05ms(20000分之一秒)TL1 = 0x0D1;EA = 1; //开启总中断允许ET0 = 1; //允许T0定时器中断ET1 = 1; //允许T1定时器中断TR0 = 1; //开启T0定时器EX0=1; //开外部中断0IT0=1; //下降沿触发while(1){keyscan();}}//************************************************************* ************//Pattern1() 花样函数1-------------跳变无灭灯过程//************************************************************* ************void Pattern1(){//keyscan();Gra = 0; //跳变位=0if(LEDdelay){LEDdelay = 0;P1 = led1[ledcount];ledcount++;if(ledcount>11){ledcount = 0;}}}//************************************************************* **********//Pattern2() 花样函数2-------------跳变有灭灯过程//************************************************************* **********void Pattern2(){//keyscan();Gra = 0;if(LEDdelay){LEDdelay = 0;P1 = led2[ledcount];ledcount++;if(ledcount>23){ledcount = 0;}}}//************************************************************* **********//Pattern3() 花样函数3-------------3彩渐变//************************************************************* **********/*void Pattern3(){keyscan();if(Speed == 20) Period = 25;if(Speed == 50) Period = 50;if(Speed == 100)Period = 100;if(Speed == 150)Period = 200;Gra = 1;Gra3 = 1;}*///************************************************************* **********//Pattern4() 花样函数4-------------7彩渐变//************************************************************* **********void Pattern34(){Gra = 1; //渐变位 = 1}/*********************************************************/// 定时器0中断服务程序/*********************************************************/void time0(void) interrupt 1{TR1 =0;TF0 =0;TH0=0xdb; //重新写入初值TL0=0xff;if(!Gra) //执行跳变程序{count ++;if(count > Speed){LEDdelay = 1;count = 0;}}if(Gra){TR1 = 1; //开启TR1;if(!BP) //{if(Gra7){P1 = led1[ledcount1]; //10ms到,亮相应的LED }if(Gra3){P1 = led3[ledcount1]; //10ms到,亮相应的LED }Pulse++;value();if(Pulse >= Period){Pulse = Period;BP = 1; //一个周期完成转换模式}}if(BP){if(Gra7){P1 = led1[ledcount1]; //10ms到,亮相应的LED }if(Gra3){P1 = led3[ledcount1]; //10ms到,亮相应的LED }value();Pulse--; //脉冲个数if(Pulse == 0){Pulse = 0;BP = 0; //一个周期完成转换模式ledcount1++;if(Gra7){if(ledcount1 > 11){ledcount1 = 0;}Gra7 = 0;}if(Gra3){if(ledcount1 > 2){ledcount1 = 0;}Gra3 = 0;}}}}}/*********************************************************/ // 定时器1中断服务程序/*********************************************************/ void timer1() interrupt 3{PWM --;TH1 = 0xff; //0.05ms(20000分之一秒)TL1 = 0xD1;if(PWM == 0){P1 = 0;TR1 = 0;}}/*********************************************************/ // 外部中断0中断服务程序下降沿触发/*********************************************************/ void extern0(void) interrupt 0{IE0 = 0; // 清标志位excount++;if(excount>50) // 50大约3秒{EA = 0;//P1_5 = 1;excount = 0;Reset();}}。

单片机控制LED流水灯从中间向两边

单片机控制LED流水灯从中间向两边

单片机控制LED流水灯从中间向两边,从两边向中间这个就是把先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;不过这个程序实现的应该是这样的先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动;再从中间往两边流动;#include< reg52.h>#include< intrins.h>#define uint unsigned int#define uchar unsigned charvoid delay();void main(){ uchar temp,temp1,temp2,a,b;P3=0xff;while(1){ for(b=3;b>0;b--){ temp=0xaa;P1=temp;delay();temp=0x55;P1=temp;delay();}for(a=3;a>0;a--){ temp=0xfe;for(b=7;b>0;b--){ P1=temp;temp=_crol_(temp,1);delay();P1=temp;delay();}}temp1=0xfe;temp2=0x7f;for(a=8;a>0;a--){temp=temp1&temp2;P1=temp;delay();temp1=_crol_(temp1,1);temp2=_cror_(temp2,1);}}void delay(){ uint a,b;for(a=100;a>0;a--)for(b=600;b>0;b--);}程序实现的第2种方法:下面是 51hei单片机12群里的朋友木信大侠提出的,实现单片机led流水灯从中间向两边,从两边向中间的效果,下面的程序就是实现思路,这个是直接调用,应该明白吧,数组那其实也可以改一下,如采用一维数组,在多次调用;也可以采用二维数组。

用单片机实现流水灯的控制设计说明书

用单片机实现流水灯的控制设计说明书

用单片机实现流水灯的控制设计1.引言当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被智能控制系统所取代。

单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。

目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。

学习单片机的最有效方法就是理论与实践并重,本设计课题是流水灯的控制设计,流水灯是一串按一定的规律像流水一样连续闪亮。

流水灯控制是可编程控制器的一个应用,其控制思想在工业控制技术领域也同样适用。

2.硬件组成2.1 总体方案设计分析要求用8255的A口和B口做为输出,接16个发光二极管,从而实现16位流水灯的显示效果,基本的界限可如下图A所示,在C口的地两位接两个开关,实现两个扩展功能的控制。

i:基本流水灯显示电路A口和B口两个端口不能同时复制,从而在试验中可以用BX进行需要复制的数据的存储,因为BX可以分从BH BL两个部分进行独立的操作,在本次试验中用BH对A口进行赋值,用BL对B口进行赋值,通过演示一段时间再对BH BL进行移位和输出,实现流水灯的效果。

ii:正反方向选择把PC.0口接在开关上,编写程序对C端口的数据进行读取,并进行判断,使得当PC.0为高电平的时候则灯进行左移,同时B口与A口相反。

iii:快慢速度控制把PC.1口接在开关上,编写程序对C端口的数据进行读取,并进行判断,使得当PC.1为高电平的时候则延时的时间缩短,使得流水灯的流水速度加快,低电平的时候则进行延时的时间变长,使得流水灯的流水速度加快。

3硬件原理设计A该模块的WR.RD分别练到PC总线接口模块的XIOW和XIORB该模块的数据(AD0~AD7)、地址线(A0~A7)分别连到PC总线接口模块的数据(D0~D7)、地址线(A0~A7)C 8255模块选通线CA连到PC总线接口模块的IOY3D 8255的PA0~PA7连到发光二极管的L1~L8;8255的PB0~PB7连到发光二极管的L9~L16E 8255的PC0 PC1分别练到开关 K0 K1F 软件流程框图及程序清单按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。

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

单片机控制的彩色LED灯
一、总述
单片机可以通过对其程序的编写,实现其信号
I/O口电势高(5V)低(0V)的自由控制,而流
水灯是其最简单的一种应用。

如左图,I/O口电势升高后就可点亮LED灯,反
之则熄灭。

若使多个I/O口的电势成一定规律变化,对应的LED灯的规律点亮就形成了,美丽的流水灯。

总构思图
二、电路说明
供电系统:
所有工作的电子元件,均需供电,电池辅助7805/2940芯片可实现对微电路的供电。

电路中所有的VCC均为5V正电势,连接OUTPUT端。

电路所有接地均接电池的负极。

电池的正极,接INPUT端。

管脚说明:2940芯片的INPUT为1脚,GND为2脚,OUTPUT为3脚。

(详见附页2:元件说明)
单片机最小系统:
单片机工作时需要供电、时钟等辅助结构,最小系统中,包含的就是单片机工作最基本的元件。

P0.0~P0.5为信号输出口,用于控制流水灯。

BM为拨码开关。

(其他元件见附页2:元件说明)
LED流水灯与驱动部分
现有两种LED接法,分别可实现两种LED的闪烁方式。

1.直连式(8种)闪烁方式:多样
将LED的负极接入单片机的I/O口,另一端串联200欧电阻再接VCC即可。

2.芯片驱动:每次只能亮一个。

A0、A1、A2接单片机的信号输出口I/0:P0.0~P0.5。

一个74HC138芯片可以驱动8个LED灯(Y0~Y7),只需三个I/O口,所以使用74HC138芯片的作用即为:减少编程复杂程度。

附页1:
单片机控制流水灯材料清单。

相关文档
最新文档