八只LED灯做流水灯实验报告

合集下载

流水灯实验·

流水灯实验·

实验一发光二极管流水灯实验一、实验要求利用单片机及8个发光二极管等器件,制作一个单片机控制的流水灯系统。

单片机的P0.0~P0.7接有8个发光二极管,运行程序,则8个发光二极管进行流水灯操作,流水灯从上到下依次点亮,反复循环。

二、实验目的1.掌握单片机最小系统的构成。

2.掌握P0口作为基本I/O口使用时,外部电路的连接方法。

3.如何控制I/O口来驱动LED发光二极管。

4.学会用PROTEUS 设计电路原理图,并进行仿真的方法。

5.学会使用Keil C编程。

三、实验步骤(一)电路原理图设计1.启动PROTEUS ISIS仿真工具。

参照实验指导书P24页2.5节的方法,设计电路原理图。

2.在元器件模式下,单击选取元器件,在Keywords一栏中输入元器件名称,如AT89C51,双击所匹配的元器件,便可将其加入到对象选择器中。

本实验需要选取的元器件有单片机AT89C51、发光二极管LED-BIRG、瓷片电容CAP、电解电容CAP-ELEC、电阻RES、上拉排阻RESPACK-8、晶振CRYSTAL、按钮BUTTON、双极性晶体管ST5771-1。

3.按图一电路原理图,在编辑区放置相应元器件,单击选择终端模式,放置电源和地,并连线。

4.设置元器件参数值,本实验中晶振X1频率为12MHz,瓷片电容C1、C2的值为30pF,电解电容C3的值为10uF,电阻R1为470,R2、R3的值为10K,电阻R4~R11的值为470,单片机AT89c51的时钟频率12MHz。

5. 设计完成电路后,单击电气检测按钮,会出现检查结果窗口,若有错,会给出详细的说明。

如没有错,将设计保存到自己的工作目录中。

(二)编写源程序,并生成.HEX文件。

1.启动KEIL Uvision4。

2. 按照实验指导书P50页4.1节的方法输入源程序并生成.HEX文件。

(注意:程序设计时考虑到实验学习板上的电路的设计,要使P2.7 = 0; 关闭液晶使能位,防止液晶数据口输出干扰P0口; 使P3.7 = 0, 选通WS 系列实验板的LED 流水灯的电源控制端)(三)仿真回到PROTEUS ISIS环境,并按照实验指导书P60页4.2节的方法加载.HEX文件进行仿真。

电路板流水灯实训报告

电路板流水灯实训报告

一、实验目的1. 掌握电子电路板的基本制作流程,包括电路设计、元件焊接、电路调试等。

2. 熟悉流水灯电路的工作原理,理解其电路设计及编程方法。

3. 提高动手能力和电子电路分析能力。

二、实验原理流水灯电路是一种常见的电子电路,通过单片机或其他控制器控制LED灯的依次点亮和熄灭,形成流水效果。

本实验采用51单片机作为控制器,通过编写程序控制LED灯的亮灭顺序,实现流水灯效果。

三、实验器材1. 51单片机实验板2. LED灯8个3. 电阻(220Ω)8个4. 接线端子5. 编程器6. 电源7. 焊接工具四、实验步骤1. 电路设计根据实验要求,设计流水灯电路原理图。

电路主要由51单片机的P0口输出,连接8个LED灯和8个220Ω电阻组成。

电阻起到限流作用,保护LED灯不被烧毁。

2. 元件焊接根据电路原理图,将元件焊接在实验板上。

注意焊接顺序和焊接质量,确保电路连接正确。

3. 编程使用编程器将编写好的程序烧录到51单片机中。

程序主要实现以下功能:- 初始化P0口为输出模式;- 设置延时函数,控制LED灯的点亮和熄灭时间;- 循环控制P0口的值,实现LED灯的流水效果。

4. 电路调试连接电源,观察LED灯的流水效果。

若流水效果不理想,检查电路连接是否正确,调整延时函数参数,直至达到预期效果。

五、实验结果与分析实验成功制作了一块流水灯电路板,实现了LED灯的流水效果。

实验过程中,遇到以下问题:1. 电阻值选择不当,导致LED灯亮度不稳定。

2. 焊接过程中,个别焊点虚焊,导致电路连接不良。

针对以上问题,采取以下措施:1. 调整电阻值,使LED灯亮度均匀。

2. 重新焊接虚焊点,确保电路连接良好。

六、实验总结通过本次电路板流水灯实训,掌握了以下知识和技能:1. 电子电路板的基本制作流程。

2. 流水灯电路的工作原理及编程方法。

3. 电子元件焊接技巧和电路调试方法。

本次实验提高了自己的动手能力和电子电路分析能力,为以后的学习和工作打下了基础。

单片机流水灯实验报告

单片机流水灯实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

流水灯实验报告

流水灯实验报告

流水灯实验报告实验目的1.了解单片机I/O口的工作原理。

2.掌握51单片机的汇编指令。

3.熟悉汇编程序开发,调试以及仿真环境。

一、实验内容通过汇编指令对单片机I/O进行编程(本实验使用P0口),以控制八个发光二极管以一定顺序亮灭。

(即流水灯效果)二、实验原理通过更改P0口8位的高低电平,分别控制8个发光二极管的亮灭。

具体的亮灭情况如下表:要实现“流水灯”效果,也就是需要将P0口的输出值发生以下变化:FE→FD→FB→F7→EF→DF→BF→7F→BF→DF→EF→F7→FB→FD→FE→......可以使用一个循环,不断对数据进行移位运算实现。

这里的移位指令采用RL和RR,即不带进位的位移运算指令。

如果使用带进位的位移运算指令(RLC和RRC),则需要定期把CY置0,否则会出现同时亮起两个发光二极管的情况。

三、实验过程1.在仿真系统中绘制好单片机的电路图2.编写汇编程序,程序如下:ORG 0000HDelay: MOV R0,#0FFHSJMP StartDelay1: MOV R1,#0FFHStart: MOV A, Delay2: NOP#0FEHMOV P0, A DJNZ R1,Delay2 CLR P2.7 DJNZ R0,Delay1 CLR P3.7 RETMove: MOV R2, #7H ENDMOV R3, #7HRMove: RL AMOV P0, ACALL DelayDJNZ R2,RMoveLMove: RR AMOV P0, ACALL DelayDJNZ R3,LMoveSJMP Move四、实验结果为了便于实验结果的描述,下面分别把P0.0, P0.1…, P0.7对应的发光二极管编号为1, 2, …, 8号二极管。

在仿真系统中,先从1号二极管下面是在仿真系统中的实验结果:1.只有1号二极管点亮2.只有2号二极管点亮3.只有3号二极管点亮4.只有4号二极管点亮5.只有5号二极管点亮6.只有6号二极管点亮7.只有7号二极管点亮8.只有8号二极管点亮实验的结果:二极管的发光状态从1→2→3→4→5→6→7→8→7→…→1→2;如此往复循环。

流水灯控制实验

流水灯控制实验

综合实验:流水灯控制一、实验要求:根据开关状态选择八个流水灯的工作方式,且在任何状态下如有开关状态发生改变,则能立即转入最新开关状态所对应方式工作。

模式一:顺序点亮八个灯,一直循环,直到开关状态改变。

模式二:八个灯闪烁,即八盏灯全亮后全灭,一直循环,直到开关状态改变。

模式三:间隔点亮八个灯,如对八盏灯编号为L1、L2、L3、L4、L5、L6、L7、L8 ,则灯亮的方式为:L1 L3 L5 L7 ,L2 L4 L6 L8 ,L1 L3 L5 L7 ,L2 L4 L6 L8(从左往右循环)。

二、实验内容:开关S1、S2 分别与P3.1、P3.0连接,用于流水灯工作方式控制,开关组合为00、01、02、03,其中00为无效状态,01、02、03分别对应连续方式点亮灯、闪烁、间隔点亮。

八盏灯L1、L2、L3、L4、L5、L6、L7、L8分别与P1.0~P1.7连接,八盏灯为共阴极连接,即高电平点亮。

由于灯的状态改变时间间隔小于肉眼能分辨的最小时间间隔,所以在程序实现的时候必须在灯两种状态之间引入延时处理,以便肉眼能够分辨。

1.延时子程序(条件转移侧N,竖Y此页有效)四、程序代码:ORG 0000HSJMP MAINORG 0030HMAIN:MOV SP,#60HRESCAN:MOV A,#00HMOV P1,A ;灯全灭LCALL SCAN ;扫描P3口状态CJNE R0,#01H,NEXT1AJMP MODE1 ;如果P3=FDH,则转入MODE1执行(灯连续点亮)NEXT1: CJNE R0,#02H,NEXT2AJMP MODE2 ;如果P3=FEH,则转入MODE2执行(灯闪烁)NEXT2: CJNE R0,#03H,NEXT3AJMP MODE3 ;如果P3=FFH,则转入MODE3执行(间隔点亮灯)NEXT3: SJMP RESCAN ;如果P3=FCH(无效状态),则不停的对P3口扫描MODE1: ;灯连续点亮,从左往右(MODE1), P3=FDH MOV A,#00HMOV P1,AMOV R2,#80H ;R2=1000,0000LOOP1: MOV A,R2MOV P1,ARR AMOV R2,A ;A向右移一位后回送R2LCALL DEL200 ;调用200Ms延时子程序LCALL SCAN ;扫描P3口状态CJNE R0,#01H,NEXT01SJMP LOOP1 ;如果P3状态没变,跳到LOOP1执行NEXT01:CJNE R0,#02H,NEXT02AJMP MODE2 ;如果P3变为P3=FEH,跳到MODE2执行NEXT02: CJNE R0,#03H,NEXT03AJMP MODE3 ;如果P3变为P3=FFH,跳到MODE3执行NEXT03: AJMP RESCAN ;如果P3=FCH(无效状态),则不停的对P3口扫描MODE2: ;灯闪烁(MODE2), P3=FEHMOV A,#00HLOOP2: MOV P1,ACPL ALCALL DEL200 ;延时200MsPUSH ACC ;扫描P3状态前,保护现场LCALL SCAN ;扫描P3口POP ACC ;恢复现场CJNE R0,#02H,NEXT001SJMP LOOP2 ;如果状态没变,转到LOOP2执行NEXT001: CJNE R0,#01H,NEXT002AJMP MODE1 ;如果模式改变,P3=FEH,跳到MODE2NEXT002: CJNE R0,#03H,NEXT003SJMP MODE3 ;如果模式改变,P3=FFH,跳到MODE3NEXT003: AJMP RESCAN ;如果P3=FCH(无效状态),则不停的对P3口扫描MODE3:MOV A,#00H ;间隔点亮灯(MODE3),R0=03HMOV P1,AMOV R3,#04H ;R3,R4都用来控制当前趟第一个灯亮的初始位置MOV R4,#04HMOV A,#80H ;准备给P1送1000,0000LOOP3 :MOV P1,ARR ARR ALCALL DEL200 ;延时200MsDJNZ R3,LOOP3 ;判断当前(从第一个开始亮)趟结束MOV R3,#04H ;如果此趟结束,重设计数,为下一次做准备MOV A,#40H ;设置下一趟灯亮的初始位置(第二个)LOOP4: MOV P1,ARR ARR ALCALL DEL200 ;延时200MsPUSH ACC ;保护现场LCALL SCAN ;扫描P3口POP ACC ;现场恢复CJNE R0,#03H,NEXT21DJNZ R4,LOOP4 ;如果模式不变,且该趟没结束,则到LOOP4MOV R4,#04H ;如果此趟结束(模式没变),则重置计数,为下一次做准备MOV A,#80HSJMP LOOP3 ;执行当前模式的第二次亮灯NEXT21:CJNE R0,#01H,NEXT22AJMP MODE1 ;模式改变为MODE1则装到对应位置执行NEXT22: CJNE R0,#02H,NEXT23AJMP MODE2 ;模式改变为MODE2则装到对应位置执行NEXT23: AJMP RESCAN ;如果R0=00H(无效状态),则不停的对P3口扫描DEL200: ;如果晶振频率f=6MHz,误差为0MOV R7,#13HDL1: MOV R6,#14HDL0: MOV R5,#82HDJNZ R5,$ ;R5-1<>0时重复执行此句DJNZ R6,DL0DJNZ R7,DL1RETSCAN:JB P3.0,MM ;P3口状态扫描子程序JB P3.1,VVMOV A,#00HMOV R0,ARETVV:MOV A,#02HMOV R0,ARETMM:JB P3.1,NNMOV A,#01HMOV R0,ARETNN:MOV A,#03MOV R0,ARETEND五、实验分析1、误差分析:假如晶振频率f = 6MHz,那么一个机器周期t = 0.002Ms。

单片机实验LED流水灯实验

单片机实验LED流水灯实验

LED流水灯实验一、实验内容将LED灯逐个点亮,然后全亮,全灭。

二、实验原理8个LED发光二极管,分别对应单片机IO口的P0.0到P0.7口,8个单片机IO口组成一个字节,用一个八位二进制的左移和右移来确定灯的亮灭,并用定时器延时。

三、描述该实验中运用的理论知识1、LED的点亮:8个LED发光二极管,分别对应单片机IO口的P0.0到P0.7口,8个单片机IO口组成一个字节,在程序编写过程中,可以直接用P0来进行操作。

2、流水效果:C语言的8位二进制数代表了8个IO口,左移,最低位填0,然后按位取反,就可以将灯逐个点亮3、延时:特殊功能寄存器TMOD,如图T1和T0分别代表单片机两个计数器。

GATE:该位被置位时为门控位。

仅当TR1被置位并且INT1脚为高,定时器开始计数。

当该位被清零时,只要TR1被置位,定时器1马上开始计数。

C/T:该位为0的时候,用作定时器,该位为1的时候,用做计数器。

0.5秒的延时12 * (65536- x)/11059200 = 0.001四、实验步骤1、流程图2、结果程序:#include <reg52.h>typedef unsigned char uint8;typedef unsigned int uint16;sbit ENLED = P1^4;sbit ADDR0 = P1^0;sbit ADDR1 = P1^1;sbit ADDR2 = P1^2;sbit ADDR3 = P1^3;main(){uint8 counter;uint16 i,j;ENLED = 0;ADDR0 = 0; ADDR1 = 1; ADDR2 = 1; ADDR3 = 1;TMOD = 0x01;TH0 = 0xB8;TL0 = 0x00;TR0 = 1;while(1){if(1 == TF0){TF0 = 0;TH0 = 0xB8;TL0 = 0x00;counter++;}if(25 == counter){counter = 0;if(8 == j){P0 = 0X00;for(i=0;i<=38000;i++);P0 = 0XFF;for(i=0;i<=38000;i++);j = 0;}P0 = ~(1 << j++);}}}。

四、实现8个LED流水灯

四、实现8个LED流水灯

/***************项目名称:实现8个LED流水灯***************/ #include<reg52.h> //引用S52单片机头文件/***************定义8个LED引脚***************************/ sbit LED1=P1^0; //定义一个LED的引脚sbit LED2=P1^1; //定义另一个LED的引脚sbit LED3=P1^2;sbit LED4=P1^3;sbit LED5=P1^4;sbit LED6=P1^5;sbit LED7=P1^6;sbit LED8=P1^7;void Delay(void); //子函数的声明,后面要加分号。

void main() //主程序main函数{while(1) //在主程序中设置死循环"while(1)"{LED1=0; //P1.0口输出低电平,使LED1灯亮Delay(); //延时字函数的调用LED1=1; //P1.0口输出高电平,使LED1灯灭LED2=0; //P1.1口输出低电平,使LED2灯亮Delay(); //延时字函数的调用LED2=1; //P1.1口输出高电平,使LED2灯灭LED3=0; //P1.2口输出低电平,使LED3灯亮Delay(); //延时字函数的调用LED3=1; //P1.2口输出高电平,使LED3灯灭LED4=0; //P1.3口输出低电平,使LED4灯亮Delay(); //延时字函数的调用LED4=1; //P1.3口输出高电平,使LED4灯灭LED5=0; //P1.4口输出低电平,使LED5灯亮Delay(); //延时字函数的调用LED5=1; //P1.4口输出高电平,使LED5灯灭LED6=0; //P1.5口输出低电平,使LED6灯亮Delay(); //延时字函数的调用LED6=1; //P1.5口输出高电平,使LED6灯灭LED7=0; //P1.6口输出低电平,使LED7灯亮Delay(); //延时字函数的调用LED7=1; //P1.6口输出高电平,使LED7灯灭LED8=0; //P1.7口输出低电平,使LED8灯亮Delay(); //延时字函数的调用LED8=1; //P1.7口输出高电平,使LED8灯灭}}void Delay(void) //子函数的建立,延时一段时间的子函数{unsigned int i=50000; //声明一个int型的变量,即"int"的范围为0~65536 while(--i); //延时一段时间}。

流水灯实验报告

流水灯实验报告

单片机流水灯试验一、实验目的:1、进一步熟悉Keil C51集成开发环境调试功能的使用2、学会自己编写程序,进行编译、仿真调试3、学会使用单片机的P0口作为I/O口去控制外围电路,实现LED灯以固定的频率进行闪烁。

二、实验设备:1、PC机2、SW-51PROC单片机综合实验平台三、实验内容:1、编写一段程序,用单片机P0口的8个输出去控制8个LED灯,实现如下功能:先使8个LED灯轮流点亮,从左向右移动,时间间隔0.5s。

以上过程循环实现。

四、实验步骤:1、实验原理:单片机流水的实质是单片机各引脚在规定的时间逐个上电,使LED灯能逐个亮起来但过了该引脚通电的时间后便灭灯的过程,实验中使用了单片机的P2端口,对8个LED灯进行控制,要实现逐个亮灯即将P2的各端口逐一置零,中间使用时间间隔隔开各灯的亮灭。

使用rl或rr a实现位的转换。

A寄存器的位经过rr a之后转换如下所示:然后将A寄存器转换一次便送给P2即MOV P2,A便将转换后的数送到了P2口,不断循环下去,便实现了逐位置一操作。

2、实验电路图a11a223a34a4b1b2b3b45678GND0a11a223a34a4P2.4P2.5P2.6P2.75678a11a223a34a4P2.0P2.1P2.2P2.35678Vcc10+5v80C513通过仿真实验正确性代码如下:ORG 0MOV A,#00000001BLOOP:MOV P2,ARL AACALL DELAYSJMP LOOPDELAY:MOV R1,#255DEL2:MOV R2,#250DEL1:DJNZ R2,DEL1DJNZ R1,DEL2RETEndORG 0000HLJMP MAIN4、实验程序:ORG 0050HMAIN:MOV R0,#14MOV DPTR,#TABLEL0: MOV A,#0L1: MOVC A,@DPTR+AMOV P0,AACALL DELAY1INC A41DJNZ R0,L1SJMP L0DELAY1:MOV R1,#250LOOP1:MOV R2,#250LOOP2:NOPNOPNOPNOPNOPDJNZ R0,LOOP2DJNZ R1,LOOP1RETTABLE:DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FD HEND5、实验结果:五、实验总结这次试验我通过Proteus仿真实现对流水灯功能的实现。

多功能流水灯设计实验报告

多功能流水灯设计实验报告

多功能流水灯的设计一.设计要求:1.设计一8盏彩灯控制电路,使彩灯可以向左,向右流动、全亮、全灭四种功能。

功能变换可以手控也可以自控。

2.自动功能变换时间10秒。

二.总体方案构思:用Verilog语言来为单片机编程,通过编程来控制单片机各引脚在不同时间输出的不同的电平,进而控制个发光二级管的亮灭,以及控制流水灯的流速和流动方向。

1.使用按钮(auto)来控制手动或自动。

2.因为需要向左,向右,全亮,全灭四种功能,所以需要两个开关(btn1和btn2),分别用开和关两种状态表示,即(00,01,10,11)。

3.使用clk时钟来记时和触发事件。

三.实验器材:电脑和LED设备四.程序如下:module LED(clk,auto,btn1,btn2,led);input clk;input auto;input btn1;input btn2;output reg [7:0] led;reg [29:0] count;//1ns的计数器reg [3:0] count_10;//10秒的计数器reg [1:0] status;//记录当前LED灯流动的情况:"00左到右,01右到左,10全亮,11全灭"reg [1:0] type;reg second_1;//1秒的标志reg second_10;//10秒的标志initialbeginstatus<=2'b00;type<=2'b00;count<=30'b0;count_10<=4'b0;second_1<=1'b0;second_10<=1'b0;endalways@(posedge clk)//给出1s的标志和10s的标志beginif(count<25000000)//等待1s的到来begincount<=count+1;second_1<=0;second_10<=0;endelsebegincount<=0;second_1<=1;count_10<=count_10+1;if(count_10>=4'd10)beginsecond_10<=1;endendendalways@(posedge clk)//当自动的情况时,每10s变化一次流动状态beginif(auto==1 && second_1==1)beginif(second_10==1)beginif(status==2'b11)beginstatus<=2'b00;endelsebeginstatus<=status+1;endendendendalways@(posedge clk)//设置总变化状态等于手动或自动的状态beginif(second_1==1)beginif(auto==1)//自动begintype<=status;endelse//手动begintype<={btn1,btn2};endendendalways@(posedge clk)//根据type设置LED灯情况beginif(second_1==1)beginif(type==00)//左到右beginif(led==8'b00000000 || led==8'b11111111)beginled<=8'b10000000;endelsebeginled<=led>>1;endendelse if(type==01)//右到左beginif(led==8'b00000000 || led==8'b11111111)beginled<=8'b00000001;endelsebeginled<=led<<1;endendelse if(type==10)//全亮beginled<=8'b11111111;endelse//全灭beginled<=8'b00000000;endendendendmodule五.测试图如下:六.个人体会:在这次实验中收货颇丰,我学会了使用简单的Verilog语言,更加深入的学习了数字逻辑,还有更多的,我学会和同学们合作,讨论,去解决问题。

单片机流水灯实验报告

单片机流水灯实验报告

单片机流水灯实验报告单片机流水灯实验报告一、实验目的本实验旨在通过单片机控制八个LED灯,实现流水灯效果。

通过本实验,我们希望达到以下目的:1.深入理解单片机的I/O端口的工作原理和使用方法。

2.掌握单片机定时器/计数器的工作原理和使用方法。

3.学会编写简单的单片机程序,实现特定的LED灯控制。

4.通过实践操作,提高单片机软硬件的综合应用能力。

二、实验设备1.单片机开发板2.电脑一台3.八个LED灯4.杜邦线若干5.电阻、电容等电子元件三、实验原理本实验采用AT89C51单片机作为主控芯片。

八个LED灯分别连接到P1端口的P1.0到P1.7。

通过编程控制P1端口的每一个引脚,实现对LED灯的亮灭控制。

使用定时器/计数器实现延时,达到流水灯效果。

四、实验步骤和内容1.搭建硬件电路将八个LED灯、一个上拉电阻以及相应的杜邦线连接至单片机开发板。

确保电源正确连接,并注意LED灯的长脚为正极,短脚为负极。

2.编写程序使用Keil C51编写程序,实现如下功能:点亮每个LED灯一定的时间,然后熄灭。

重复此过程,形成流水灯效果。

代码如下:#include <reg51.h> //包含51单片机的头文件#define LED P1 //定义LED为P1端口void delay(unsigned int time) //延时函数{unsigned int i,j;for(i=0;i<time;i++)for(j=0;j<1275;j++);}void main() //主函数{while(1) //程序一直循环执行{unsigned char i=0; //定义一个变量i,用于循环控制LED灯while(i<8) //循环点亮每个LED灯{LED=~(0x01<<i); //点亮第i个LED灯delay(50000); //延时50ms(50*1275us)i++; //变量i加1,控制下一个LED灯}}}3.编译程序将程序编译为二进制文件,生成HEX文件。

8路流水彩灯实验报告报告

8路流水彩灯实验报告报告

重庆交通大学计算机与信息学院数电设计实验报告实验项目名称:8路彩灯能演示三种花型实验项目性质:设计性实验实验所属课程:数字电子技术基础实验室(中心):软件与通信实验中心班级:学生:学号:指导教师:实验完成时间:年月日教师评阅意见:签名:年月日实验成绩:一、设计题目:八路彩灯演示三种花型二、同组成员:许梦婷三、设计思路及方案设计:(一)、设计要求:1、八路彩灯能演示三种花型(花型自拟);2、要求用PROTEL画出原理图和PCB板,并能够用软件实现仿真(如multisim等);3、彩灯用发光二极管LED模拟,最后用万能板焊接成产品(选作:彩灯实现快慢两种节拍的变换)。

(二)、设计思路:提供的元件有74LS160---十进制计数器,74LS194---双向移位寄存器,555定时器,非门和与非门等。

根据所提供的元件,首先设计出自己的彩灯花型(按如下原理图中发光二极管LED的放置顺序为准说明):第一种花型:二极管4-1号依次发光,8-5号依次发光的同时4-1号又依次熄灭,之后4-1号又依次发光,此时1-8号都处于发光状态,最后从中间的1号和5号开始依次向两边熄灭,即1号向4号逐熄,5号向8号逐熄,花型完成;第二种花型:二极管1-4号依次发光,5-8号依次发光的同时1-4号又依次熄灭,之后1-4号又依次发光,此时1-8号都处于发光状态,最后从两边的4号和8号开始依次向中间熄灭,即4号向1号逐熄,8号向5号逐熄,花型完成;第三种花型:二极管1-4号依次发光,5-8号保持熄灭状态不变,1-4号又依次熄灭,花型完成。

脉冲计数00010000至00011001过程中,74LS194(1)中SL=SR=0,S0=1,即工作在左移0状态,二极管5-8号不发光,74LS194(2)中SL=SR=1,S0=0,即工作在右移1状态,使得二极管4-1号依次发光;脉冲计数00100000至00101001过程中,74LS194(1)中SL=SR=1,S0=1,即工作在左移1状态,二极管8-5号依次发光;74LS194(2)中SL=SR=0,S0=0,即工作在右移0状态,使得二极管4-1号依次熄灭;脉冲计数00110000至00111001过程中,74LS194(1)中的SL=SR=1,S0=1,即工作在左移1状态,使得二极管4-1号依次发光;74LS194(2)中SL=SR=1,S0=0,即工作在右移1状态,使得5-8号保持发光不变;脉冲计数01000000至01001001过程中,74LS194(1)中SL=SR=0,S0=0,即工作在右移0状态,使得5-8号依次熄灭;74LS194(2)中SL=SR=0,S0=1,即工作在左移0状态,使得1-4号依次熄灭,完成第一种花型;脉冲计数01010000至01011001过程中,74LS194(1)中SL=SR=0,S0=0,即工作在右移0状态,二极管8-5号不发光,74LS194(2)中SL=SR=1,S0=1,即工作在左移1状态,使得二极管1-4号依次发光;脉冲计数01100000至01101001过程中,74LS194(1)中SL=SR=1,S0=0,即工作在右移1状态,二极管5-8号依次发光;74LS194(2)中SL=SR=0,S0=1,即工作在左移0状态,使得二极管1-4号依次熄灭;脉冲计数01110000至01111001过程中,74LS194(1)中的SL=SR=1,S0=0,即工作在右移1状态,使得二极管8-5号保持发光;74LS194(2)中SL=SR=1,S0=1,即工作在左移1状态,使得1-4号依次发光;脉冲计数10000000至10001001过程中,74LS194(1)中SL=SR=0,S0=1,即工作在左移0状态,使得8-5号依次熄灭;74LS194(2)中SL=SR=0,S0=1,即工作在左移0状态,使得4-1号依次熄灭,完成第二种花型;脉冲计数10010000至10011001过程中,74LS194(1)中SL=SR=0,S0=1,即工作在左移0状态,使得5-8保持熄灭状态;74LS194(2)中SL=SR=1,S0=0,即工作在右移1状态,使得4-1依次发光;脉冲计数00000000至00001001过程中,74LS194(1)中SL=SR=0,S0=1,即工作在左移0状态,使得5-8保持熄灭状态;74LS194(2)中SL=SR=0,S0=0,即工作在右移0状态,使得4-1依次熄灭,完成第三种花型。

单片机实验2-LED流水灯实验实验

单片机实验2-LED流水灯实验实验

四、实验步骤: 实验步骤: 1. 实验原理图: 实验原理图:
1KΩ P1.0 P1.1 P1.2
VCC
MCU
P1.3 P1.4 P1.5 P1.6 P1.7 1KΩ
用导线把A2区的 接口与D1区的 用导线把 区的J61接口与 区的 区的 接口与 区的J52接口相连 接口相连
2. 编写程序思路: 编写程序思路: 用单片机P1口的 位输出控制8只 口的8位输出控制 用单片机 口的 位输出控制 只LED灯, 灯 每次点亮一只 LED,8只LED灯依次点亮, , 只 灯依次点亮, 灯依次点亮 点亮LED8之后同时点亮 个LED两秒时间, 之后同时点亮8个 两秒时间, 点亮 之后同时点亮 两秒时间 然后再依次点亮LED1~LED8,如此循环, 然后再依次点亮 ,如此循环, 即可形成流水灯。 即可形成流水灯。 •注意:因为人眼的视觉暂留时间为0.1s 注意:因为人眼的视觉暂留时间为 注意 (100ms),所以每个灯点亮的时间间隔应大于 所以每个灯点亮的时间间隔应大于 200ms。建议取 左右。 。建议取250ms左右。 左右
实验报告要求
1. 实验名称 2. 实验目的 3. 实验设备 4. 实验内容 5. 实验原理(图要画完整)及控制方法和过程的详细 实验原理(图要画完整) 说明。 说明。 6.实验编写的程序 实验编写的程序 7.实验结果 实验结果 8.心得和建议 心得和建议
实验报告不得抄袭
下次实验内容:手动扩展外部中断^INT0、 ^INT1。 下次实验内容 : 手动扩展外部中断 、 。 当 ^INT0产生中断时 , 使 LED 8盏灯流水显示 。 当 产生中断时, 盏灯流水显示。 产生中断时 盏灯流水显示 ^INT1产生中断时,使8盏LED停止流水显示。 产生中断时, 盏 停止流水显示。 产生中断时 停止流水显示 只数码管全亮; 注:当P1=00H时,8只数码管全亮; 时 只数码管全亮 全灭。 当P1=0FFH时,8只LDE全灭。 时 只 全灭 ^INT0:外接 外接SW1; 外接 ; ^INT1外接 外接SW2。 外接 。 设定外部中断边沿触发方式有效; 附:(1) 设定外部中断边沿触发方式有效; (2) 请设计一验证外部中断优先级。 请设计一验证外部中断优先级。

流水灯实验报告

流水灯实验报告

单片机流水灯实验一、任务让8个LED灯轮流亮起来,实现流水灯的功能。

二、思路让接在P0.0口的LED灯亮起来,那么只要把P0.0口的电平变为低电平就可以了;相反,如果要接在P0.0口的LED灯熄灭,就要把P0.0口的电平变为高电平就可以了。

要实现流水灯功能,只要将8个LED灯依次点亮、熄灭,8只LED 灯便会一亮一暗的做流水灯了。

我们应该注意一点,由于单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。

三、步骤1、用proteus画电路图。

如下图:2、用keil建工程。

1)运行keil C51软件,点击Project菜单新建项目,选择为AT89C52的单片机型号。

然后单击File选择New新建程序文件,保存成.c 文件,右击Source Group1添加入程序文件。

2)用C语言编写程序代码如下:#include <reg52.h>void delay (unsigned char tmp);code unsigned char tmpled[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};void main(void){unsigned char i;while (1){for(i=0;i<8;i++){P0=tmpled[i];delay(50);}}}void delay(unsigned char tmp){unsigned char i,j;i=tmp;while(i){i--;j=255;{j--;}}}3)右击Target 1打开设置,Output菜单下勾选上create hex file。

4)调试运行程序后,在proteus中双击单片机,添加hex文件,运行看到流水的的效果。

四、实验中遇到的问题。

1、用proteus仿真时候,发现错误:error variable not found parsing property resistance of RN1-Rnvalue expected for RN1-R (n=1~8)而且led灯亮度十分微弱。

流水灯 实验报告

流水灯 实验报告

流水灯实验报告流水灯实验报告引言:流水灯是一种常见的电子实验装置,通过控制多个LED灯的亮灭顺序,形成灯光在一定方向上流动的效果。

本实验旨在通过搭建流水灯电路,并观察其工作原理和效果,加深对电路和电子元件的理解。

一、实验目的本实验的目的是通过搭建流水灯电路,掌握流水灯的工作原理和实现方法,并了解电路中各个元件的作用。

二、实验材料1. Arduino开发板2. 面包板3. LED灯(至少8个)4. 220欧姆电阻(至少8个)5. 连线材料三、实验步骤1. 将Arduino开发板连接到电脑上,并打开Arduino IDE软件。

2. 在Arduino IDE软件中,编写代码,实现流水灯的效果。

3. 将面包板连接到Arduino开发板上,确保连接稳固。

4. 将LED灯和电阻连接到面包板上,按照流水灯的顺序排列。

5. 将面包板上的电路与Arduino开发板上的引脚相连接。

6. 上传代码到Arduino开发板,观察流水灯的效果。

四、实验结果与分析经过实验,我们成功搭建了流水灯电路,并实现了流水灯的效果。

当代码上传到Arduino开发板后,LED灯按照设定的顺序依次亮灭,形成了流动的效果。

通过对实验结果的观察和分析,我们可以得出以下结论:1. 流水灯的实现依赖于Arduino开发板的控制,通过控制引脚的高低电平,来控制LED灯的亮灭。

2. 电阻的作用是限制电流的流动,保护LED灯免受过大电流的损害。

3. 通过改变代码中的延时时间,可以调整流水灯的流动速度。

五、实验心得通过本次实验,我对流水灯的原理和实现方法有了更深入的了解。

在搭建电路的过程中,我学会了如何正确连接电子元件,并且通过编写代码,实现了流水灯的效果。

通过实验过程中的观察和分析,我对电路中各个元件的作用有了更清晰的认识。

此外,本次实验也让我意识到了电子实验的重要性。

通过亲自动手搭建电路,我不仅能够更好地理解电路的工作原理,还能够提高自己的动手能力和解决问题的能力。

八只LED灯做流水灯实验报告

八只LED灯做流水灯实验报告

51八只LED灯做流水灯实验第一节:单片机在上电初始后,其各端口输出为高电平。

如果我们现在想让接在P1.0口的LED1亮,那么我们只要把P1.0口的电平变为低电平就可以了。

想让LED1灭,LED0亮,只需将P1.0升高,P1.1变低,LED1就熄灭LED2随后既点亮!依始类推如下所示8只LED变会一亮一暗的做流水灯了。

本实验在“SP-51实验板”学习套件上的相关图纸:P1.0低、P1.0高、P1.1低、P1.1高、P1.2低、P1.2高、P1.3低、P1.3高、P1.4低、P1.4高、P1.5低、P1.5高、P1.6低、P1.6高、P1.7低、P1.7高、返回到开始、程序结束。

我们不能说P1.1你变低,它就变低了。

因为单片机听不懂我们的汉语的,只能接受二进制的“1、0......”代码。

我们又怎样来用二进制语议论使单片机按我们的意思去工作呢?为了让单片机工作,只能将程序写为二进制代码交给其执行;早期单片机开发人员就是使用人工编写的二进制代码交给单片机去工作的。

今天,我们不必用烦人的二进制去编写程序,完全可以将我们容易理解的“程序语言”通过“翻译”软件“翻译”成单片机所需的二进制代码,然后交给单片机去执行。

这里的“程序语言”目前主要有汇编和C两种;在这里我们所说的“翻译”软件,同行们都叫它为“编译器”,将“程序语言”通过编译器产生单片机的二进制代码的过程叫编译。

前面说到,要想使LED1变亮,只需将对应的单片机引脚电平变为低电平就可以了。

现在让我们将上面提到的8只LED流水灯实验写为汇编语言程序。

“汉语”语言汇编语言开始:star:P1.0低clr p1.0P1.0高setb p1.0P1.1低clr p1.1P1.1高setb p1.1这里用到了四条汇编指令:clr、setb、ljmp 、end;clr:是将其后面指定的位清为0;setb:是将其后面指定的位置成1;ljmp:是无条件跳转指令,意思是:跳转到指定的标号处继续运行。

流水灯的实验报告

流水灯的实验报告

流水灯的实验报告流水灯的实验报告引言:流水灯是一种常见的电子实验装置,通过控制电流的开关,使得灯光在一串LED灯中依次流动,形成一种流动的效果。

本次实验旨在通过搭建流水灯电路并观察其工作原理,加深对电路原理的理解。

实验材料:1. LED灯:共计8个,颜色可根据实际情况而定。

2. 电阻:共计9个,阻值可根据实际情况而定。

3. 开关:1个,用于控制电流的开关。

4. 面包板:用于搭建电路。

5. 连接线:用于连接电路中的各个元件。

实验步骤:1. 将面包板放在平稳的桌面上,确保面包板上的连接孔没有损坏。

2. 将8个LED灯均匀地插入面包板上的连接孔中,注意将LED的正极连接到面包板上的正极线路,负极连接到负极线路。

3. 在每个LED灯的正极和负极之间插入一个电阻,以限制电流的流动。

4. 在面包板的一端插入一个开关,用于控制电流的开关。

5. 使用连接线将LED灯、电阻和开关依次连接起来,确保连接线的接触牢固。

6. 将实验电路连接到电源,注意正负极的连接。

7. 打开开关,观察LED灯的亮灭情况。

实验结果:在实验过程中,我们观察到以下现象:1. 当开关打开时,电流开始流动,第一个LED灯点亮。

2. 随着时间的推移,电流依次流过每个LED灯,使其依次点亮。

3. 当电流流过最后一个LED灯时,电流会重新回到第一个LED灯,循环往复。

实验分析:通过实验结果的观察,我们可以得出以下结论:1. 流水灯的工作原理是基于电流的流动和开关的控制。

2. 当电流通过一个LED灯时,LED灯会发光。

而当电流通过下一个LED灯时,前一个LED灯会熄灭。

3. 通过合理的电路设计和控制开关的开闭,可以实现LED灯的流动效果。

实验应用:流水灯作为一种简单的电子实验装置,具有广泛的应用前景:1. 教育领域:流水灯可以用于教学实验,帮助学生理解电路原理和开关控制。

2. 娱乐领域:流水灯可以作为装饰灯具,增加房间的氛围和趣味性。

3. 工业领域:流水灯可以应用于指示灯、广告灯箱等领域,起到提示和宣传的作用。

数电流水灯实验报告

数电流水灯实验报告

竭诚为您提供优质文档/双击可除数电流水灯实验报告篇一:东南大学数字电路实验报告(五)东南大学电工电子实验中心实验报告课程名称:数字逻辑电路实验第五次实验实验名称:时序逻辑电路设计院(系):电气工程专业:电气工程及自动化姓名:学号:实验室:104实验时间:20XX年12月13日评定成绩:审阅教师:一、实验目的1.2.3.4.掌握时序逻辑电路的一般设计过程;掌握时序逻辑电路的时延分析方法,了解时序电路对时钟信号相关参数的基本要求;掌握时序逻辑电路的基本调试方法;熟练使用示波器和逻辑分析仪观察波形图,并会使用逻辑分析仪做状态分析。

二、实验原理1.时序逻辑电路的特点(与组合电路的区别):——具有记忆功能,任一时刻的输出信号不仅取决于当时的输出信号,而且还取决于电路原来的值,或者说还与以前的输入有关。

2.时序逻辑电路的基本单元——触发器(本实验中只用到D触发器)触发器实现状态机(流水灯中用到)3.时序电路中的时钟1)同步和异步(一般都是同步,但实现一些任意模的计数器时要异步控制时钟端)2)时钟产生电路(电容的充放电):在内容3中的32768hz的方波信号需要自己通过电路产生,就是用到此原理。

4.常用时序功能块1)计数器(74161)a)任意进制的同步计数器:异步清零;同步置零;同步置数;级联b)序列发生器——通过与组合逻辑电路配合实现(计数器不必考虑自启动)2)移位寄存器(74194)a)计数器(一定注意能否自启动)b)序列发生器(还是要注意分析能否自启动)三、实验内容1.广告流水灯a.实验要求用触发器、组合函数器件和门电路设计一个广告流水灯,该流水等由8个LeD组成,工作时始终为1暗7亮,且这一个暗灯循环右移。

①写出设计过程,画出设计的逻辑电路图,按图搭接电路。

②将单脉冲加到系统时钟端,静态验证实验电路。

③将TTL连续脉冲信号加到系统时钟端,用示波器和逻辑分析仪观察并记录时钟脉冲cLK、触发器的输出端Q2、Q1、Q0和8个LeD上的波形。

单片机实验报告流水灯

单片机实验报告流水灯

单片机实验报告流水灯单片机实验报告:流水灯引言:单片机是现代电子技术中非常重要的一部分,它广泛应用于各个领域,如家电、汽车、通信等。

单片机实验是学习单片机的基础,通过实际操作来理解单片机的原理和应用。

本报告将介绍一个常见的单片机实验项目——流水灯实验。

一、实验目的流水灯实验旨在通过控制单片机的IO口,实现多个LED灯按照顺序依次点亮和熄灭的效果。

通过这个实验,可以加深对单片机IO口的控制和编程的理解。

二、实验器材1. 单片机开发板:我们使用的是STC89C52开发板,它是一种基于8051内核的单片机开发板。

2. LED灯:我们使用了8个LED灯,分别连接到单片机开发板的8个IO口上。

3. 连接线:用于连接单片机开发板和LED灯。

三、实验原理流水灯实验的原理很简单,通过控制单片机的IO口输出高低电平来控制LED灯的亮灭。

当某个IO口输出高电平时,对应的LED灯点亮;当IO口输出低电平时,对应的LED灯熄灭。

四、实验步骤1. 连接电路:将8个LED灯分别连接到单片机开发板的8个IO口上,确保连接正确。

2. 编写程序:使用C语言编写单片机程序,控制IO口的高低电平变化。

程序的主要逻辑是通过一个循环,依次将某个IO口输出高电平,然后延时一段时间,再将该IO口输出低电平,再延时一段时间,以此循环实现流水灯的效果。

3. 烧录程序:将编写好的程序烧录到单片机开发板中,确保程序能够正确运行。

4. 调试实验:将单片机开发板连接到电源,观察LED灯是否按照预期的顺序点亮和熄灭。

如果有问题,可以通过调试程序或检查电路连接来解决。

五、实验结果经过调试和实验,我们成功地实现了流水灯的效果。

8个LED灯按照顺序依次点亮和熄灭,形成了一个流动的灯光效果。

这个实验不仅让我们学习了单片机的IO口控制,还提高了我们的动手能力和解决问题的能力。

六、实验总结通过这个实验,我们深入了解了单片机的原理和应用。

单片机作为一种微型计算机,具有体积小、功耗低、成本低等优点,广泛应用于各个领域。

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

51八只LED灯做流水灯实验第一节:单片机在上电初始后,其各端口输出为高电平。

如果我们现在想让接在P1.0口的LED1亮,那么我们只要把P1.0口的电平变为低电平就可以了。

想让LED1灭,LED0亮,只需将P1.0升高,P1.1变低,LED1就熄灭LED2随后既点亮!依始类推如下所示8只LED变会一亮一暗的做流水灯了。

本实验在“SP-51实验板”学习套件上的相关图纸:P1.0低、P1.0高、P1.1低、P1.1高、P1.2低、P1.2高、P1.3低、P1.3高、P1.4低、P1.4高、P1.5低、P1.5高、P1.6低、P1.6高、P1.7低、P1.7高、返回到开始、程序结束。

我们不能说P1.1你变低,它就变低了。

因为单片机听不懂我们的汉语的,只能接受二进制的“1、0......”代码。

我们又怎样来用二进制语议论使单片机按我们的意思去工作呢?为了让单片机工作,只能将程序写为二进制代码交给其执行;早期单片机开发人员就是使用人工编写的二进制代码交给单片机去工作的。

今天,我们不必用烦人的二进制去编写程序,完全可以将我们容易理解的“程序语言”通过“翻译”软件“翻译”成单片机所需的二进制代码,然后交给单片机去执行。

这里的“程序语言”目前主要有汇编和C两种;在这里我们所说的“翻译”软件,同行们都叫它为“编译器”,将“程序语言”通过编译器产生单片机的二进制代码的过程叫编译。

前面说到,要想使LED1变亮,只需将对应的单片机引脚电平变为低电平就可以了。

现在让我们将上面提到的8只LED流水灯实验写为汇编语言程序。

“汉语”语言汇编语言开始:star:P1.0低clr p1.0P1.0高setb p1.0P1.1低clr p1.1P1.1高setb p1.1这里用到了四条汇编指令:clr、setb、ljmp 、end;clr:是将其后面指定的位清为0;setb:是将其后面指定的位置成1;ljmp:是无条件跳转指令,意思是:跳转到指定的标号处继续运行。

end:是一条告诉编译器:程序到此结束的伪指令。

伪指令只告诉编译器此程序到此有何要求或条件,它不参与和影响程序的执行。

这里需要说明的是,按汇编语法要求,所编制的程序(下称源程序)之格式和书写要求必须依下列原则:1、源程序必须为纯文本格式文件,如用Windows“附件”中的“记事本”编写的文本文件;2、源程序的扩展名应是*.ASM;3、一行只能写一条语句,以回车作为本句的结束,每一语句行长度应少于80个字符(即40个汉字)。

4、每行的格式应为:标号:命令参数;注释即一行由四部份组成,各部份的顺序不能搞错,依实际要求可以缺省其中的一部份或几部份,甚至全部省去,即空白行。

需要使用标号时标号后面必须有“:”(冒号),而命令语句和参数之间必须用空格分开,如果命令有多个参数,则参数与参数之间必须用“,”(逗号)分开,需要注释时注释前必须用“;”(分号),“;”后面的语句可以写任何字符,包括汉字用于解释前面的汇编语句,它将不参与汇编,不生成代码。

由于汇编程序对我们还不直观,所以在编写源程序时,应当养成多写注释的习惯,这样有助于今后源程序的阅读和维护。

标号是标志程序中某一行的符号名,编译后标号的数值就是标号所在行代码的地址。

在宏汇编ASM51中标号的长度不受限制,但标号中不能包含‘:’或其它的一些特殊符号,也不能用汉字,可以用数字作标号,但必须用字母开头。

当标号作参数用(如标号作转移地址),在命令后面出现时,必须舍去‘:’(如上面程序中的LJMP STAR中的STAR 是不能再有:)。

每行只能有一个标号,一个标号只能用在一处,如果有两行用了同一个标号,则汇编时就会出错。

由于标号的长度没有限制,可以用有意义的英文或汉语拼音来说明行,使源程序读起来更方便。

源程序中的字母不区分大小写,也就是说star 和STAR 是一样的,请不要用大小写方式去区分不同的标号。

好拉!规矩知道了,现在该来看看前面我们编写的源程序该怎样处理了:编写源程序:先将编译软件安装好(c51eval 软件的安装)。

软件安装好我们就可以编写程序了。

第一步:双击Uvw51图标,出现如图一所示的主界面第二步:新建文件单击菜单栏内的“文件----新建”或者单击图标按钮则在上图所示的灰色区域内出现一个白色的编辑区,这时我们就中以在这里编辑程序了。

如图二所示。

图二第三步:编程程序建立了一个新的编程文件后,我们就可以在这里编写我们所需要的程序了,下面我们就来编写前面所说的程序吧。

!如图三所示:第四步:保存文件程序编写好了,我们当然要记得保存了,要不我们编写程序就白费劲了。

好了,下面我们将上面编写的程序保存起来:单击“文件----保存”或者单击图标,出现如图四所示的对话框:图四这时参照图五所示将对话框的内容设置好:c51eval保存文件时默认的文件扩展是名*.C,请按图五所示改变为为*.a51:图五我们这里就先将文件保存在D/DDW文件夹中,文件名你可以随便取,这里先叫他为LED.a51;需强调的是保存文件的文件夹和文件名不能使用中文!即保存文件时不能以如下格式保存:正确的保存路径:D/D DW/LED.a51 当然,保存的文件夹名DDW、编写的程序的文件名LED,你都可以随意的取一个,可以是D/ABC/000.a51。

这就取决于你的兴趣了。

错误的保存路径:D/源程序/DDW/LED.a51,或者是D/DDW 流水灯程序.a51。

总之在源程序的保存路径下不能有中文的出现,同时文件名不能取的太长。

第五步:建立项目将汇编的源程序保存后,还没有得到我们所需要的文件,这时我们还需要再建立项目,以便得到我们所需的hex文件。

新建项目的步骤如下:首先先打开新建项目的对话框文件,如图六所示:图六点击新建项目后出现如图七所示的对话框,我们将对话框的参数设定好。

将文件名设置成与刚才源程序的文件名相同,即设为LED.prj,同时保存的路径跟前面的源程序保存的路径一样,在D/DDW上。

现在就可以把刚才建立的项目文件LED.prj添加到刚保存的LED.A51源程序上了,注意它们都在同一个根目录下。

图七按图七所示操作后,会出现如图八所示的对话框:图八点击“(A)加”出现如图九所示画面:图九按图九所示完成操作后,软件会自动打开一个对话框,如图十所示:图十如图十所示点击保存后,系统会自动回复到汇编状态。

这时点击*创建所有图标*按钮,则进行了转换,并出现如图十一所示的状态显示画面:图十一完成上述操作后,在图十一,我们看到了创建成功了的提示画面,这时我们点击OK就大功告成了。

打开我们文件的保存路径:我的电脑/D/DDW 我们可以看到包含hex文件在内的所有相关程序文件了。

我们上面的项目文件也在其中了。

他的名字叫作LED.hex文件。

好啦,到此我们已将第一个流水灯程序编写、编译、烧写进行完啦,再下来就是将烧写好的AT89C51从编程器上取下,放到“SP-51实验板”学习套件的实验部份通电让LED1~LED8“流水”。

说明:由于单片机的时钟高达12MHz,8个LED发光与熄灭的时间很短,实际实验结果凭我们的肉眼是看不到“流水”效果的!那怎样才能让我们肉眼看到“流水”灯效果呢?请继续学习下节课流水灯实验详解二上一节的实验最后没有得到“流水”显示的效果,主要是单片机执行每条指令的时间很短,我们肉眼无法看到LED的熄灭与点亮。

单片机内部能按部就班的自动工作,正是在系统时钟的作用下,内部各逻辑硬件产生各种所需脉冲信号而实现的。

这个时钟信号(既晶体振荡信号)的周期称“振荡周期”。

我们这个实验中晶体使用的是12MHZ. 在单片机中,要处理最短周期的一条指令需要由12个振荡周期(既晶振振荡周期)组成的,这个叫“机器周期”。

8051核的单片机,大多数指令只用一个机器周期(既单周期),也有双周期和四周期的指令。

本实验中用到的SETB P.x和CLR P.x均属于单周期指令,也就是说,执行一句 SETB P.x 用时仅1uS(微秒),CLR P.x 也是1uS;难怪我们前面的程序不能看到流水效果。

现在,将程序改动一下,在每点亮一个LED后,让程序干点别的事,也就是让它等一会再将该LED熄灭,继续执行下面的程序:请将上面的程序保存为 1LED.asm,进行编译,并烧写到AT89S51中,之后将89S51安装到套件的实验部份插座上实验,这回显示的就是“流水灯”的效果了!?回过头,让我们看看延时子程序是怎样工作的:单片机内部有不少寄存器,这些寄存器在单片机通电时,你可以给他写入数据(是单片机按你程序要求写的数据,而不是编程器写的),当第二次给他写入新数据时,前次的数据就被新数据覆盖;当然也可以从寄存器中读取数据。

当单片机没有电源供给时,寄存器内部的数据也随即消失;这些寄存器人们叫他RAM,而用编程器将我们编写的程序烧写到单片机中的存储器叫ROM;现在,我们应该清楚:RAM是让程序去使用的,ROM是我们编写的程序存放的地方!前面说过,单片机内部有不少RAM,本实验用的AT89C51有多少寄存器?我们现在不必关心,现在只须知道单片机内部有名叫R0~R7 的这8个寄存器。

这8个寄存器每个都由8个单独的位寄存器组成,最大存放数据为二进制的 1111 1111,十六进制 = FF,十进制 = 255。

在使用时注意不要大于其有效范围。

上面延时程序中,先用到 MOV R1,#50 ,MOV是移动的意思,该句是将50这个十进制数放到R1中;50是立即数,按汇编语言要求前面要加“#”号,汇编语言还规定,十六进制数后面要加“?H”,十六进制数的高位是字母时在字母前面还要加“0”,例如:#0F8H;二进制数后面加“B”,例如:#11110000B。

十进制不加,例如:#100。

延时程序的第二、三句为: MOV R2,#100 ;MOV R3,#100 ;这两句意思同前。

第四句中DJNZ R3,$ 的意思是将 R3 里面的数减 1 后如果 R3 不等于 0 则跳到后面指定的程序位置,这里的“$”既要跳转的程序位置,“$”代表当前语句处,也就是说,R3不等于 0,程序返回再次执行本句。

如果R3 减 1 后等于0,程序结束本句,继续执行下面的语句。

延时程序的最后一句是RET ,意思是退出本子程序,返回到调用本子程序处的下一句。

根据上面的解释,一进入延时子程序首先为R1, R2, R3 寄存器装入我们需要的数据,然后先对R3 进行减数,每次减 1 ,R3 减完后减R2 ,减R2 时就费事啦,因为R2 每减 1 后不为 0 需要跳转到AD11 标号处执行下面的语句,此时R3 再次装入数据100,并且还要再次对R3 进行减数......,R2 减完后减R1,减R1的过程你研究研究看看。

相关文档
最新文档