汇编流水灯实验
实验流水灯程序
实验二“流水灯”一、实验目的:1.初步了解汇编语言2.通过实验了解单片机最小系统3.了解单片机的I/O口通信。
4.学习延时子程序的编写和使用.二、实验内容:1. 流水灯(跑马灯)(1)……MOV P1, #7FHACALL DELAYMOV P1, #0BFHACALL DELAYMOV P1, #0DFHACALL DELAY……MOV P1, #0FDHACALL DELAYMOV P1, #0FFHACALL DELAY……不科学(2)ORG 00H ;起始地址START: ;程序一开始,初始一些所需要变量,如进位C的清0等MOV A, #0FFH ;累加器A的8位全置1(0FFH),发光二极管全熄灭...CLR C ;进位..0.,.C=0..C.被清MOV R1, #8 ;R1=8,循环..8.次(右移..作计数器......,.用.R1....8.次)RIGHT: ;这是发光二极管向右“流动”......的循环体RRC A ;把进位C在累加器A中从左向右....轮换一位MOV P1, A ;输出至P1口ACALL DELAY ;调延时子程序,延时200msDJNZ R1, RIGHT ;R1减1,如果不为0跳回RIGHT循环执行JMP START ;跳回一开始,重复执行该流水灯程序DELAY: ;延时200ms的子程序MOV R3, #20D1:MOV R4, #20D2:MOV R5, #248 ; 2+248×2=498=498μsDJNZ R5, $;R5减1,如果不为0,就执行本行DJNZ R4, D2 ;2+20×(498+2)=10002μs≈10msDJNZ R3, D1RET ;子程序结束标志,返回主程序END ;程序结束点(3)取表法要显示的数据之间不存在简单的运算关系,不能使用ADD和SUBB等指令根据上一状态计算出下一状态的显示值。
但显示的数据存在依次取用的特点,这时一般就会用到取表的方法。
流水灯(电路和汇编)-Proteus和Keil仿真演示实例知识讲解
流水灯(电路和汇编)-P r o t e u s和K e i l仿真演示实例示例要求:在80C51单片机的P2口连接8个发光二极管指示灯,编程实现流水灯的控制,轮流点亮指示灯。
在KEIL 51中编程序,形成HEX文件;在PROTEUS中设计硬件,下载HEX文件,运行看结果。
第1篇:PROTEUS电路设计1、打开PROTEUS的ISIS软件,如图1所示。
新建电路图文件,将文件保存到E:\projectio (新建文件夹projectio)下面,文件基本名为io,扩展名默认。
选择元图1 ISIS窗口图2、在component mode模式下单击选择元件按钮P,打开元件选择对话框,如图2所示。
图2 元件选择窗口在元件选择对话框的keywords窗口中输入元件关键字可换搜索元件,找到元件后,双击元件则可选中元件,添加元件到图3的device列表栏。
在这里依次添加元件单片机80C51、电阻RES、电容CAP、按键BUTTON、晶振CRYSTAL、发光二极管LED-RED,如图3所示。
图3 添加元件的device列表栏3、选择devices元件列表中的元件放到工作窗口,注意放置在工作窗口合适的位置,在元件放置时可对元件进行移动、旋转等操作;如图4所示。
电源(POWER)与地(GROUND):(右键-放置-终端里选)。
图4 放置元件图4、连接导线,如图5所示。
连接后存盘。
图5 连接元件图5、在Keil软件中设计软件程序,形成HEX文件(具体过程见第2篇Keil软件编程)。
保存软件项目到电路文件相同的文件夹E:\projectio下。
6、在PROTEUS电路图中,单击单片机80C51芯片,选中,再次单击打开单片机80C51的属性对话框,在属性对话框中的program file框中选择下载到80C51芯片中的程序。
这里是同一个文件夹下面的shili.hex文件。
如图6所示。
图6 下载程序到单片机7、单击仿真运行按钮play,运行程序。
[整理版]80c51花样流水灯(汇编)
一:80c51花样流水灯的控制。
要求:利用查表的方法控制流水灯,接线如下汇编程序如下:ORG 0000H ; 定义程序地址从0000H开始存放JMP MAIN ;跳转至主程序ORG 0030H ;设置主程序地址MAIN:MOV DPTR,#TABLE ;将TABLE的地址赋给DPTRONE: CLR A;累加器清零MOVC A,@A+DPTR ;取出表中的数据CJNE A,#0FFH,TWO ;判断是不是表中最后的0FFH,如果不是则跳转至TWOJMP MAIN ;如果是表中最后的0FFH,则跳转至main,重新运行TWO: MOV P1,A;将数据输出至p1口CALL DELAY;调用延时程序INC DPTR ;修改指针DPTR,指向表中下一个数据JMP ONE ;跳转至oneDELAY:MOV R3,#20 ; 延时子程序定义D1: MOV R4,#100D2: MOV R5,#230DJNZ R5,$DJNZ R4,D2DJNZ R3,D1RETTABLE: ; 花样流水灯的表,可以自由定义DB 01111111BDB 10111111BDB 11011111BDB 11101111BDB 11110111BDB 11111011BDB 11111101BDB 11111110BDB 11111110BDB 11111101BDB 11111011BDB 11110111BDB 11101111BDB 11011111BDB 10111111BDB 01111111BDB 11100111BDB 11011011BDB 10111101BDB 01111110BDB 10111101BDB 11011011BDB 11100111BDB 11100111BDB 11011011BDB 10111101BDB 01111110BDB 10111101BDB 11011011BDB 11100111BDB 01010101BDB 10101010BDB 00110011BDB 11001100BDB 11110000BDB 00001111BDB 10001000BDB 0FFH ;用作表的结尾的标志,可自由定义。
arm实验报告——流水灯
实验六 ARM环境下汇编语言与C语言实验一、实验目的1 掌握基本的ARM汇编语言和C语言编程方法2 掌握ADS下C语言和汇编语言互相调用的方法3 深入理解ARM开发环境的体系结构4 初步掌握S3C2410的I/O口德操作方法5 巩固使用AXD和Multi-ICE调试的方法二、实验内容1 单独使用ARM汇编语言编写一个程序,在AXD下调试,观察结果。
2 采用内嵌汇编和C完成一个工程在AXD下调试,观察结果。
3 用C语言实现跑马灯功能。
三、实验设备1 硬件:DM2410B+实验系统PC机JTAG仿真器串口线2 软件:PC机操作系统ARM Developer Suiter v1.2Multi-ICE v2.2.5(Build1319)DNW2410(或超级终端)四、实验说明汇编语言程序实验程序程序代码如下:#include <string.h>#include "2410addr.h"#include "2410lib.h"//================================ //名称:Led_Test//功能:LED循环显示//参数: void//返回值: void//================================ void Led_Test(){unsigned long LED;Uart_Printf("Led_Test.\n");//GPBCON GPB10 [21:20] = 01 : Output//GPBCON GPB10 [19:18] = 01 : Output//GPBCON GPB10 [17:16] = 01 : Output//GPBCON GPB10 [15:14] = 01 : OutputrGPBCON &= (~(0x3<<20));rGPBCON |= ((0x1<<20));rGPBCON &= (~(0x3<<18));rGPBCON |= ((0x1<<18));rGPBCON &= (~(0x3<<16));rGPBCON |= ((0x1<<16));rGPBCON &= (~(0x3<<14));rGPBCON |= ((0x1<<14));//GPBDAT GPB[10:0] [10:0] : Output DatarGPBDAT = 0xf7f;Delay(100);Uart_Printf("PRESS ANY KEY TO STOP.");while (!Uart_GetKey()){LED = rGPBDAT;LED = (LED<<1); //下一个灯亮rGPBDAT = LED;Delay(200);if(!(rGPBDAT & 0x400)) //保证第四个LED点亮后重新点亮第一个LED;rGPBDAT=0xf7f;Delay(200);}Uart_Printf("\nTEST FINISHED.");}//============================//名称:delay//功能:延迟指定时间//参数: x//返回值: void//============================void delay(unsigned int x){unsigned int i,j,k;for(i=0;i<=x;i++)for(j=0;j<0xff;j++)for(k=0;k<0xff;k++);}六实验步骤第一大部分(目标机的连接):把开发板电源接口、Muilti-ICE Embeded接口连接好,如下图,然后打开开发板电源。
单片机实验报告一--汇编程序之流水灯
MOV TH1,#0B0H;设置定时初值
CLR TF1;清除TF1标志
SETB TR1;定时器1开始计时
RET
END
五、实验现象
形成了1S间隔的八位流水灯。
三、电路原理图
四、程序源代码
ORG 0000H
SJMP START
ORG 0030H
START:
JB P2.0,$ ;阻塞等待启动按钮按下
ACALL TIMER1INIT
MOV A, #0FEH
MOV R7,#08H
MOV R6,OV P1,A
NEXT:
JNB TF1,$ ;阻塞,查询方式等待定时50ms时间
MOV TL1,#3CH;设置定时初值
MOV TH1,#0B0H;设置定时初值
CLR TF1
;SETB TR1
DJNZ R6,NEXT
RL A
MOV R6,#20
DJNZ R7,loop
MOV R7,#08H
SJMP loop
TIMER1INIT:;50毫秒@12.000MHz
MOV TMOD,#10H;设置定时器1的模式
《单片机实验》实验报告
实验序号:2实验项目名称:汇编程序实现流水灯
学 号
27
姓 名
李泽
班级
电子信息1005
实验地点
综合楼
指导教师
刘剑
实验时间
一、实验目的及要求
要求用汇编指令实现八位流水灯,并在Proteus仿真环境下演示实验效果
二、实验设备(环境)及要求
PC机一台、Keil uVision4编译软件、Proteus仿真平台
51八只LED灯做流水灯实验
51八只LED灯做流水灯实验第一节:单片机在上电初始后,其各端口输出为高电平。
如果我们现在想让接在P1.0口的LED1亮,那么我们只要把P1.0口的电平变为低电平就可以了。
想让LED1灭,LED0亮,只需将P1.0升高,P1.1变低,LED 1就熄灭LED2随后既点亮!依始类推如下所示8只LED变会一亮一暗的做流水灯了。
本实验在“SP-5 1实验板”学习套件上的相关图纸: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.1P1.2低clr p1.2P1.2高setb p1.2这里用到了四条汇编指令:clr、 setb、 ljmp 、end;clr:是将其后面指定的位清为0;setb:是将其后面指定的位置成1;ljmp:是无条件跳转指令,意思是:跳转到指定的标号处继续运行。
流水灯汇编程序 (4)
流水灯汇编程序介绍流水灯是一种常见的电子显示装置,通过多个灯泡(或LED)按照一定的节奏依次亮起和熄灭,形成一个像水流一样流动的效果。
本文档介绍了一种汇编语言编写的流水灯程序。
硬件环境本程序使用单片机作为控制设备,需要以下硬件环境:•单片机开发板•LED灯泡(或LED灯带)•连接线软件环境本程序使用汇编语言编写,需要以下软件环境:•汇编语言开发环境(如Keil等)•单片机烧录工具(如ST-Link等)程序功能该流水灯程序通过控制不同IO口的电平,实现了多个LED 灯按照一定的节奏依次点亮和熄灭的效果。
具体的实现逻辑如下:1.初始化IO口:将用于连接LED的IO口配置为输出模式,并初始化电平为低电平。
2.循环控制:进入一个无限循环,以持续驱动流水灯的效果。
3.逐个点亮:依次将每个LED对应的IO口电平设置为高电平,达到点亮效果。
4.延时控制:通过延时操作,控制每个LED点亮的持续时间。
5.逐个熄灭:依次将每个LED对应的IO口电平设置为低电平,达到熄灭效果。
6.延时控制:通过延时操作,控制每个LED熄灭的间隔时间。
通过不断的逐个点亮和熄灭操作,就能够实现流水灯的效果。
根据实际需要,可以调整延时时间,来改变流水灯的速度和亮暗程度。
汇编代码ORG 0x00 ; 程序入口地址; 定义IO口对应的物理地址LED_BASE EQU 0x50000000 ; LED基地址LED0_OFF EQU 0 ; LED0关闭偏移量LED1_OFF EQU 4 ; LED1关闭偏移量LED2_OFF EQU 8 ; LED2关闭偏移量LED3_OFF EQU 12 ; LED3关闭偏移量; 定义延时函数DelayLDR R1, =1000000 ; 设置延时时间,根据实际需要调整DelayLoopSUBS R1, R1, #1 ; 计数器减1BNE DelayLoop ; 若计数器不为0,则跳转继续延时BX LR ; 延时结束,返回; 主程序入口Main; 初始化IO口LDR R0, =LED_BASE ; 加载IO口基地址STR R0, [R0, #LED0_OFF] ; 设置LED0为输出模式 STR R0, [R0, #LED1_OFF] ; 设置LED1为输出模式 STR R0, [R0, #LED2_OFF] ; 设置LED2为输出模式 STR R0, [R0, #LED3_OFF] ; 设置LED3为输出模式; 循环控制Loop; 逐个点亮STR R0, [R0, #LED0_OFF] ; LED0点亮BL Delay ; 延时一段时间STR R0, [R0, #LED1_OFF] ; LED1点亮BL Delay ; 延时一段时间STR R0, [R0, #LED2_OFF] ; LED2点亮BL Delay ; 延时一段时间STR R0, [R0, #LED3_OFF] ; LED3点亮BL Delay ; 延时一段时间; 逐个熄灭STR R0, [R0, #LED0_OFF] ; LED0熄灭BL Delay ; 延时一段时间STR R0, [R0, #LED1_OFF] ; LED1熄灭BL Delay ; 延时一段时间STR R0, [R0, #LED2_OFF] ; LED2熄灭BL Delay ; 延时一段时间STR R0, [R0, #LED3_OFF] ; LED3熄灭BL Delay ; 延时一段时间B Loop ; 跳转到循环开始的位置END ; 程序结束使用方法1.将上述汇编代码保存为一个以.asm为后缀的文件,如led.asm。
单片机—流水灯实验(汇编版)
实验一流水灯实验一、实验目的1、实验目的:1)简单I/O引脚的输出2)掌握软件延时编程方法3)简单按键输入捕获判断二、实验实现的功能1)开机是点亮12发光二极管,闪烁三下2)按照顺时针循环依次点亮发光二极管3)通过按键将发光二极管的显示改为顺逆时针方式三、系统硬件设计由于发光LED平均电流为5mA时亮度较好,而单片机端口电压约为5V,故所需电阻为1K。
四、系统软件设计说明:1、4键顺时针,2、4键逆时针,3、6键复位。
Led从按键触发时的位置开始反向。
/*******流水灯实验*******/ORG 0000HORG 0030H/*********主程序*********/MAIN: LCALL FLASH ;调用使12个led闪烁MOV R0,#000H ;设置R0初值,R0确定是以P2囗,还是P3囗为起始LCALL LWR ;调用流水灯程序/******按键处理程序******/KEY: MOV R2,P2 ;保存按键时P2的值MOV R3,P3 ;保存按键时P3的值LCALL KEY1 ;扫描是否有按键按下JNZ KEY2 ;若有按键按下则转到KEY2RET ;没按键按下则退出/********扫描按键********/KEY1: MOV P0,#0FFHCLR P3.6CLR P3.7MOV A,P0ORL A,#01FH ;将A的低五位赋值为1CPL A ;取反,A为0则无按键按下,A不为0则有按键按下LJMP KEY4/********按键消抖********/KEY2: LCALL DY2 ;消抖LCALL KEY1 ;再检查是否有按键按下JNZ KEY3 ;的确有则转去处理RET/******确定按键功能******/KEY3: CJNE A,#020H,LK1LCALL LWR0RETLK1: CJNE A,#040H,LK2LCALL LWL0RETLK2: MOV P2,#0FFHMOV P3,#0FFHLJMP MAINKEY4: RET/**********闪烁**********/FLASH: MOV R0,#03H ;设定闪烁的次数FLASH1: M OV P2,#0FFHMOV P3,#0FFHLCALL DY1MOV P2,#000HMOV P3,#000HLCALL DY1DJNZ R0,FLASH1MOV P2,#0FFHMOV P3,#0FFH/*******顺时针流水灯******/LWR: MOV R2,#0FEH ;起始初值MOV R3,#0FBH ;起始初值LWR0: CJNE R0,#000H,LWR2 ;判断从P2起始,还是P3起始LWR1: MOV A,R2 ;设定循环初值LWR11: MOV P2,ALCALL DY1LCALL KEYMOV A,R2 ;恢复A值RL ACJNE A,#0FEH,LWR11MOV P2,#0FFH ;消除D8的延时INC R0MOV R3,#0FBHLWR2: MOV A,R3LWR21: MOV P3,ALCALL DY1LCALL KEYMOV A,R3RL ACJNE A,#0BFH,LWR21MOV P3,#0FFH ;消除D12的延时DEC R0MOV R2,#0FEHLJMP LWR1/*******逆时针流水灯******/LWL0: CJNE R0,#001H,LWL2LWL1: MOV A,R3LWL11: MOV P3,ALCALL DY1LCALL KEYMOV A,R3RR ACJNE A,#0FDH,LWL11MOV P3,#0FFH ;消除D12的延时DEC R0MOV R2,#07FHLWL2: MOV A,R2LWL21: MOV P2,ALCALL DY1LCALL KEYMOV A,R2RR ACJNE A,#07FH,LWL21MOV P2,#0FFH ;消除D8的延时INC R0MOV R3,#0DFHLJMP LWL1/**********LED延时**********//*说明:延时所用的三条令,stc10f08xe中与常用的51单片机中的指令执行时间不同*/DY1: MOV R7,#22 ;延时时间:{2+[2+(2+250*4+4)*100+4]*22+4}/ 11.0592DY11: MOV R6,#100 ; =2213338/11.0592DY12: MOV R5,#250 ; =0.200014sDJNZ R5,$ ; ≈0.2sDJNZ R6,DY12 ;DJNZ R7,DY11 ;RET/**********按键消抖延时**********//*说明:延时所用的三条令,stc10f08xe中与常用的51单片机中的指令执行时间不同*/DY2: MOV R7,#100 ;延时时间:[2+(2+250*4+4)×110+4]/11.0592 DY21: MOV R6,#250 ; =110666*/11.0592DJNZ R6,$ ; =10.0067msDJNZ R7,DY21 ;RETEND五、实验过程中遇到的问题及解决方法1、循环过程发光二极管D1—D8与D9—D12之间怎么衔接?当在D1—D8运行时用CJNE指令检测是否为D8,若是就跳到D9—D 13,跳回与逆时针循环时同理。
单片机控制流水灯程序汇编语言
单片机控制流水灯程序汇编语言随着科技的发展和微电子技术的迅猛进步,单片机逐渐成为智能系统与设备中不可或缺的组成部分。
而流水灯作为最基础的应用之一,不仅在学习过程中具有重要意义,同时也在实际工程中发挥着重要作用。
本文将介绍如何使用汇编语言编写单片机控制流水灯程序,并详细讲解其运行原理和实现方法。
一、流水灯原理流水灯是一种由多个LED组成的灯条或灯链,在按照一定次序依次点亮和熄灭的灯光效果。
其原理基于单片机通过控制输出口的电平高低来控制LED的亮灭状态,实现灯光的变化和移动效果。
二、程序设计方法1. 初始化设置在编写流水灯程序之前,我们首先要了解单片机的相应接口和寄存器的使用方法。
在程序开始时,需要进行相应的初始化设置,包括将数据方向寄存器和端口寄存器设置为输出,并将初始值赋予输出口电平。
例如,对于51单片机,可以使用以下汇编语言代码进行初始化设置:MOV P1, #00H ;将P1端口的输出电平置为低电平MOV P1M1, #FFH ;将P1端口的数据方向设置为输出MOV P1M0, #00H2. 主程序在流水灯程序中,需要编写主程序来实现流水灯的效果。
主程序中使用循环结构控制LED的亮灭状态和移动效果。
例如,以下是一个简单的汇编语言代码,实现了由4个LED组成的流水灯的效果:MOV R0, #F0H ;初始亮灭状态MOV R1, #00H ;初始LED位置LOOP: ;循环MOV P1, R0 ;将亮灭状态赋予P1端口的输出电平ACALL DELAY ;延时,形成流水灯效果MOV A, R1SUBB A, #01H ;将LED位置减一MOV R1, AJZ CHANGE ;当LED位置为零时,改变亮灭状态MOV R0, R0SJMP LOOP ;继续循环CHANGE: ;改变亮灭状态CPL R0 ;对亮灭状态进行取反操作SJMP LOOP ;继续循环3. 延时函数为了实现流水灯的移动效果,需要设置一个合适的延时时间来控制LED的亮灭速度。
流水灯的设计实验报告
流水灯的设计实验报告流水灯的设计实验报告引言:流水灯作为一种常见的电子实验装置,广泛应用于各种电子设备中。
本次实验旨在通过设计和制作一个简单的流水灯电路,来理解流水灯的工作原理和电子元件的基本使用方法。
一、实验目的本次实验的目的是通过设计和制作一个流水灯电路,来加深对流水灯工作原理和电子元件的理解,并掌握基本的电路连接和焊接技巧。
二、实验原理流水灯是一种多个LED灯按照一定的顺序依次点亮和熄灭的电子装置。
其工作原理是通过时钟信号控制LED灯的亮灭,使得LED灯在一定的时间间隔内按照指定的顺序依次亮起。
在本次实验中,我们将使用555定时器芯片作为时钟信号的发生器,并通过计数器和逻辑门电路来控制LED灯的亮灭。
三、实验材料与方法1. 实验材料:- 555定时器芯片- 74HC4017计数器芯片- 逻辑门电路芯片- LED灯- 电阻、电容等元件- 面包板、导线等实验器材2. 实验方法:- 根据电路原理图连接电子元件,注意正确连接引脚和极性。
- 使用焊接工具将电子元件固定在面包板上。
- 连接电源,注意电压和电流的安全使用。
- 调整电路参数,观察流水灯的亮灭顺序和频率。
四、实验结果与分析经过实验,我们成功设计和制作了一个流水灯电路,并且实现了预期的效果。
LED灯按照指定的顺序依次亮起,并在一定的时间间隔后熄灭,再由下一个LED灯亮起。
整个流水灯的亮灭过程形成了一个连续流动的效果,非常美观。
通过调整电路参数,我们还可以改变流水灯的亮灭顺序和频率。
例如,增加LED灯的数量,可以实现更长的流水灯效果;调整计数器芯片的工作频率,可以改变流水灯的闪烁速度。
这些参数的调整,可以根据实际需求来进行灵活设置。
五、实验心得与体会通过本次实验,我对流水灯的工作原理和电子元件的使用方法有了更深入的了解。
在实际操作中,我学会了正确连接电子元件的方法,并掌握了一定的焊接技巧。
通过不断调整电路参数,我也体验到了电子元件对电路性能的影响。
单片机流水灯实验
4、打开编程软件PROGISP(Ver1.6.6),按要求设定 (见1.4);
5、调入目标文件; 6、对目标板(实验板)编程; 7、检查运行结果,若没有达到实验要求,重复
3、4、5、6、7步。
实验一:流水灯实验
七、思考题 1、彩灯右移一位循环,请编程? 2、彩灯多位循环,请编程?
J700、J800开路。
绿色 黄色 红色 绿色 黄色 红色 绿色 黄色 J500 VCC VCC
D501 D502 D503 D504 D505 D506 D507 D508
LED LED LED LED LED LED LED LED
1 2
R501 R502 R503 R504 R505 R506 R507 R508
SJMP Start
实验二:交通信号灯实验
延时主程序: DEL1: MOV R7,#10 DEL2: MOV R6,#200 DEL3: MOV R5,#250 DJNZ R5,$ DJNZ R6, DEL3 DJNZ R7, DEL2 RET
END
实验二:交通信号灯实验
六、实验步骤
1、按要求选择目标板(实验板)的电源由计算机 USB提供电源(J1短路),选择P0口彩灯功能电 路(J500短路);
三、要求: 1、学生实验前预习实验并完成预习报告;
2、学生实验中认真记录程序的修改过程;
3、学生实验中要完成规定的思考题;
4、学生实验后要按要求完成实验报告。
实验一:流水灯实验
四、实验电路
1、P0口采用灌电流的方式来驱动LED发光管; 2、根据电路的特点,P0口输出低电平点亮LED
发光管,高电平熄灭LED发光管; 3、跳线J500用短路帽短路接通电源,跳线J600、
流水灯显示实验报告
流水灯显示实验报告流水灯显示实验报告一、实验目的本实验旨在通过单片机控制LED灯的亮灭,实现流水灯的显示效果。
通过本实验,旨在巩固学生对单片机基本理论知识的理解,掌握流水灯显示的基本原理与设计方法,提高实践操作能力。
二、实验原理流水灯是一种常见的LED显示效果,通过控制LED灯的亮灭顺序和时间间隔,使LED灯以一定的速度逐次点亮或熄灭,形成流水般的效果。
本实验采用单片机控制LED灯的亮灭,通过编程实现流水灯的显示。
三、实验步骤1.准备实验材料(1)单片机开发板(2)LED灯若干(3)杜邦线若干(4)面包板(5)镊子、电烙铁等工具2.搭建硬件电路(1)将LED灯按照一定的顺序连接到单片机开发板的GPIO口上。
(2)使用杜邦线将电源连接到LED灯的正极和负极。
(3)连接单片机开发板与电脑的串口。
3.编写程序(1)打开单片机开发板的编程软件,如Keil uVision。
(2)编写程序代码,实现流水灯的显示效果。
程序代码包括初始化、延时、循环点亮和熄灭LED灯等部分。
(3)将程序代码下载到单片机开发板中。
4.调试与测试(1)打开电源,观察LED灯的亮灭情况,检查是否实现了流水灯效果。
(2)调整程序代码中的延时参数,改变LED灯的亮灭速度。
(3)检查程序代码中的语法错误和逻辑错误,确保程序的正确性。
四、实验结果与分析1.实验结果通过本次实验,我们成功地实现了流水灯的显示效果。
当电源接通后,LED灯按照设定的顺序逐次点亮或熄灭,形成流水般的效果。
同时,通过调整程序代码中的延时参数,我们还可以改变LED灯的亮灭速度。
2.结果分析本次实验的成功得益于正确的实验方法和步骤。
首先,我们准确地搭建了硬件电路,确保LED灯与单片机的连接正确;其次,我们合理地编写了程序代码,实现了流水灯的显示效果;最后,我们对实验结果进行了仔细的观察和调试,确保实验结果的正确性。
通过本次实验,我们不仅提高了实践操作能力,还巩固了对单片机基本理论知识的理解。
创意流水灯实验报告(3篇)
第1篇一、实验背景随着科技的不断发展,电子技术已经渗透到我们生活的方方面面。
其中,LED流水灯作为一种新型照明产品,因其节能、环保、色彩丰富等特点,在装饰照明、广告宣传等领域得到了广泛应用。
为了深入了解LED流水灯的工作原理,提高我们的动手实践能力,我们设计并完成了一项创意流水灯实验。
二、实验目的1. 了解LED流水灯的工作原理。
2. 掌握LED流水灯的电路连接方法。
3. 通过创意设计,提高LED流水灯的观赏性和实用性。
三、实验原理LED流水灯是通过将多个LED灯珠串联或并联,通过控制电路的通断来实现流水效果的。
实验中,我们采用PWM(脉冲宽度调制)技术来控制LED灯的亮度,从而实现流水灯的动态效果。
四、实验器材1. LED灯珠:红、绿、蓝各50颗2. 马达:1台3. 电阻:若干4. 线路板:1块5. 电源:9V直流电源6. 剪刀、胶带等辅助工具五、实验步骤1. 设计电路图:根据LED灯珠的参数,设计出合适的电路图,确保电路连接正确。
2. 制作电路板:按照电路图,将LED灯珠、电阻、马达等元器件焊接在电路板上。
3. 连接电源:将电路板与9V直流电源连接,确保电路板供电正常。
4. 制作流水灯外壳:根据设计要求,制作流水灯外壳,确保内部电路布局合理。
5. 测试流水灯效果:接通电源,观察LED灯珠的流水效果,检查电路是否正常工作。
6. 优化设计:根据实验效果,对流水灯的设计进行优化,提高观赏性和实用性。
六、实验结果与分析1. 实验结果:经过多次测试,我们成功制作出了一款具有流水效果的LED流水灯。
在实验过程中,LED灯珠的流水效果稳定,颜色鲜艳,马达运行正常。
2. 结果分析:通过本次实验,我们掌握了LED流水灯的工作原理和电路连接方法。
在实验过程中,我们了解到PWM技术在控制LED灯亮度方面的应用,以及马达在流水灯中的驱动作用。
3. 优化建议:为了提高流水灯的观赏性和实用性,我们可以在以下几个方面进行优化:(1)增加LED灯珠的种类和数量,丰富流水灯的色彩效果。
流水灯[汇编程序]
4.1 流水灯程序介绍:利用P1 口通过一定延时轮流产生低电平输出,以达到发光二极管轮流亮的效果。
实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。
程序实例(LAMP.ASM)ORG 0000HAJMP MAINORG 0030HMAIN:9MOV A,#00HMOV P1,A ;灭所有的灯MOV A,#11111110BMAIN1:MOV P1,A ;开最左边的灯ACALL DELAY ;延时RL A ;将开的灯向右边移AJMP MAIN ;循环DELAY:MOV 30H,#0FFHD1: MOV 31H,#0FFHD2: DJNZ 31H,D2DJNZ 30H,D1RETEND4.2 方波输出程序介绍:P1.0 口输出高电平,延时后再输出低电平,循环输出产生方波。
实际应用中例如:波形发生器。
程序实例(FAN.ASM):ORG 0000HMAIN:;直接利用P1.0口产生高低电平地形成方波////////////// ACALL DELAYSETB P1.0ACALL DELAY10CLR P1.0AJMP MAIN;////////////////////////////////////////////////// DELAY:MOV R1,#0FFHDJNZ R1,$RETEND五、定时器功能实例5.1 定时1秒报警程序介绍:定时器1每隔1秒钟将p1.o的输出状态改变1 次,以达到定时报警的目的。
实际应用例如:定时报警器。
程序实例(DIN1.ASM):ORG 0000HAJMP MAINORG 000BHAJMP DIN0 ;定时器0入口MAIN:TFLA G EQU 34H ;时间秒标志,判是否到50个0.2秒,即50*0.2=1秒MOV TMOD,#00000001B;定时器0工作于方式1MOV TL0,#0AFHMOV TH0,#3CH ;设定时时间为0.05秒,定时20次则一秒11SETB EA ;开总中断SETB ET0 ;开定时器0中断允许SETB TR0 ;开定时0运行SETB P1.0LOOP: AJMP LOOPDIN0:;是否到一秒//////////////////////////////////////// INCC: INC TFLAGMOV A,TFLAGCJNE A,#20,REMOV TFLAG,#00HCPL P1.0;////////////////////////////////////////////////// RE:MOV TL0,#0AFHMOV TH0,#3CH ;设定时时间为0.05秒,定时20次则一秒RETIEND5.2 频率输出公式介绍:f=1/ts51 使用12M晶振,一个周期是1微秒使用定时器1工作于方式0,最大值为65535,以产生200HZ的频率为例:200=1/t:推出t=0.005 秒,即5000 微秒,即一个高电12平或低电平的时间为2500 微秒。
(完整word版)实验一51单片机流水灯实验实验报告(word文档良心出品)
“流水灯”实验报告一、实验目的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 0000H Delay: MOV R0, #0FFHSJMP Start Delay1: MOV R1, #0FFH Start: MOV A, #0FEH Delay2: NOPMOV P0, A DJNZ R1, Delay2CLR P2.7 DJNZ R0, Delay1CLR 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→2→3→4→5→6→7→8→7→…→1→2;如此往复循环。
流水灯汇编程序讲解)
ORG 0000H//伪指令起始地址LJMP MAIN//跳到主函数里ORG 0100H//重新开始设置起始地址,因为在0000H~0023H 为中断子函数的入口,等于说这几个入口地址把这段内存给分割了,为了保证程序的连续性要跳过这段内存。
当然也可以从0030H开始。
MAIN:MOV A,#0FEH//点亮第一个灯。
1111 1110。
因为所有的LED是共阳极的所以当给低电平的时候导通MOV R0,#08H//这个是用来确定循环次数的,意思就是说我有八个灯,所有我循环八次A1: MOV P1,A//点亮第一个灯LCALL DELAY//调用延时子函数RL A//左移一位,注意这条语句。
是左移一位后的数据重新给累加器A。
也就是说原来是1111 1110.现在是1111 1101。
DJNZ R0,A1//DJNZ。
Decrease jump not zero.我直白的理解减1不是0就跳,谁减呢R0减,跳哪呢?跳到A1处。
然后此时由于累加器A此时存的是1111 1101.所以大家应该要明白,当我跳回到A1的时候给P1口赋值时。
点亮的是第二个灯,第一个灯灭。
然后八次循环。
依次点亮。
MOV A,#7FH//对累加器A重装初值MOV R0,#08H//还是八次循环。
A2的目的是从左往右依次点亮灯。
类比A1A2: MOV P1,ALCALL DELAYRR ADJNZ R0,A2MOV R3,#0FEH//这段程序到A3是为了让灯从左往右依次全部点亮,由于只有累加器A可以进行左右移动的指令。
并且大家可以通过查表04H地址代表的是0区寄存的R3的地址。
为了下面ORL这个或的算法故这样赋值,大家可以参考书44页第十二句指令。
MOV R0,#08HMOV A,#0FDHA3: MOV P1,R3LCALL DELAYORL 04H,A//04H和R3是一个东西。
累加器A中存的是1111 1101,而R3中存的是1111 1110,它们两个或过之后为1111 1100存到了R3中,也就是04H这个地址中。
单片机并口简单应用(流水灯)实验报告
实验一单片机并口简单应用(流水灯)一、实验目的1、认识单片机汇编语言程序的基本构造2、认识单片机汇编语言程序的设计和调试方法3、掌握次序控制程序的简单编程二、实验仪器单片机开发板、万利仿真机、稳压电源、计算机三、实验原理1、流水灯硬件电路如图 4-1 所示,流水灯硬件电路由移位存放器 74LS164、功能选择开关 J502、二极管、三极管、单片机并口( P0)、限流电阻等构成。
发光二极管连结成共阳极构造。
发光二极管点亮的条件是:阳极接高电平、各阴极接低电平。
所以,通过程序控制 74LS164的 Q0 端。
Q0 端输出 0,公共端阳极就接成高电平,而后再按必定规则从 P0 口输出数据,发光二极管就会点亮。
图4-1 流水灯电路图2、单片机流水灯程序设计由上图可知,发光二极管重点亮,需要先把 J502的 2、3 脚相连,三极管 Q500导通,而后从 P0 口输出数据。
(1)控制三极管导通程序控制三极管有两种方法,第一种:在 74LS164的第 8 脚产生一个正脉冲,此时 1 脚为 0,三极管就导通;为 1,三极管就截止。
第二种:在单片机 IO 模拟 74LS164时序,一次输出一个字节,只需 Q0=0 即可控制三极管开通。
为 1,三极管截止。
两种方法的程序流程如图4-2 所示。
三极管导三极管导DIN=0,CLK=0,输出 8 位DIN=0输出数据 =07FH(最高位为CLK=0输出数据左移一位,把移CLK=1出的位送到 DIN,CLK产生CLK=0输出数据位数减 1返回输出达成三极管导图4-2 流水灯位选信号控制(2)产生流水灯成效程序三极管导通后,就能够从 P0 口输出数据控制发光二极管。
P0 口输出数据既能够编写程序逐个输出,也能够将输出数据序列定义在储存器中,而后用读程序储存器指令逐个拿出并输出到 P0 口。
程序流程图如图4-3 所示。
流水灯流水灯P0 口输出偏移地点为 8延时秒从程序储存器中拿出偏移地点的数据P0 口输出延时秒,偏移地点计数减 1延时秒取数达成N。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告学院(系)名称:计算机与通信工程学院
【实验过程记录(源程序、测试用例、测试结果及心得体会等)】///////////////////////////////////////////////////////流水灯;自己改的
IOY0 EQU 3000H ;片选IOY0对应的端口始地址MY8255_A EQU IOY0+00H*2 ;8255的A口地址
MY8255_B EQU IOY0+01H*2 ;8255的B口地址
MY8255_C EQU IOY0+02H*2 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*2 ;8255的控制寄存器地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,MY8255_MODE ;初始化8255工作方式MOV AL,82H ;工作方式0,A口输出,B口输入
OUT DX,AL
LOOP1:MOV DX,MY8255_A ;写A口
MOV AL,00000001B
OUT DX,AL
CALL DALL Y
MOV DX,MY8255_A ;写A口
MOV AL,00000010B
OUT DX,AL
CALL DALL Y
MOV DX,MY8255_A ;写A口
MOV AL,00000100B
OUT DX,AL
CALL DALL Y
MOV DX,MY8255_A ;写A口
MOV AL,00001000B
OUT DX,AL
CALL DALL Y
MOV DX,MY8255_A ;写A口
MOV AL,00010000B
OUT DX,AL
CALL DALL Y
MOV DX,MY8255_A ;写A口
MOV AL,00100000B
OUT DX,AL
CALL DALL Y
MOV DX,MY8255_A ;写A口
MOV AL,01000000B
OUT DX,AL
CALL DALL Y
MOV DX,MY8255_A ;写A口
MOV AL,10000000B
OUT DX,AL
CALL DALL Y
MOV AH,1 ;判断是否有按键按下
INT 16H
JZ LOOP1 ;无按键则跳回继续循环,有则退出
QUIT: MOV AX,4C00H ;结束程序退出
INT 21H
DALL Y PROC NEAR ;软件延时子程序
PUSH CX
PUSH AX
MOV CX,0FFFH
D1: MOV AX,0FFFFH
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALL Y ENDP
CODE ENDS
END START
模拟交通灯(实验现象在代码后面:6个灯实验)
IIOY0 EQU 3000H ;片选IOY0对应的端口始地址MY8255_A EQU IOY0+00H*2 ;8255的A口地址
MY8255_B EQU IOY0+01H*2 ;8255的B口地址
MY8255_C EQU IOY0+02H*2 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*2 ;8255的控制寄存器地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,MY8255_MODE ;初始化8255工作方式
MOV AL,80H ;工作方式0,A口输出,B口输入
OUT DX,AL
MOV DX,MY8255_A ;写A口
MOV AL,00010001B //初始状态:两个红灯亮;
OUT DX,AL
CALL DALL Y
LOOP1: MOV DX,MY8255_A ;写A口
MOV AL,00010010B //接着一个路口红灯不变,另一个路口变黄灯;
OUT DX,AL
CALL DALL Y
MOV DX,MY8255_A ;写A口
MOV AL,00010100B //一个路口红灯不变,另一个路口由黄灯变绿灯;
OUT DX,AL
CALL DALL Y
MOV DX,MY8255_A ;写A口
MOV AL,00100010B //接着两个黄灯亮;
OUT DX,AL
CALL DALL Y
MOV DX,MY8255_A ;写A口
MOV AL,01000001B //然后刚才的红灯由黄灯变绿灯,绿灯由黄灯变红灯,如此循环;
OUT DX,AL
CALL DALLY
MOV AH,1 ;判断是否有按键按下
INT 16H
JZ LOOP1 ;无按键则跳回继续循环,有则退出
QUIT: MOV AX,4C00H ;结束程序退出
INT 21H
DALL Y PROC NEAR ;软件延时子程序
PUSH CX
PUSH AX
MOV CX,09FFFH
D1: MOV AX,0FFFFH
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALL Y ENDP
CODE ENDS
END START。