查询方式流水灯制作
Proteus虚拟仿真案例---流水灯制作

Proteus虚拟仿真案例-——流水灯制作一、原理图设计1.打开proteus,新建文件2.选择元器件(1)选择单片机芯片左侧快捷菜单栏里按下,按下P,在“关键字”栏中输入“8951”,选择AT89C51(2)选择晶振:输入crystal,选择CRYSTAL(3)选择电容:输入22p,左边类别中选择Capacitors,右边选择CERAMIC22P(4)选择电阻:输入10k,左边类别中选择Resistors,右边选择RESISTORS库的3WATT10K(5)选择led:输入led,左边类别中选择Optoelectronics,右边选择led—yellow(6)选择按钮:输入button,选择USERDVC库的BUTTON(7)选择好的元器件如图所示3.放置器件振荡电路:(1)放置AT89C51单片机:在DEVICES栏中选中AT89C51,然后在绘制区放置到合适的位置(2)放置晶振,隐藏text属性(菜单-模板—设置设计默认值—显示隐藏文本不勾选)(3)分别将晶振的两脚与AT89C51的19、18脚相连(4)放置两个22p的电容,一端与晶振相连,另一端互连(5)放置地节点(左侧快捷菜单栏里按下—-GROUND),与两个电容相连复位电路:a.放置电源节点(左侧快捷菜单栏里按下——POWER)b.放置地节点c.放置电容,电阻,电阻一端接地,一端与电容相连,电容一端接+5V电源d.AT89C51第9脚接电阻、电容中间e.放置按钮,接电容两端f.右击按钮——编辑属性——元件参考:BUTTON,并取消“本元件不用于PCB制版”g.修改C3电容的值:右击——编辑属性—-Capacitance改为10u绘制流水灯:a.放置电阻、led,右击led——编辑属性——隐藏元件值,连接电阻和ledb.使用块复制,复制7组电阻和ledc.放置电源,分别与D1—D8的一端连接d.总线绘制:左侧选择“总线模式”,绘制一条总线,连接P1口与R2-R9e.使用属性分配工具进行快速网络标号:按下a,出现属性分配窗口,“字符串”框输入“net=D#”,单击P0口的8条线,进行编号,再次按下a,出现属性分配窗口,“字符串”框输入“net=D#”,单击R2—R9的8条线,进行编号f.批量修改R2-R9的值:按下a,出现属性分配窗口,“字符串”框输入“VALUE=100”,确定二、系统仿真1.编写源代码(1)菜单——源代码——添加/删除源文件—-new——文件名输入pmd。
流水灯电路的制作

流水灯电路的制作流水灯是一种光电转换装置,通过一系列的LED灯组成,可以在不同的时间间隔内依次点亮,形成像水流一样的效果,因此得名“流水灯”。
下面我将介绍流水灯电路的制作过程。
首先,我们需要准备以下材料和工具:1. Arduino控制板(如Arduino UNO)2. Jumper wires(杜邦线)3.电阻(220欧)4. LED灯(3mm直径和5mm直径,不同颜色)5.面包板6.铁丝钳和钳子(辅助工具)接下来,按照以下步骤制作流水灯电路:1. 将Arduino控制板插入面包板的两侧,并通过杜邦线将GND(地线)引脚与面包板上的负极连接。
2.将220欧的电阻通过杜邦线连接到面包板上,一端与GND(地线)相连,另一端空置。
3.通过杜邦线将LED灯连接到面包板上。
LED灯有一个长脚和一个短脚,长脚是阳极(正极),短脚是阴极(负极)。
将LED灯的阳极连接到电阻的空置端,阴极连接到GND(地线)。
4.重复步骤3,将其他的LED灯连接到面包板上。
你可以选择不同颜色的LED灯,以获得更丰富的效果。
确保每个LED灯的阳极连接到电阻的空置端,而阴极连接到GND(地线)。
5. 通过杜邦线将Arduino控制板的数字引脚与面包板上的LED灯连接。
根据你想要的效果,可以将LED灯连接到不同的数字引脚上。
例如,将第一个LED灯连接到数字引脚2,第二个LED灯连接到数字引脚3,依此类推。
6. 将Arduino控制板通过USB线连接到计算机,并开启Arduino IDE编程软件。
7. 在Arduino IDE中编写相应的代码,以控制流水灯的效果。
以下是一个简单的流水灯代码示例:```const int ledPin1 = 2; // 设置第一个LED灯的数字引脚const int ledPin2 = 3; // 设置第二个LED灯的数字引脚const int ledPin3 = 4; // 设置第三个LED灯的数字引脚//以此类推...void setupinMode(ledPin1, OUTPUT);pinMode(ledPin2, OUTPUT);pinMode(ledPin3, OUTPUT);//初始化其他LED的引脚void loodigitalWrite(ledPin1, HIGH); // 点亮第一个LED灯delay(100); //等待100毫秒digitalWrite(ledPin2, HIGH); // 点亮第二个LED灯delay(100); //等待100毫秒digitalWrite(ledPin3, HIGH); // 点亮第三个LED灯delay(100); //等待100毫秒//以此类推...逐个点亮其他LED灯digitalWrite(ledPin1, LOW); // 关闭第一个LED灯delay(100); //等待100毫秒digitalWrite(ledPin2, LOW); // 关闭第二个LED灯delay(100); //等待100毫秒digitalWrite(ledPin3, LOW); // 关闭第三个LED灯delay(100); //等待100毫秒//以此类推...逐个关闭其他LED灯```8. 将上述代码上传到Arduino控制板,并观察LED灯是否能够像流水灯一样依次点亮和熄灭。
流水灯灯的制作流程

流水灯的制作流程201400800657 唐宁1·根据系统的需求设计需求设计单片机电路,本实验的目的是制一个流水灯,编写的程序使用中断电路和直接控制电路,下图为流水灯的电路:2. 对单片机闪光电路的程序设计,本次编程采用了定时器来控制闪光灯,设计的周期为50ms,采用51单片机学习板为例(P1控制闪光灯),使用keil-c对单片机进行编程。
keil-c的安装使用如下:(1)点击keil-c软件,按默认位置安装,这是为使得程序中的头文件reg51.h能够在默认位置调用,安装完成后运行软件。
(2)新建一个工程,保存在计算机的某一个文件夹下;在新建一个空白文档,将所写的程序写完后,保存为c文件,关闭程序。
(3)找到所建工程的文件夹,打开project文件,将c文件添加到所在的工程中,对工程右键选中生成hex文件,然后对c文件进行编译,不断调试,然后选择重编译,直至编译通过。
表明所写的程序没有语法上的错误。
接下来就可以对程序进行模拟,在这里我们可以先利用软件自带的调试程序来查看运行是否正确,最终是下载到单片机上进行测试。
程序见下图:#include <reg51.h>main(){TMOD=0x01; /*初始化定时器,按方式一工作*/TH0=0x3c;TL0=0xb0; /*定时为50ms*/ET0=1; /*开定时器的中断允许*/EA=1; /*开CPU中断允许*/TR0=1; /*打开定时器中断开关*/TF0=0; /*溢出置为零*/P1=0xfe; /*第一个灯亮*/while(1); /*死循环,等待中断发生*/}void read() interrupt 1 /*定时器中断函数*/ {TH0=0x3c;TL0=0xb0; /*重赋初值*/static int number=0; /*定义计数变量*/ number++;if (number<8){P1=~P1;P1=~(P1<<1);} /*流水灯挨个连续发光*/ else if(number<15){P1=~P1;P1=P1>>1;P1=~P1;} /*流水灯往回挨个亮灯*/ else if(number==15)P1=0x00; /*灯全亮*/else if(number==16)P1=0xff; /*灯全灭*/else if(number==17)P1=0x00; /*灯全亮*/else if(number==18)P1=0xff; /*灯全灭*/else{P1=0xfe;number=0; /*重复亮灯*/}使用keil-c对上述程序进行编译以后,发现弹出的窗口提示:0错误,0警告,表明所编写的程序在语法没有错误,接下来可以利用软件自带的工具进行调试,最终通过下载程序到单片机执行即可,运行以确定是否存在逻辑错误。
实验二 查表指令实现流水灯控制

实验二 查表指令实现流水灯控制一、实验目的1、熟悉Keil uVision2软件的使用;2、掌握流水灯控制;3、掌握延时程序的编制;二、实验设备及仪器Keil μVision2软件;单片机开发板;PC 机一台三、实验原理及内容1、LED 流水灯模块电路原理图,如图2.1所示。
U7+5V 图2.1 LED 流水灯模块原理图 (1)74HC573为8位三态输出锁存器,各引脚功能: D0~D7为输入端(接到P0口); Q0~Q7为输出端(驱动LED 灯DS2~DS9); LE 输入数据锁存控制端,高电平有效(当LE=1时,锁存数据);OE 输出使能端,低电平有效; 只要锁存器按照一定规律输出低电平,就能使LED 灯按一定的规律点亮。
(2)P0口控制流水灯模块、数码管及点阵。
对应的锁存器控制端: P1.2 流水灯(74HC573锁存器U7)P1.0 数码管的段(74HC573锁存器U8)P1.1 点阵列、数码管的位(74HC573锁存器U9)P1.3 点阵行(74HC573锁存器U4)2、训练内容一:用查表指令分别实现如下流水灯方案:(1)LED灯由右到左逐步熄灭参考程序:ORG 00HMAIN:CLR P1.1 ;数码管位、点阵列控制位关闭CLR P1.3 ;点阵行控制位SETB P1.2 ;led灯控制MOV DPTR,#TAB1;首地址MOV R0,#8 ;移位次数MOV R1,#0MOV P0,#0LCALL DELAY ;延时LOOP:MOV A,R1MOVC A,@A+DPTRMOV P0,ALCALL DELAYINC R1DJNZ R0,LOOPLJMP MAINDELAY:MOV R2,#0D1:MOV R3,#0D2:NOPDJNZ R3,D2DJNZ R2,D1RETTAB1:DB 80H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH END(2)LED灯由右到左逐步点亮(3)LED 灯由两边向中间靠拢(4)LED 灯由中间向两边分离(5)LED 等先由两边向中间靠拢,再由中间向两边分离2、训练内容二:点阵模块静态显示对应的行为高电平控制,对应的列为低电平控制。
流水灯的实验原理及步骤

流水灯的实验原理及步骤流水灯(也称为跑马灯)是一种由多个LED灯组成的电子显示器件,常常被用于电子实验、电子产品展示等场合中。
流水灯可以通过变化发光的方式来传递信息或者装饰环境,具有简单、实用、灵活的特点。
下面将详细介绍流水灯的实验原理及步骤。
实验原理:流水灯的实现原理是通过控制每个LED灯的点亮与熄灭来形成一种连续而有序的动画效果,使得LED灯看起来像是在“流水”一样运动。
一般来说,流水灯采用的是LED的时分多路复用技术,即通过定时器控制每个LED点亮和熄灭的时刻,使得它们按照一定的顺序依次发光。
实验步骤:1. 准备材料:LED灯(数量根据需要决定)、电阻(限流电阻,选择合适的阻值)、电路板、导线、面包板或焊接工具等。
2. 连接电路:根据所需的LED数量,设计电路图,按照图上的连线方式将LED 连接到电路板上,注意保持连线的正确性。
3. 添加电阻:根据LED的工作电压和电流需求,计算每个LED对应的限流电阻的阻值,将电阻依次与LED进行串联连接。
4. 供电测试:将电路板连接到电源上,确认电源电压是否符合LED的工作电压要求。
注意检查整个电路的连线是否正确,电阻是否接在了正确位置。
5. 编写程序:使用单片机或其他控制芯片来控制LED的点亮和熄灭。
根据所采用的开发平台和编程语言,编写相应的代码,控制每个LED的状态和时间间隔。
6. 调试程序:将编写好的程序下载到控制芯片中,并连接到电路板上。
通过电脑或其他输入设备控制程序运行,观察LED的点亮和熄灭效果。
根据需要调整程序中每个LED的点亮时间和顺序,使得LED灯看起来像是在流水一样运动。
7. 完善电路:根据实际需求,可以设计并添加其他功能模块,如按键控制、调节亮度等。
总结:流水灯实验是一种常见的电子实验,通过控制LED灯的点亮和熄灭来形成一种连续的流动效果。
实验的原理是利用LED的时分多路复用技术和控制芯片的编程来实现。
实验步骤包括准备材料、连接电路、添加限流电阻、供电测试、编写程序、调试程序和完善电路等。
综合实验一——按键控制流水灯实验(查询方式)

北京科技大学微型计算机原理实验报告学院:____自动化学院________________专业、年级:_自动化1101_ ______________ 姓名:__廖文骏_ ________________学号:_ 20111002124 ____________ 指导教师:___ _____王粉花____________2013年12 月综合实验一按键控制流水灯实验(查询方式)实验学时:2学时一、实验目的1.掌握ATmega16 I/O口操作相关寄存器2.掌握CodeVision AVR软件的使用3. 复习C语言,总结单片机C语言的特点二、实验内容1. 设计一个简单控制程序,功能是8个LED逐一循环发光0.5s,构成“流水灯”。
2. 用两个按键K1和K2控制流水灯(中断方式):(1)当按下K1时,流水灯从左向右流动;(2)当按下K2时,流水灯从右向左流动。
三、实验所用仪表及设备硬件:PC机一台、AVR_StudyV1.1实验板软件:CodeVision AVR集成开发软件、SLISP下载软件四、实验原理ATmega16芯片有PORTA、PORTB、PORTC、PORTD(简称PA、PB、PC、PD)4组8位,共32路通用I/O接口,分别对应于芯片上32根I/O引脚。
所有这些I/O口都是双(有的为3)功能复用的。
其中第一功能均作为数字通用I/O接口使用,而复用功能则分别用于中断、时钟/计数器、USRAT、I2C和SPI串行通信、模拟比较、捕捉等应用。
这些I/O口同外围电路的有机组合,构成各式各样的单片机嵌入式系统的前向、后向通道接口,人机交互接口和数据通信接口,形成和实现了千变万化的应用。
每组I/O口配备三个8位寄存器,它们分别是方向控制寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x=A\B\C\D)。
I/O口的工作方式和表现特征由这3个I/O口寄存器控制。
AVR通用I/O端口的引脚配置情况:I/O口引脚配置表表中的PUD为寄存器SFIOR中的一位,它的作用相当AVR全部I/O口内部上拉电阻的总开关。
五种编程方式实现流水灯的单片机C程序

五种编程方式实现流水灯的单片机C程序流水灯是一种常见的灯光效果,常用于装饰和展示。
实现流水灯的程序可以使用多种不同的编程方式,包括传统的顺序编程、状态机编程、中断编程、调度器编程和面向对象编程。
下面分别介绍这五种方式实现流水灯的程序。
1.顺序编程方式:顺序编程是最常见的编程方式,也是最直接的方式。
下面是使用顺序编程方式实现流水灯的C程序:```c#include <reg52.h>void delay(unsigned int t)while(t--)for(int i=0; i<50; i++);}void mainunsigned char led = 0x80; // 初始灯光状态while(1)P0 = led; // 输出灯光状态delay(500); // 延时一段时间led >>= 1; // 右移一位,实现流水灯效果if(led == 0) // 到达最右边后重新开始led = 0x80;}}```2.状态机编程方式:状态机编程是一种基于状态的编程方式,通过定义不同的状态和状态转换来实现流水灯效果。
下面是使用状态机编程方式实现流水灯的C程序:```c#include <reg52.h>typedef enumState1,State2,State3,State4,State5} State;void delay(unsigned int t)while(t--)for(int i=0; i<50; i++);}void mainState state = State1; // 初始状态为State1 while(1)switch(state)case State1:P0=0x80;delay(500);state = State2;break;case State2:P0=0x40;delay(500);state = State3;break;case State3:P0=0x20;delay(500);state = State4;break;case State4:P0=0x10;delay(500);state = State5;break;case State5:P0=0x08;delay(500);state = State1;break;}}```3.中断编程方式:中断编程方式是一种基于中断事件的编程方式,通过在特定的中断事件触发时改变灯光状态来实现流水灯效果。
流水灯的实验原理及步骤

流水灯的实验原理及步骤流水灯是一种用于电子电路实验的简单电路。
它由一组LED灯组成,灯珠逐个点亮,呈现出流水的效果。
以下是流水灯的实验原理及步骤:实验原理:流水灯的实验原理是借助555计时器和数个逻辑门实现的。
555计时器产生的方波信号通过逻辑门的组合,控制LED灯的亮灭顺序,从而实现流水的效果。
实验步骤:1.准备材料和工具:一块实验面板、555计时器、几个逻辑门(如74LS04等)、一组LED灯、几个电阻、导线等。
2.将555计时器、逻辑门、LED灯等器件按照连线图连接在实验面板上。
具体连接方式如下:- 将VCC引脚连接到正电源。
- 将GND引脚连接到地线。
- 连接一个电阻和电容来设置555计时器的频率。
电阻连接到引脚7(DISCHARGE)和引脚8(VCC)之间,电容连接到引脚6(THRESHOLD)和引脚2(TRIGGER)之间。
同时将电容的另一端连接到地线。
- 将555计时器的引脚3(OUTPUT)连接到逻辑门1的一个输入端,再将逻辑门1的输出端连接到一个电阻,电阻的另一端连接到LED灯1的正极。
LED 灯1的负极连接到地线。
- 将LED灯1的负极连接到逻辑门2的一个输入端,再将逻辑门2的输出端连接到一个电阻,电阻的另一端连接到LED灯2的正极。
LED灯2的负极连接到地线。
- 依此类推,将其他LED灯也连接起来,形成流水灯的效果。
3.检查连接是否正确,确保没有短路或接触不良的地方。
4.将正电源接入电路,调整电阻和电容的值,以控制流水灯的速度和亮度。
5.观察LED灯的亮灭顺序,若亮灯顺序与预期不符,可能需要调整逻辑门的输入连接方式。
6.实验完成后,断开电源,注意安全。
以上是流水灯的实验原理及步骤,希望对你有帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机的流水灯
1.实验任务
利用单片机AT89C51与LED设计一串流水灯,要求至少26个灯,三种流水模式。
2. 电路原理图
3.系统板上硬件连线
(1)P0,P2,P3分别接24个小灯,P1.5,P1.6,P1.7用来显示流水灯模式的指示灯;
(2)P1.0,P1.2,P1.4三个管脚为三种模式控制键,按下其中一种可以显示一种流水模式。
4.c语言程序
#include <reg51.h>
#include <intrins.h>
sbit key1=P1^0;
sbit key2=P1^2;
sbit key3=P1^4;
sbit W1=P1^5;
sbit W2=P1^6;
sbit W3=P1^7;
unsigned char i,j,k,m,n,temp,y,v,u;
int a[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
int b[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void delay02s(void) //延时0.2秒子程序
{
unsigned char i,j,k; //定义3个无符号字符型数据。
for(i=20;i>0;i--) //作循环延时
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void aa() // 实现要求子程序(key1按下时实现逐盏点亮,逐盏灭掉) {
P0=0xff ;// 发光二极管全灭
while(!key1)
delay02s();
while(key1==1)
{ while(1)
{P0=a[m];P2=a[m];P3=a[m];
W3=0;delay02s();P0=0xff;P2=0xff;P3=0xff;delay02s();P0=a[m];P2=a[m];P3 =a[m];m++;
if(m==8) m=0;
}//逐盏点亮、闪烁,逐盏灭掉
} }
void bb()
{ P3=0xff ;// 发光二极管全灭
while(!key2)
delay02s();
while(key2==1)
{ while(1)
{P0=b[n];P2=b[n];P3=b[n];W2=0;delay02s();n++;
if(n==8)n=0;}}
}
void cc()
{ P2=0xff ;// 发光二极管全灭
while(!key3)
delay02s();
while(key3==1)
{ while(1)
{P0=0xaa;P2=0xaa;P3=0xaa;
W1=0;delay02s();delay02s();delay02s();delay02s();P0=0x55;P2=0x55;P3=0 x55;delay02s();delay02s();delay02s();delay02s();
temp=0xfe;
P0=temp; P2=temp;P3=temp;delay02s(); for(y=1;y<8;y++)
{
u=temp<<y;
v=temp>>(8-y);
P0=u|v;
P2=u|v;
P3=u|v;
delay02s();
}
for(y=1;y<8;y++)
{
u=temp>>y;
v=temp<<(8-y);
P0=u|v;
P2=u|v;
P3=u|v;
delay02s();
}
}
}}
void main()
{
while(1){P0=0xff; while(!key1)aa(); while(!key2)bb(); while(!key3)cc(); }}。