基于单片机设计的十六路流水灯电路原理图
单片机控制的彩色LED流水灯
单片机控制的彩色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:
单片机控制流水灯材料清单。
基于单片机AT89C51控制的键控流水灯_课程设计报告
图3-5流水灯模块图
3.3
图3-6 键控流水灯图
4
#include<reg51.h>
#define smg1 P0
#definelsd1P1
#define smg2P2
unsignedinti=1,u=7,j,n,c,k,h=7,s=1;
voidsjms3(void);
voidsjms4(void);
voidsjms5(void);
voidmsms1(void);
voidmsms2(void);
voidmsms3(void);
voidmsms4(void);
voidmsms5(void);
voidzd1(void);
voidzd2(void);
3.2.5
发光二极管就是LED,是一种由磷化镓等半导体材料制成的、能直接将电能转换成光能的发光显示器件。当其内部有一定电流通过时,就是发光。发光二极管具有功耗低、体积小、可靠性高、寿命长和相应快等优点。
流水灯模块采用16个LED发光二极管,通过代码的编写,实现五种流水移动,其中电阻的作用是保护二极管,向它提供较小的电流,防止二极管因为电流过大而烧毁。
1
单片机控制系统能够取代以前利用复杂电子线路或者数字电路构成的控制系统,可以软件控制来实现,并能够实现智能化。现在的单片机的控制范畴无所不在,例如通信产品、家用电器、智能仪器仪表、过程控制和专用控制装置等等,单片机的应用领域越来越广泛。
2
2.1
随着经济的发展、科技的突飞猛进,芯片业得到了迅速的发展,是单片机技术在各种民用和工业控制等领域得到更广泛的应用。单片机凭借其低成本、高性能的不可代替优势已经成为了微电脑 控制的主力军。学习单片机的有效方法是将理论与实践并重,因此通过对单片机可控流水灯的设计和研究,鼓励学生在熟悉基本原理的前提下,与实际应用相联系,提出自己的方案,来完善设计,使得他们更好的掌握单片机的应用。
流水灯实验
Liaoning Normal University单片机实验项目题目:流水彩灯学院:物理与电子技术学院专业:电子信息工程班级序号:03学号:2009112102005920091121020019学生名称:程磊尹元元指导老师:姜春华2011年12月流水灯的设计与制作一、实验要求:基于单片机做开始时P1口全亮,然后做顺时针一灯亮,顺时针两灯同时亮,顺时针三灯同时亮,顺时针四灯同时亮,顺时针五灯同时亮,顺时针六灯同时亮,顺时针七灯同时亮,顺时针八灯同时亮,顺时针亮,一个一个亮,偶地址依次亮,奇地址一次亮,两口灯同时亮,两口灯顺时针点亮,四口灯同时点亮,顺时针四灯同时亮,依次灭灯,并结束程序。
L1-L8分别接在单片机的p1.0-p1.7接口上,输出“1”时,发光二极管亮;输出“0”时,发光二极管灭;用74LS273作为驱动。
二、设计构思1、硬件电路由单片机的最小系统(包括时钟电路、复位电路)和使用P1口作为输出。
2、软件部分采用查表法实现设计的要求。
将程序输出至P1口,这样就可以实现“流水”效果。
三、实验器材:PC机(一台)PCB板(一块)330Ω电阻(八只)10K电阻(一只)LED发光二极管(16只)12MHZ晶振一块25V 10μF电容(一只)30PF瓷片电容(两只)单片机IC座(一块)AT89C51单片机芯片(一块)74LS273(一片)四脚开关(一个)四、实验过程1、设计硬件电路的原理图及PCB图本实验中发光二极管采用共阴接法,另一端通过驱动电路74LS273接到单片机的P1口,按下复位键时所有的发光二极管同时熄灭。
十六个发光二极管被摆放成一个花的形状,每个驱动电路的接口接2只发光二极管。
2、软件设计——编程根据硬件电路图及预期实验效果,使用汇编语言,C语言编写程序。
程序编好后,使用韦福进行编译,检查是否有语法错误。
如没有错误,则将程序转入AT89C51单片机中。
程序对应的实验现象:上电开始时P1口全亮,然后做顺时针一灯亮,顺时针两灯同时亮,顺时针三灯同时亮,顺时针四灯同时亮,顺时针五灯同时亮,顺时针六灯同时亮,顺时针七灯同时亮,顺时针八灯同时亮,顺时针亮,一个一个亮,偶地址依次亮,奇地址一次亮,两口灯同时亮,两口灯顺时针点亮,四口灯同时点亮,顺时针四灯同时亮,依次灭灯,并结束程序。
单片机课程设计-16个LED灯的多样显示控制器
单片机课程设计-16个LED灯的多样显示控制器信息工程学院课程设计报告设计题目: 节日彩灯控制器设计名称: 电子信息工程专业综合课程设计(1)班级:姓名:学号:设计时间: .06.22指导教师:评语:评阅成绩: 评阅教师:目录一、课程设计的性质和目的..................................... 错误!未定义书签。
二、课程设计的要求 ................................................ 错误!未定义书签。
2.1 设计题目.............................................................. 错误!未定义书签。
2.2 设计要求.............................................................. 错误!未定义书签。
三、主要仪器设备及软件 ........................................ 错误!未定义书签。
四、课题分析及设计 ................................................ 错误!未定义书签。
4.1 设计任务.............................................................. 错误!未定义书签。
4.2 设计方案.............................................................. 错误!未定义书签。
4.3 系统硬件设计 ...................................................... 错误!未定义书签。
4.3.1 单片机最小系统 .............................................. 错误!未定义书签。
基于单片机编程的流水灯设计原理++含程序
1.引言当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。
学习单片机的最有效方法就是理论与实践并重,本文笔者用AT89C51单片机自制了一款简易的流水灯,重点介绍了其软件编程方法,以期给单片机初学者以启发,更快地成为单片机领域的优秀人才。
2.硬件组成按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。
AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用AT89C51单片机时无须外扩存储器。
因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。
其具体硬件组成如图1所示。
图1 流水灯硬件原理图从原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。
因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。
在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。
单片机流水灯原理图pcb
一、设计题目流水灯设计二、设计要求1、通过本次课程设计对80C51单片机对数据的处理和输出显示的认识和理解。
2、能够结合单片机对数据的处理输出显示了解单片机软件的应用。
3、将软、硬件有机地结合,软件系统采用汇编语言编写程序,并在WAVE中调试运行。
三、设计内容功能描述:1.功能要求:程序运行后,将依次循环出现8只LED依次逐个点亮,依次逐个叠加,依次逐个递减,从两边靠拢后分开,从两边叠加递减的流水灯效果。
2.使用说明:总体分三大部分(1)8个发光二极管(2)80C51单片机(3)软件部分按照硬件电路图把8个发光二极管依次连接P1.0~P1.7如图所示,EA (80C51 31脚) 为访问外部程序存储器控制信号,低电平有效当。
当EA端保持高电平时,单片机访问片内程序存储器的程序。
若超出该范围时,自动转去执行外部程序存储器的程序。
当EA端保持低电平时,无乱片内有无程序存储器,均只访问外部程序存储器,所以硬件电路要保持31脚高电平。
18 、19脚是接外部晶振的两脚,根据硬件电路图接上12MHz的外部晶振。
9脚是复位脚即为RESET,该引脚为单片机的上电复位端,当单片机晶体振荡器工作时,该引脚上出现两个机器周期的高电平,就可以实现复位操作,使单片机回复到初始状态。
图9脚就是上电复位电路连接图。
3.基础知识:80C51单片机的寻址方式包括寄存器寻址、直接寻址、寄存器间接寻址、立即寻址以及基址寄存器加变址寄存器间接寻址5种寻址方式。
其中基址寄存器加变址寄存器间接寻址方式一般用于访问程序存储器中的数据表格。
这种寻址方式是以DPTR 或PC作基址寄存器,以累加器作变址寄存器,并以两者内容相加成的16位地址作为操作数的地址,以达到访问数据表格的目的。
即熟悉运用查表指令编写程序。
查表指令可用于复杂代码转换显示,通过查表指令可以实现复杂的显示效果,并可以减少程序代码。
四、程序设计1、程序内容;----------------------------------------------- ;流水灯实例;功能:点亮发光管LED并闪烁;-----------------------------------------------ORG 0000H ;伪指令,指定程序从0000HLJMP MAIN ; 跳转指令,程序跳转到MAIN处ORG 0100H ; 伪指令,指定以下程序从0100H开始存放 MAIN:MOV SP ,#60H ; 给堆栈指针赋初值MOV P1,#0FFH ;给P1赋初值,LED全熄灭;以下为查表程序MOV DPTR,#LED TABLELIGHT :MOV R7, #42LOOP :MOV A , #42SUBB A , R7MOVC A ,@A+DPTRMOV P1 , A ; 输出显示LCALL DELAY ; 调延时子程序DJNZ R7 , LOOPSJMP LIGHT ;跳转,程序继续;延时子程序DELAY :MOV R7 ,#10HDELAY0 :MOV R6 ,#7FHDELAY1 :MOV R5 ,#7FHDJNZ R5 ,$DJNZ R6 ,DELA Y1DJNZ R7 ,DELA Y0RET; 表格数据LED TABLE :DB 0FFH ;全部熄灭DB 0FEH, 0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH;依次逐个点亮DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,000H; 依次逐个叠加DB 080H,0C0H,0E0H,0F0H,0F8,0FCH,0FEH,0FFH; 依次逐个递减DB 07EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,07EH;两边靠拢后分开DB 07EH,03CH,018H,000H,000H,018H,03CH,07EH; 两边叠加后递减DB 000H ;全部点亮END六、成员分工七、心得体会这次这个单片机的课程设计我们完成的不太理想,我们小组有四个人。
基于单片机的LED流水彩灯设计
第1章概述近几年来,彩灯对于美化、亮化城市有着不可轻视的重要工作。
因此作为城市装饰的彩灯需求量越来越大,对与彩灯的技术和花样也越来越高。
但传统的彩灯控制电路一般是由数字电路组成,这种彩灯控制器电路结构复杂、成本较高、功率损耗大,此外从功能效果上看,彩灯模式少而且样式单调,缺乏用户可操作性,影响亮灯效果。
因此有必要对现有的彩灯控制器进行改进。
然而单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
LED彩灯具有成本低、发光纯度高、发光热量小、耗电量低、超长寿命的特点。
所以利用单片机作LED彩灯控制,不仅是使控制花样、路数大大增加,成本也很低,而且对环境能源没有污染,有着很大的发展前景。
本方案是一种基于AT-89C51单片机的彩灯控制方案,实现对LED彩灯的控制。
主要以AT-89C51单片机作为主控核心与发光二极管、晶振、复位、电源等组成电路,利用软件编辑实现彩灯流水灯的效果。
第2章方案设计2.1设计任务(1)共有红、绿、蓝3色彩灯各8个,要求按一定顺序和时间关系运行:红色发光二极管由弱到强—>绿色发光二极管由弱到强—>蓝色发光二极管由弱到强。
(2)利用三基色原理,控制每次点亮红色发光二极管,绿色发光二极管,蓝色发光二极管的数目,实现黄色,紫色,青色。
(3)控制不同颜色发光二极管的数目,实现花样彩灯。
(4)编写程序代码。
(5)程序分析与调试。
2.2工程方案按照设计任务要求,红,绿,蓝光由弱到强,每个颜色用8个发光二极管,在程序控制下,先亮一个,再亮两个,再亮三个,慢慢的直到最后全亮,就能看到由弱到强的现象。
如果同一颜色使用更多的发光二极管,显示效果会更柔和。
要实现黄色,紫色,青色光,只能根据三基色原理进行合成。
所谓三基色是指红,绿,蓝三色,人眼对红,绿,蓝最为敏感,大多数可以通过红,绿,蓝3种颜色按照不同的比例合成产生。
同时,绝大多数单色光也可以分解成红绿蓝三种光。
单片机AT89C2051制作的LED流水灯电路
单片机AT89C2051制作的LED流水灯电路
一、电路图
按照下图购买元器件及面包板,在面包实验板上参考右图搭成电路。
将已经固化好最简程序的AT89C2051单片机芯片插到实验板中缝左右。
LC3911BH型LED数码管高约13mm,宽10mm,引线排列在两侧,正好能骑插在面包实验板中缝左右。
然后用细硬线按照图2将数码管与单片机Pl口连接好,并接入电阻、电容、晶振、按钮开关等。
下图中LED数码管公共阳极接了1只限流电阻。
显示0—9共10个阿拉伯数字,显示1时段数最少为2个。
设每段电流最大为5mA,则2段总电流I=2×5mA =10 mA,公共限流电阻R=(UCC-ULED)/I=(5V-2V)/10 mA =300Ω
显示8时段数最多为7个,每段电流最小为10/7=1.43mA,显得较暗。
由于LED电流大时正向压降亦大些,故显示数字在0~9之间变化时,亮度变化不是预期那样厉害。
因此,下图电路数码管每段电流在1.5~5mA之间。
公共限流电阻方案适合于业余制作。
下图中AT89C2051晶振频率为6MHz。
没有两个33p电容,由于面包板的分布电容,单片机仍然能起振并工作。
0.1μ电容功能是防高频干扰。
1μ电容、10k电阻与lk电阻组成最常用的复位电路。
AT89系列51单片机要求直流电源电压3—6V。
目前有下列电源可供选用:
●手机锂电池3.6-4.1V
●万能手机充电器4.3-5V
●新稳压电源
二、固定字符显示的程序编制
普通数字电子电路都有特定功能,如与、或、非逻辑功能。
计算机包括单片机本身没有特。
单片机课程设计流水灯
第3章课程设计——流水灯本设计是实时测控电路的基础,主要应用了80C51(单片机),2764(8KB/8的非易失性可编程存储器)、74HC573(8D锁存器)、74LS02(8D或非门)。
充分发挥了80C51单片机的程序存储器的扩展功能,其优点是硬件电路简单,易懂、易学。
3.1 工作原理3.1.1 存储电路原理80C51通过执行外部程序存储器(2764)里面的指令来对电路图下方的两片74HC573进行写操作,从而就可以灵活的改变74HC573里面锁存的内容,而使发光二极管按照指令的要求显示不同的状态。
由此可见,74HC573在此是被当作一个只可写而不可读的存储单元来使用的,至于为什么不可读,原因很简单,因为74HC373是一个单向的8D锁存器,其输入端不能同时作输出端。
但我们仍可以通过发光二极管来读它里面锁存的内容。
3.1.2驱动电路原理现在要解决的是P0口的时序问题,它包括两个方面:一方面是对外部程序存储器的访问;另一方面是对两个“数据写入单元”(即两个74HC573)的访问。
前一个问题的解决方法可以从何立民主编的《单片机初级教程》图9-2 得出。
对于第二个问题实现的方法可以有多种,本人使用P2.5和P2.6端口分别和80C51的写端口(WR)异或取反后作为这两片74HC573的片选信号。
可照此法扩展多片74HC573,驱动更多发光二机管。
本人在编程时所给两片74HC573的地址如下:表1 74HC573地址3.2 具体制作步骤3.2.1 绘制电路原理图根据该课程设计所要实现的功能,可画出电路原理图,见附录B 附图3.2.1。
3.2.2 确定元器件清单列出元器件清单,到电子城购买元器件。
元器件清单见附录C 附表3.2.1。
3.2.3 在万能板上焊接电路按照电路原理图的连接关系将元器件焊接好。
此步骤较为重要,需要有足够的耐心。
在焊接过程中我没有做一次成功,做了一些基本的通断检查,发现有三个地方虚焊,修改好后,再进行检查,找出错误将其一一改正。
单片机三个引脚控制16路流水灯
单⽚机三个引脚控制16路流⽔灯我们先来看下最终的效果我们先⽤单⽚机按照74HC595⼿动分解的例⼦,来实现我们想要的结果。
⾸先,我们让16个LED灯交叉亮起来代码部分:int STCP_Pin = 4;int SHCP_Pin = 6;int DS_Pin = 5;void setup (){pinMode(STCP_Pin,OUTPUT);pinMode(SHCP_Pin,OUTPUT);pinMode(DS_Pin,OUTPUT);}// 我们先让16个灯交叉亮void loop(){while(1){digitalWrite(STCP_Pin, LOW);// 1digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);// 2digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, HIGH);digitalWrite(SHCP_Pin, HIGH);// 3digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);// 4digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, HIGH);digitalWrite(SHCP_Pin, HIGH);// 5digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);// 6digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, HIGH);digitalWrite(SHCP_Pin, HIGH);// 7digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);// 8digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, HIGH);digitalWrite(SHCP_Pin, HIGH);// 9digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);// 10digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, HIGH);digitalWrite(SHCP_Pin, HIGH);// 11digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);// 12digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, HIGH);digitalWrite(SHCP_Pin, HIGH);// 13digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);// 14digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, HIGH);digitalWrite(SHCP_Pin, HIGH);// 15digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);// 16digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, HIGH);digitalWrite(SHCP_Pin, HIGH);digitalWrite(STCP_Pin, HIGH);}}运⾏效果然后我们再把代码简化⼀下,使其看起来更简洁,实⽤int STCP_Pin = 4;int SHCP_Pin = 6;int DS_Pin = 5;void setup (){pinMode(STCP_Pin,OUTPUT);pinMode(SHCP_Pin,OUTPUT);pinMode(DS_Pin,OUTPUT);digitalWrite(STCP_Pin, LOW);}void loop(){unsigned char LED_Data;while(1){LED_Data = 0xAA;// 第⼀个8位digitalWrite(STCP_Pin, LOW);for(int i=0; i<8; i++){if(LED_Data&0x80){ digitalWrite(DS_Pin, HIGH);}else { digitalWrite(DS_Pin, LOW); }digitalWrite(SHCP_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);LED_Data <<=1;}// 第⼆个8位LED_Data = 0xAA;for(int i=0; i<8; i++){if(LED_Data&0x80){ digitalWrite(DS_Pin, HIGH);}else { digitalWrite(DS_Pin, LOW); }digitalWrite(SHCP_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);LED_Data <<=1;}digitalWrite(STCP_Pin, HIGH);delay(1000);}}我们稍微改变下,让LED灯按照我们的意思⼯作,封装⼀下函数,然后让中间四个灯亮起来int STCP_Pin = 4;int SHCP_Pin = 6;int DS_Pin = 5;void HC595_Write(unsigned char data1, unsigned char data2);void setup (){pinMode(STCP_Pin,OUTPUT);pinMode(SHCP_Pin,OUTPUT);pinMode(DS_Pin,OUTPUT);}void loop(){unsigned char LED_Data1 = 0x03;unsigned char LED_Data2 = 0xC0;while(1){HC595_Write(LED_Data1, LED_Data2);delay(1000);}}void HC595_Write(unsigned char data1, unsigned char data2) {// 第⼀个8位digitalWrite(STCP_Pin, LOW);for(int i=0; i<8; i++){if(data1&0x80){ digitalWrite(DS_Pin, HIGH);}else { digitalWrite(DS_Pin, LOW); }digitalWrite(SHCP_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);data1 <<=1;}// 第⼆个8位for(int i=0; i<8; i++){if(data2&0x80){ digitalWrite(DS_Pin, HIGH);}else { digitalWrite(DS_Pin, LOW); }digitalWrite(SHCP_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);data2 <<=1;}digitalWrite(STCP_Pin, HIGH);}中间四个LED灯亮的效果然后我们连贯起来搞个流⽔的灯玩玩int STCP_Pin = 4;int SHCP_Pin = 6;int DS_Pin = 5;unsigned char LED_Data1[8] = { 0x01, 0x02, 0x04, 0x08,0x10, 0x20, 0x40, 0x80};unsigned char LED_Data2[8] = { 0x01, 0x02, 0x04, 0x08,0x10, 0x20, 0x40, 0x80};void HC595_Write(unsigned char data1, unsigned char data2); void setup (){pinMode(STCP_Pin,OUTPUT);pinMode(SHCP_Pin,OUTPUT);pinMode(DS_Pin,OUTPUT);}void loop(){while(1){for(int i=0; i<8; i++){HC595_Write(0x00, LED_Data1[i]);delay(1000);}for(int i=0; i<8; i++){HC595_Write( LED_Data2[i], 0x00);delay(1000);}}}void HC595_Write(unsigned char data1, unsigned char data2){// 第⼀个8位digitalWrite(STCP_Pin, LOW);for(int i=0; i<8; i++){if(data1&0x80){ digitalWrite(DS_Pin, HIGH);}else { digitalWrite(DS_Pin, LOW); }digitalWrite(SHCP_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);data1 <<=1;}// 第⼆个8位for(int i=0; i<8; i++){if(data2&0x80){ digitalWrite(DS_Pin, HIGH);}else { digitalWrite(DS_Pin, LOW); }digitalWrite(SHCP_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);data2 <<=1;}digitalWrite(STCP_Pin, HIGH);}最终的流⽔灯实验效果当然arduino本⾝⾃带了移位函数,同样可以达到效果int STCP_Pin = 4;int SHCP_Pin = 6;int DS_Pin = 5;unsigned char LED_Data1[8] = { 0x01, 0x02, 0x04, 0x08,0x10, 0x20, 0x40, 0x80};unsigned char LED_Data2[8] = { 0x01, 0x02, 0x04, 0x08,0x10, 0x20, 0x40, 0x80};void setup (){pinMode(STCP_Pin,OUTPUT);pinMode(SHCP_Pin,OUTPUT);pinMode(DS_Pin,OUTPUT);}void loop(){for(int a=0; a<8; a++){digitalWrite(STCP_Pin,LOW);shiftOut(DS_Pin,SHCP_Pin,MSBFIRST,LED_Data1[a]);shiftOut(DS_Pin,SHCP_Pin,MSBFIRST,0x00);digitalWrite(STCP_Pin,HIGH);delay(500);}for(int a=0; a<8; a++){digitalWrite(STCP_Pin,LOW);shiftOut(DS_Pin,SHCP_Pin,MSBFIRST,0x00);shiftOut(DS_Pin,SHCP_Pin,MSBFIRST,LED_Data2[a]);digitalWrite(STCP_Pin,HIGH);delay(500);}}流⽔的延时500ms的效果总结:1、复杂的功能,深⼊分解后背后的原理其实还是挺简单的;2、我们绝⼤部分时候都在造“轮⼦“,殊不知更优秀的“轮⼦”已经造好了;知晓“轮⼦”的由来,然后造出更优秀的“轮⼦”给⾃⼰⽤也是单⽚机学习路上的⼀项重要技能。
单片机课程设计,单片机控制流水灯
郑州科技学院《单片机》课程设计题目单片机控制流水灯学生姓名X X X 专业班级电气工程及其自动化X班学号201XXXX院(系)电气工程学院指导教师X X完成时间201X年XX月XX日目录1设计的目的 (1)2设计的任务与要求 (2)3设计方案与论证 (2)4 元器件介绍 (4)4.1 单片机5 硬件电路设计 (8)6软件设计 (10)7硬件的制作与调试 (12)8总结 (13)参考文献 (14)附录1 总体电路原理图 (15)附录2 实物图 (15)引言基于单片机的LED流水灯的应用十分广泛,由单片机作为的核心控制器,通过按键实现控制功能和数据输入是非常普遍的。
通常在所需按键数量不多时,系统常采用独立式按键。
这种按键的电路配置灵活,软件结构简单。
由于实际应用中,不同系统对按键的要求不同,因此,对按键程序的设计要考虑全面,以便更好地完成按键所设定的功能,简述了该系统中一些重要芯片的基本工作原理,着重论述了硬件线路各个模块的设计思想。
进而熟练掌握相关专业基础知识的综合应用,提高学生的实际动手和设计能力。
本系统是基于AT89C51系列单片机为核心的LED流水灯设计,实现12个LED灯变化方向和速度的可调。
1 设计的目的1、使自己在学习理论知识的同时与实际操作相结合,从而提高自己动手操作的能力。
2、可以培养自己自主学习的能力,自己可以查阅资料,从而提高自己的知识储备。
3、可以提高自己的动手能力,提前为以后走向社会,适应社会而做准备。
4、在自己动手的同时,遇到不懂的可以请教老师,可以查阅资料,也可以通过自己的思考解决问题,这些都可以提高自己对理论知识的理解和对课外知识的扩展,从而提高以后工作的社会竞争力。
5、自己通过自己的努力而完成的作品会有一种巨大的成就感,会让自己更喜欢这门学科,从而以后更加好好学习这门学科。
2 设计的任务与要求1、通过单片机实现对LED灯进行闪烁控制。
2、学会实物的设计和制作。
3、能够自己设计仿真电路。
流水灯
流水灯设计思路:用一片74LS163和若干门和八个灯泡。
74163是十六进制的计数器,通过门控制,1到8分别对应一个小灯泡,9到F分别对应同样的8个小灯泡,当数码管显示从1到8时,小灯泡从左到右依次点亮,从9到F时,小灯泡从右返回到左依次点亮,完成流水灯的设计。
设计过程:1.计数器的连接普通的计数器连接方式,P、T端,清零端,置数端,VCC接高电平,GND接地,Q1Q2Q3Q4接数码管,电路图如下:2.门电路完成流水灯(1)输出为1~8从左到右依次点亮的小灯泡输出二进制通过与门和每个小灯泡相连,输出为1时,则对应第一个小灯泡亮,其余不亮,输出为2时,对应的第二个小灯泡亮,其余不亮,以此类推,输出为8时,第八个灯泡亮,其余不亮。
注意到,例如当输出为1、3、7、15时,因为同时用到Q1,即都需要Q1通过一个与门与灯泡相连,这时候就会产生重复点亮的情况,即当输出为1、3、7、15时,第一个灯泡都会点亮,这时通过把重复的输出端口用一个非门连接到与门来消除重复,例如为使第一个灯泡亮,则将Q1、Q2非,Q3非,Q0通过与门与第一个灯泡相连。
输出1~8时的电路图如下所示:(2)输出为9~F时从右到左依次点亮的小灯泡此时同样有重复的问题,依然可以用一个非门来解决。
除此,因为输出为9~F时同样要表现在八个小灯泡上,不能将两个非门的输出接在一起,我们将需要同时连接到一个灯泡的与门通过增加一个异或门再和灯泡相连,例如,输出为9和7时都需要在第七个小灯泡上显示,则把连接二进制输出的与门通过一个异或门和第七个小灯泡相连接。
(3)总电路图如下所示:设计中的问题:本设计中存在一个问题,因为74LS163为十六进制计数器,但因为设计的流水灯从第一个点亮再返回第一个,共经过十五个数,即1~15,当数码管显示0时第一个灯又被点亮一次,因此,第一个灯实际上是被点亮两次,当频率大于二十赫兹时人眼就观察不出来,所以实际中流水灯频率一般在二十赫兹以上,因此此问题可被忽略,流水灯正常工作。
单片机流水灯实验电路图+仿真
八、实验中的问题
1.程序编译问题
初始编程时出现语法错误,后修正
2、循环显示出现问题,循环不能持续。修改程序延时,及数码移位程序片段。
2、在进行数码显示的时候,要对显示单元开辟8个显示缓冲区,每个显示缓冲区装有显示的不同数据即可
五、C语言源程序
#include <REG51.H>
#define uint unsigned int
#define uchar unsigned char
uchar code DIS_SEG7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};
for(cnt = 0; cnt < 8; cnt++) {//点亮数码管0-7
P2 = 0;
P0 = DIS_SEG7[DISP[cnt]];
P2 = ~DIS_BIT[cnt];
delay1ms(1);
}
ttt = DISP[0];
DISP[0] = DISP[1];
DISP[1] = DISP[2];
单片机实验
项目____拉幕式数码显示_______
学号___1204180217_____
专业__能源工程及其自动化__
班级____02____________
姓名___邵鹏程_________
一、实验目的
1,对单片机进一步了解熟悉
2,掌握数码管显示技术及编程
3,巩固理论知识及
二、实验内容
用51单片机8位控制数码管,在数码管上显示“01234567”,并能循环显示。
三、实验原理图
四、程序设计方法
1、动态数码显示技术;如何进行动态扫描,由于一次只能让一个数码管显示,因此,要显示8位的数据,必须经过让数码管一个一个轮流显示才可以,同时每个数码管显式的时间大约在1ms到4ms之间,所以为了保证正确显示,必须每隔1ms,就得刷新一个数码管。而这刷新时间我们采用单片机的定时/计数器来控制,每定时1ms对数码管刷新一次。
51单片机爱心流水灯原理及制作
电路原理图:原件清单:1、51单片机x1、40Pin 座x12、LED x32(建议用5mm 七彩的)3、电阻470Ωx334、晶振12MHz x15、10uf 电解电容x1、谐振瓷片电容30pf x26·其他的可以看自己的爱好去加7、其实也可以不用那么多的电阻,用几个排阻就OK了。
效果展示:作品程序:#include<reg52.h>#define uchar unsigned charuchar flag=200;///////////////////////////////////////////////////////////////////////uchar code Tab1[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xFF};//暗中左移向下uchar code Tab2[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF};//暗中右移向上uchar code Tab3[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00};//亮中左移向下uchar code Tab4[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x00};//亮中右移向上uchar code Tab11[]={0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0xff};//暗中左移向下uchar code Tab22[]={0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0xff};////////////////////////////////////////////////////////////////////uchar code Tab33[]={0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};uchar code Tab44[]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};uchar code Tab55[]={0x08,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff};uchar code Tab5[]={0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xff};uchar code Tab6[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xff};uchar code Tab7[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};uchar code Tab8[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; ////////////////////////////////////////////////////////////////void shansuo();void xl();///////////////////////////////////////////////////////////////void delay(void){unsigned char m,n;for(m=0;m<flag;m++)for(n=0;n<250;n++);}///////////////////////////////////void hy1(void) //点亮状态逆时针旋转90度(一个一个灭){unsigned char i;for(i=0;i<8;i++){P0=Tab11[i];P1=Tab22[i];P2=Tab11[i];P3=Tab22[i];delay();}for(i=0;i<8;i++){P0=Tab44[i];P1=Tab55[i];P2=Tab44[i];P3=Tab55[i];delay();}}///////////////////////////////////////////void hy2(void) //暗中逆时针转360。
单片机流水灯的设计与制作
2.规划电路板 在绘制电路板之前,用户要对线路板有一个初步的规划,比如
说电路板采用多大的物理尺寸,采用几层电路板,是单层板还是 双层板,各元件采用何种封装形式及安装位置等。这是一项极其 重要的工作,是确定线路板设计的框架。
图3-19 电路板层切换界面
(2)执行菜单命令“Place→Keepout/Track”或单击 Placement Tools工具栏中的按钮。
(3)执行命令后,光标会变成十字。将光标移动到初始原点的 位置,单击鼠标左键,即可确定第一条板边的起点。然后拖动 鼠标,将光标移到合适位置,单击鼠标左键,即可确定第一条 板边的终点。用户在该命令下,按Tab键,可进入Line Constraints属性对话框如图3-20所示,此时可以设置板边的 线宽和层面。
VD 1 1N4 007
VD 2 1N4 007
电源模块
U1
1
VIN
LM7 8 0 5 C T +5 V
3
C1
C2
VD 3
VD 4
103
1N4 007 007 2200u F
+5V
R9 1K
C3 470uF C4
103
D1 2 LED
+5V
K1 RES T
C5 10uF/16V
RES ET
R20 9 10K
图3-5 RDDDDDDDD网E01234567络S标11111 12345678901234号示意图PPPPPPPPRRTIITNN11111111X0EXTT......../SDD01234567P01///3///PTTPPP.3422333.E...1023X