《STM32开发指南》第六章 跑马灯实验

《STM32开发指南》第六章 跑马灯实验
《STM32开发指南》第六章 跑马灯实验

第六章跑马灯实验

STM32最简单的外设莫过于IO口的高低电平控制了,本章将通过一个经典的跑马灯程序,带大家开启STM32之旅,通过本章的学习,你将了解到STM32的IO口作为输出使用的方法。在本章中,我们将通过代码控制ALIENTEK战舰STM32开发板上的两个LED:DS0和DS1交替闪烁,实现类似跑马灯的效果。本章分为如下四个小节:

6.1,STM32 IO口简介

6.2,硬件设计

6.3,软件设计

6.4,仿真与下载

6.1 STM32 IO简介

本章将要实现的是控制ALIENTEK战舰STM32开发板上的两个LED实现一个类似跑马灯的效果,该实验的关键在于如何控制STM32的IO口输出。了解了STM32的IO口如何输出的,就可以实现跑马灯了。通过这一章的学习,你将初步掌握STM32基本IO口的使用,而这是迈向STM32的第一步。

STM32的IO口可以由软件配置成如下8种模式:

1、输入浮空

2、输入上拉

3、输入下拉

4、模拟输入

5、开漏输出

6、推挽输出

7、推挽式复用功能

8、开漏复用功能

每个IO口可以自由编程,但IO口寄存器必须要按32位字被访问。STM32的很多IO口都是5V兼容的,这些IO口在与5V电平的外设连接的时候很有优势,具体哪些IO口是5V兼容的,可以从该芯片的数据手册管脚描述章节查到(I/O Level标FT的就是5V电平兼容的)。

STM32的每个IO端口都有7个寄存器来控制。他们分别是:配置模式的2个32位的端口配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR;1个32位的置位/复位寄存器BSRR;一个16位的复位寄存器BRR;1个32位的锁存寄存器LCKR;这里我们仅介绍常用的几个寄存器,我们常用的IO端口寄存器只有4个:CRL、CRH、IDR、ODR。

CRL和CRH控制着每个IO口的模式及输出速率。

STM32的IO口位配置表如表6.1.1所示:

表6.1.1 STM32的IO口位配置表

STM32输出模式配置如表6.1.2所示:

表6.1.2 STM32输出模式配置表

接下来我们看看端口低配置寄存器CRL的描述,如图6.1.1所示:

图6.1.1 端口低配置寄存器CRL各位描述

该寄存器的复位值为0X4444 4444,从图6.1.1可以看到,复位值其实就是配置端口为浮空输入模式。从上图还可以得出:STM32的CRL控制着每组IO端口(A~G)的低8位的模式。每个IO端口的位占用CRL的4个位,高两位为CNF,低两位为MODE。这里我们可以记住几个常用的配置,比如0X0表示模拟输入模式(ADC用)、0X3表示推挽输出模式(做输出口用,50M速率)、0X8表示上/下拉输入模式(做输入口用)、0XB表示复用输出(使用IO口的第二功能,50M速率)。

CRH的作用和CRL完全一样,只是CRL控制的是低8位输出口,而CRH控制的是高8位输出口。这里我们对CRH就不做详细介绍了。

给个实例,比如我们要设置PORTC的11位为上拉输入,12位为推挽输出。代码如下:GPIOC->CRH&=0XFFF00FFF;//清掉这2个位原来的设置,同时也不影响其他位的设置GPIOC->CRH|=0X00038000; //PC11输入,PC12输出

GPIOC->ODR=1<<11; //PC11上拉

通过这3句话的配置,我们就设置了PC11为上拉输入,PC12为推挽输出。

IDR是一个端口输入数据寄存器,只用了低16位。该寄存器为只读寄存器,并且只能以16位的形式读出。该寄存器各位的描述如图6.1.2所示:

图6.1.2 端口输入数据寄存器IDR各位描述

要想知道某个IO口的状态,你只要读这个寄存器,再看某个位的状态就可以了。使用起来是比较简单的。

ODR是一个端口输出数据寄存器,也只用了低16位。该寄存器为可读写,从该寄存器读出来的数据可以用于判断当前IO口的输出状态。而向该寄存器写数据,则可以控制某个IO口的输出电平。该寄存器的各位描述如图6.1.3所示:

图6.1.3 端口输出数据寄存器ODR各位描述

了解了这几个寄存器,我们就可以开始跑马灯实验的真正设计了。关于IO口更详细的介绍,请参考《STM32参考手册》第105页8.1节。

在此,我们可以总结一下,对于学过A VR的人来说,我们都知道A VR的IO口由3个寄存器控制:DDR、PORT、PIN。这里我们可以拿STM32的IO控制寄存器和A VR的来个类比:

1、STM32的CRL和CRH就相当于AVR的DDR寄存器,用来控制IO口的方向,只

不过STM32的CRL和CRH功能更强大一点罢了。

2、STM32的ODR就相当于A VR的PORT,都是用来控制IO口的输出电平或者上下

拉电阻的。

3、STM32的IDR就相当于A VR的PIN,都是用来存储IO口当前的输入状态(高低

电平)的。

除此之外,STM32还有BSRR、BRR、LCKR等几个寄存器用于控制IO口,这点是A VR 所没有的。

6.2 硬件设计

本章用到的硬件只有LED(DS0和DS1)。其电路在ALIENTEK战舰STM32开发板上默认是已经连接好了的。DS0接PB5,DS1接PE5。所以在硬件上不需要动任何东西。其连接原

理图如图6.2.1下:

图6.2.1 LED与STM32连接原理图

6.3 软件设计

首先,找到之前3.2节新建的TEST工程,在该文件夹下面新建一个HARDWARE的文件夹,用来存储以后与硬件相关的代码。然后在HARDW ARE文件夹下新建一个LED文件夹,用来存放与LED相关的代码。如图6.3.1所示:

图6.3.1 新建HARDW ARE文件夹

然后我们打开USER文件夹下的TEST.Uv2工程,按按钮新建一个文件,然后保存在

HARDW ARE->LED文件夹下面,保存为led.c。在该文件中输入如下代码:#include "led.h"

//初始化PB5和PE5为输出口.并使能这两个口的时钟

//LED IO初始化

void LED_Init(void)

{

RCC->APB2ENR|=1<<3; //使能PORTB时钟

RCC->APB2ENR|=1<<6; //使能PORTE时钟

GPIOB->CRL&=0XFF0FFFFF;

GPIOB->CRL|=0X00300000;//PB.5 推挽输出

GPIOB->ODR|=1<<5; //PB.5 输出高

GPIOE->CRL&=0XFF0FFFFF;

GPIOE->CRL|=0X00300000;//PE.5推挽输出

GPIOE->ODR|=1<<5; //PE.5输出高

}

该代码里面就包含了一个函数void LED_Init(void),该函数的功能就是用来实现配置PB5和PE5为推挽输出。这里需要注意的是:在配置STM32外设的时候,任何时候都要先使能该外设的时钟!APB2ENR是APB2总线上的外设时钟使能寄存器,其各位的描述如图6.3.2所示:

图6.3.2 寄存器APB2ENR各位描述

我们要使能的PORTB和PORTE的时钟使能位,分别在bit3和bit6,只要将这两位置1就可以使能PORTA和PORTD的时钟了。该寄存器还包括了很多其他外设的时钟使能。大家在以后会慢慢使用到的。关于这个寄存器的详细说明在《STM32参考手册》的第70页。

在设置完时钟之后就是配置完时钟之后,LED_Init配置了PB5和PE5的模式为推挽输出,并且默认输出1。这样就完成了对这两个IO口的初始化。

保存led.c代码,然后我们按同样的方法,新建一个led.h文件,也保存在LED文件夹下面。在led.h中输入如下代码:

#ifndef __LED_H

#define __LED_H

#include "sys.h"

//LED端口定义

#define LED0 PBout(5)// DS0

#define LED1 PEout(5)// DS1

void LED_Init(void);//初始化

#endif

这段代码里面最关键就是2个宏定义:

#define LED0 PBout(5)// DS0

#define LED1 PEout(5)// DS1

这里使用的是位带操作来实现操作某个IO口的1个位的,关于位带操作前面已经有介绍,这里不再多说。需要说明的是,这里可以使用另外一种操作方式实现。如下:#define LED0 (1<<5) //led0 PB5

#define LED1 (1<<5) //led1 PE5

#define LED0_SET(x) GPIOB->ODR=(GPIOB->ODR&~LED0)|(x ? LED0:0)

#define LED1_SET(x) GPIOE->ODR=(GPIOE->ODR&~LED1)|(x ? LED1:0)

后者通过LED0_SET(0)和LED0_SET(1)来控制PB5的输出0和1。而前者的类似操作为:LED0=0和LED0=1。显然前者简单很多,从而可以看出位带操作带来的好处。以后像这样的IO口操作,我们都使用位带操作来实现,而不使用第二种方法。

将led.h也保存一下。接着,我们在Manage Components管理里面新建一个HARDWARE 的组,并把led.c加入到这个组里面,如图6.3.3所示:

图6.3.3 给工程新增HARDW ARE组

单击OK,回到工程,然后你会发现在Project Workspace里面多了一个HARDW ARE的组,在改组下面有一个led.c的文件。如图6.3.4所示:

图6.3.4新增HARDW ARE组

然后用之前介绍的方法(在3.2节介绍的)将led.h头文件的路径加入到工程里面。回到主界面,在main函数里面编写如下代码:

#include "sys.h"

#include "usart.h"

#include "delay.h"

#include "led.h"

//ALIENTEK战舰STM32开发板实验1

//跑马灯实验

int main(void)

{

Stm32_Clock_Init(9);//系统时钟设置

delay_init(72); //延时初始化

LED_Init(); //初始化与LED连接的硬件接口

while(1)

{

LED0=0;

LED1=1;

delay_ms(300);

LED0=1;

LED1=0;

delay_ms(300);

}

}

代码包含了#include "led.h"这句,使得LED0、LED1、LED_Init等能在main函数里被调用。接下来,main函数先配置系统时钟为72M,然后把延时函数初始化一下。接着就是调用LED_Init 来初始化PB5和PE5为输出。最后在死循环里面实现LED0和LED1交替闪烁,间隔为300ms。

然后按,编译工程,得到结果如图6.3.5所示:

图6.3.5 编译结果

可以看到没有错误,也没有警告。接下来,我们就先进行软件仿真,验证一下是否有错误的地方,然后下载到Mini STM32看看实际运行的结果。

6.4 仿真与下载

此代码,我们先进行软件仿真,看看结果对不对,根据软件仿真的结果,然后再下载到ALIENTEK战舰STM32板子上面看运行是否正确。

首先,我们进行软件仿真(请先确保Options for Target Debug选项卡里面已经设置为Use

Simulator)。先按开始仿真,接着按,显示逻辑分析窗口,点击Setup,新建两个信号PORTB.5和PORTE.5,如图6.4.1所示:

图6.4.1 逻辑分析设置

Display Type选择bit,然后单击Close关闭该对话框,可以看到逻辑分析窗口出来了两个信号,如图6.4.2所示:

图6.4.2 设置后的逻辑分析窗口

接着,点击,开始运行。运行一段时间之后,按按钮,暂停仿真回到逻辑分析窗口,

可以看到如图6.4.3所示的波形:

图6.4.3 仿真波形

这里注意Gird要调节到0.25s左右比较合适,可以通过Zoom里面的In按钮来放大波形,通过Out按钮来缩小波形,或者按All显示全部波形。从上图中可以看到PORTB.5和PORTE.5交替输出,周期可以通过中间那根红线来测量。至此,我们的软件仿真已经顺利通过。

在软件仿真没有问题了之后,我们就可以把代码下载到开发板上,看看运行结果是否与我们仿真的一致。运行结果如图6.4.4所示:

图6.4.4 执行结果

至此,我们的第一章的学习就结束了,本章作为STM32的入门第一个例子,详细介绍了STM32的IO口操作,同时巩固了前面的学习,并进一步介绍了MDK的软件仿真功能。希望大家好好理解一下。

跑马灯实验报告.

山西大学数字电子技术基于硬件设计的跑马灯电路 系别:电力工程系 班级:电本1254班 姓名:所谓伊人 学号: 12322454**

一、实验目的 1. 熟悉NE555定时器,计数器CD4017的逻辑特性。 2. 熟悉NE555构成多谐振荡器原理。 3. 设计跑马灯电路并利用Multisim软件仿真电路。 二、实验要求 1. 知道NE555、CD4017的管脚排列顺序。 2. 利用NE555构成多谐振荡器。 3. 知道电阻的主要参数及其标注方法。(见实验指导书116页)。 4. 知道电容器的主要作用。(见实验指导书122页)。 5. 了解有关焊接的知识。 三、实验器材 电路板1块。电容:1μF(1个)。集成芯片:NE555(1个)、CD4017(1个)。电阻:22K?、1K?、500?各一个。二极管:IN4148(8个)、发光二极管(10个)。(自行提供)电池:5V 四、电路的安装 1.555用来定时,用它产生某种方波,相当于有的时钟信号 2.4017是个十进制计数器,按照时钟信号从10个口依次输出 1. 检查集成芯片NE555,CD4017的安装位置有无错误. 2. 检查电解电容的极性有无错误; 3. 检查二极管IN4148及发光二极管的安装方向有无错误; 4. 检查各个电阻的安装是否有误。 5. 检查有无虚焊。 五、电路的调试 1. 电路焊接好后,先将电路板正负端接到直流电压5V及地线处,观察发光二极管是否变亮。 2. 适当改变电位器阻值,观察其对CD4017

循环周期(发功二极管依次循环一周)的影响。 3. 利用秒表记录CD4017一个合适循环周期的时间。(分别测量电阻最大时、最小时、合适时的周期) 附录 1. 跑马灯电路图

跑马灯实验报告

电子系统综合设计报告 学号 201009120229 姓名李文海年级专业 2010级电子信息工程(二) 指导 教师刘怀强 学院理学院 走马灯实验论文--《嵌入式系统技术》 1、实验目的 1、学会dp-51pro实验仪监控程序下载、动态调试等联机调试功能的使用; 2、理解和学会单片机并口的作为通用i/o的使用; 3、理解和学会单片机外部中断的使用; 4、了解单片机定时器/计数器的应用。 2、实验设备 z pc 机、arm 仿真器、2440 实验箱、串口线。 3、实验内容 z 熟悉 arm 开发环境的建立。 z 使用 arm 汇编和 c 语言设置 gpio 口的相应寄存器。 z 编写跑马灯程序。 5、实验原理 走马灯实验是一个硬件实验,因此要求使用dp-51pro 单片机综合仿真实验仪进行硬件 仿真,首先要求先进行软件仿真,排除软件语法错误,保证关键程序段的正确。然后连接仿 真仪,下载监控程序,进行主机与实验箱联机仿真。 为了使单独编译的 c 语言程序和汇编程序之间能够相互调用,必须为子程序间的调用规 定一定的规则。atpcs ,即 arm , thumb 过程调用标准(arm/thumb procedure call standard),是 arm 程序和 thumb 程序中子程序调用的基本规则,它规定了一些子程序间调 用的基本规则,如子程序调用过程中的寄存器的使用规则,堆栈的使用规则,参数的传递规 则等。 下面结合实际介绍几种 atpcs 规则,如果读者想了解更多的规则,可以查看相关的书 籍。 1.基本 atpcs 基本 atpcs 规定了在子程序调用时的一些基本规则,包括下面 3 方面的内容: (1)各寄存器的使用规则及其相应的名称。 (2)数据栈的使用规则。 (3)参数传递的规则。 相对于其它类型的 atpcs,满足基本 atpcs 的程序的执行速度更快,所占用的内存更少。 但是它不能提供以下的支持: arm 程序和 thumb 程序相互调用,数据以及代码的位置无关 的支持,子程序的可重入性,数据栈检查的支持。 而派生的其他几种特定的 atpcs 就是在基本 atpcs 的基础上再添加其他的规则而形成 的。其目的就是提供上述的功能。 2.寄存器的使用规则 寄存器的使用必须满足下面的规则: (1) 子程序间通过寄存器 r0~r3 来传递参数。这时,寄存器 r0~r3 可以记作 a0~a3。 被调用的子程序在返回前无需恢复寄存器 r0~r3 的内容。 (2) 在子程序中,使用寄存器 r4~rll 来保存局部变量。这时,寄存器 r4~r11 可以记 作 v1~v8。如果在子程序中使用到了寄存器 v1~v8 中的某些寄存器,子程序进入时必须保

嵌入式操作系统跑马灯实验报告

嵌入式操作系统实验报告 实验题目:实验一 CVT-PXA270的使用及跑马灯实验 专业:计算机科学与技术 班级: 姓名: 学号:

1. 了解Linux下端口编程的方法; 2. 掌握CVT-PXA270下的directio通用端口编程驱动程序的使用; 3. 掌握CVT-PXA270下跑马灯的使用方法。 二、实验内容 1.了解CVT-PXA270的外部结构,以及各端口的使用 2.测试跑马灯状态,使跑马灯程序在Linux系统下运行 3.修改跑马灯程序,使跑马灯呈现出不同的状态 三、实验方案 /* 当前跑马灯状态 */ unsigned char led_status = 0x00; / /******************************************************************** // Function name : delay // Description : delay for a while // Return type : void // Argument : int count ********************************************************************* / void delay(int count) { while(count --); } /* 主函数*/ int Main(int argc, char* argv[]) { while(1) { *((unsigned char *) 0x04005000) = led_status; delay(0xffffff); led_status ++; } return 0; } 四、试验结果 实验箱上的四个跑马灯将不断闪烁,修改程序中delay函数调用的值将变它们显示的速度,值越大,显示越慢。

stm32跑马灯实验

详细了解,请点击https://www.360docs.net/doc/c79561254.html,/ 跑马灯实验 跑马灯实验是最简单,也是一般最先开始的一个实验,他可以搭建一个最小的工程项目,之后,所有的实验都可以建立在该项目之上,从而节省了在搭建过程中所消耗的时间和精力。所有的GPIO操作都是以跑马灯为基础进行的。 建议:当该实验顺利完成后,作为一个模板,供以后实验使用,最好把相关的某些代码封装起来,方便其他程序重用和其他功能调试时使用,这样可以确保您可以将精力花费在其他需要实现的功能上,而不是多次写下重复的代码。 实验目的: 1.分析和学习固件库 2.理解固件库的结构 3.通过stm32f10x_gpio.c/.h文件,熟悉GPIO的控制和工作原理 4.对开发板LED灯的再次软件封装 实验要求: 1.利用原理图和固件库的实例,移植开发板LED灯的驱动程序,即自己创建一个LED.c/.h 2.用两种方法实现跑马灯程序: 1.LED驱动 2.直接GPIO寄存器控制 硬件分析:

如上所示,4个LED链接在4个不同管脚上,即GPIOF6,GPIOF7,GPIOF8,GPIOC7. 当这4个管脚被置为低电平时,二极管导通。 通用输入输出接口(GPIO)介绍: 多达112多功能的双向IO口:80%的IO口利用率 所有的IO被分成7个端口,即7组GPIO口(GPIOA..GPIOG); 多达21路模拟输入; 可改变功能引脚(如:USARTx、TIMx、I2Cx、SPIx、CAN、USB等); 多达112个IO口可以设置为外部中断(同时可最多可有16个); 一个IO口可用于将MCU从待机模式唤醒(PA.0); 一个IO口可用作防入侵引脚(PC.13); 标准的I/O口可承受5V; IO口可以吸收25mA(总共可吸收150mA); 18MHz翻转速度; 可设置输出速度达到50MHz; 使用BSRR和BRR寄存器可对IO口的位进行位设置或清除; 锁定机制可以避免对IO口的寄存器的误写操作: 每个GPIO引脚都可以由软件配置成输出(推挽或开漏)、输入(带或不带上拉或下拉)或复用的外设功能端口。多数GPIO引脚都与数字或模拟的复用外设共用。 除了具有模拟输入功能的端口,所有的GPIO引脚都有大电流通过能力。 在需要的情况下,I/O引脚的外设功能可以通过一个特定的操作锁定,以避免意外的写入I/O寄存器。 7组GPIO的端口映射地址为:

跑马灯实验报告

基于Proteus 的跑马灯 一、实验目的 1、 掌握Proteus 系统的使用,能够建立、保存,打开和修改文件。 2、 掌握使用各种元器件绘制电路原理图的方法,实现电路的仿真。 二、实验内容 跑马灯电路,即完成P1口上的八个发光二极管循环闪亮。 三、实验程序 ORG 0000H AJMP MAIN ORG 30H MAIN: MOV R2,#16 MOV A,#0FEH LOOP: MOV P1,A LCALL D1 RL A DJNZ R2,LOOP D1: MOV R4,#10 D2: MOV R5,#100 D3: MOV R6,#249 DJNZ R6,$ DJNZ R5,D3 DJNZ R4,D2 RET END 四、实验硬件电路 XTAL2 18 XTAL1 19 ALE 30EA 31 PSEN 29RST 9 P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX 2P1.23P1.34P1.45P1.56P1.67P1.78 P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD 17 P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1 AT89C52 R1 10k C1 1nF C2 1nF C3 1uF X1 CRYSTAL D1 LED-BIBY D2 LED-BIBY D3 LED-BIBY D4 LED-BIBY D5 LED-BIBY D6 LED-BIBY D7 LED-BIBY D8 LED-BIBY 23456789 1 RP1 RESPACK-8 五、运行Proteus 仿真结果

跑马灯实验报告.

跑 马 灯 实 验 报 告 姓名: 班级:

跑马灯实验报告 试验目的 1.学习8031内部计数器的使用和编程方法。 2.进一步掌握中断处理程序的编程方法。 3.学习端口的输入输出操作。 实验原理 1、软件流程图: 2.程序设计内容 我们可以运用输出端口指令MOV P1,A 或MOV P1,#DATA ,只要给累加器值 或常数值,然后执行上述的指令,即可达到输出控制的动作。

3、硬件连接图: 4.软件清单 ADR EQU 8000H ORG 0000H LJMP START ORG 001BH LJMP OT1

ORG 00F0H START:MOV TMOD,#10H MOV TL1,#0B0H MOV TH1,#3CH SETB EA SETB ET1 MOV R2,#14H MOV R3,#00H SETB TR1 SJMP $ OT1:CLR TR1 CLR EA MOV TH1,#3CH MOV TL1,#0B0H DJNZ R2,BACK NEXT:MOV R2,#14H MOV DPTR,#0200h MOV A,R3 MOVC A,@A+DPTR MOV DPTR,#ADR MOVX @DPTR,A INC R3 CJNE R3,#08H,BACK SJMP ROUND BACK:SETB EA SETB TR1 RETI ROUND:MOV R3,#00H SJMP BACK ORG 0200H DB 05H,0AH,50H,0A0H,55H,0AAH,0FFH,00H END 5.C语言源程序 #include unsigned char i; unsigned char temp;

(整理)实验52跑马灯实验.

实验 5.2 跑马灯实验 ·实验说明 在FPGA 实验板上用VHDL 语言或者Verilog语言都能够很快地写出跑马灯实验程序。本实验要求完成的是基于SOPC 的跑马灯设计,具有一定的操作复杂性。 ·实验步骤 5.2.1建立Quartus 工程 1.新建Quartus 工程RunningLED,顶层实体名RunningLED。 2.重新设置编译输出目录为../ RunningLED/release。 5.2.2建立SOPC系统 3.点击Quartus II 软件右上方图标打开SOPC Builder,创建一个SOPC 系统。填写系统名称为RinningLED_System,并指定VHDL 为描述系统的语言,如图5-23。 图5-23 添加系统名称并指定语言 4.在系统上添加On-Chip Memory 在程序左侧列表中选择Memory and Memory Controllers -> On-Chip -> On-Chip Memory (RAM or ROM),双击添加至系统中。 在弹出的对话框中指定片上RAM 的属性,因为不需要显示,编译结果很小,保持默认即可。

图5-24 指定On-Chip Memory 属性 鼠标移动到片内存储器的名称onchip_memonry2.0上并点击右键,在弹出菜单中选择Rename,然后更改名称为onchip_mem。 5.添加Nios II Processor 双击Altera SOPC Builder -> Nios II Processor,在弹出的对话框中间选择处理器NIOS II/s;硬件乘法器(Hardware Multiply)选择None,即不需要硬件乘法器;复位向量和异常向量存储器(Memory)均选择前面刚刚添加的片内存储器onchip_mem,此时二者的偏移量(Offset)自动设置为0x0和ox20。复位向量是指整个系统软件复位后启动的程序地址,一般为非易失存储器。异常向量是软件的起始地址,一般是易失存储器,如SDRAM等。如图5-24 所示。 选择

走马灯实验报告

电子系统综合设计报告 学号201009120229 姓名李文海 年级专业2010级电子信息工程(二) 指导教师刘怀强 学院理学院

走马灯实验论文--《嵌入式系统技术》 1、实验目的 1、学会DP-51PRO实验仪监控程序下载、动态调试等联机调试功能的使用; 2、理解和学会单片机并口的作为通用I/O的使用; 3、理解和学会单片机外部中断的使用; 4、了解单片机定时器/计数器的应用。 2、实验设备 z PC 机、ARM 仿真器、2440 实验箱、串口线。 3、实验内容 z熟悉A RM 开发环境的建立。 z使用A RM 汇编和C语言设置G PIO 口的相应寄存器。 z编写跑马灯程序。 5、实验原理 走马灯实验是一个硬件实验,因此要求使用DP-51PRO 单片机综合仿真实验仪进行硬件仿真,首先要求先进行软件仿真,排除软件语法错误,保证关键程序段的正确。然后连接仿真仪,下载监控程序,进行主机与实验箱联机仿真。 为了使单独编译的C语言程序和汇编程序之间能够相互调用,必须为子程序间的调用规定一定的规则。A TPCS ,即ARM ,Thumb 过程调用标准(ARM/Thumb Procedure Call Standard),是A RM 程序和T humb 程序中子程序调用的基本规则,它规定了一些子程序间调用的基本规则,如子程序调用过程中的寄存器的使用规则,堆栈的使用规则,参数的传递规则等。 下面结合实际介绍几种A TPCS 规则,如果读者想了解更多的规则,可以查看相关的书 籍。 1.基本A TPCS 基本A TPCS 规定了在子程序调用时的一些基本规则,包括下面3方面的内容: (1)各寄存器的使用规则及其相应的名称。 (2)数据栈的使用规则。 (3)参数传递的规则。 相对于其它类型的A TPCS,满足基本A TPCS 的程序的执行速度更快,所占用的内存更少。但是它不能提供以下的支持:ARM 程序和T humb 程序相互调用,数据以及代码的位置无关的支持,子程序的可重入性,数据栈检查的支持。 而派生的其他几种特定的A TPCS 就是在基本A TPCS 的基础上再添加其他的规则而形成的。其目的就是提供上述的功能。 2.寄存器的使用规则 寄存器的使用必须满足下面的规则:

走马灯实验

学生实验报告 系别电子工程系课程名 称 《单片机原理及接口技 术》实验 班级实验名 称 走马灯实验 姓名实验时 间 2011年 月 日 学号 指导教 师 报 告 内 容 一、实验目的和任务 学会DP-51PRO实验仪器监控程序下载、动态调试等联机调试功能的使用; 理解和学会单片机并口的作为通用I/O的使用; 理解和学会单片机外部中断的使用; 了解单片机计时器/计数器的应用。 二、实验原理介绍 走马灯实验室一个硬件实验,因此要求使用DP-51PRO单片机综合仿真试验仪进行硬件仿真,首先要先进行软件仿真,排除软件语法错误,保证关键程序段的正确。然后连接仿真仪,下载监控程序,进行主机和实验箱软、硬件联机仿真调试。 三、设计代码及分 1. 用P1口作为控制端口,使D1区的LED轮流点亮

ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV A,#0FEH NEXT: MOV P1,A ACALL DELAY RL A SJMP NEXT DELAY: MOV R2,#5 DELAY2: MOV R3,#100 DELAY3: MOV R4,#100 DJNZ R4,$ DJNZ R3,DELAY3 DJNZ R2,DELAY2 RET END 2. 用P1口作为控制端口,使D1区的LED轮流点亮。用外部中断0控 制走马灯的暂停和继续。 ORG 0000H LJMP MAIN ORG 0003 LJMP ZEX0 ORG 0100H MAIN: MOV SP,#60H SETB EA SETB EX0 SETB IT0 MOV A,#0FEH MOV R5,#00H NEXT: CJNE R5,#00H,NEXT MOV P1,A ACALL DELAY RL A SJMP NEXT DELAY: MOV R2,#5 DELAY2: MOV R3,#100

实验七 LED跑马灯实验1

实验七LED跑马灯实验1 (点灯) 一、实验目的 1.掌握嵌入式ARM的I/O及其相关设置; 2.继续熟悉ARM开发环境。 二、实验内容 1.了解S3C6410实验板I/O接口原理。 2.利用ADS编译环境,用C语言编写点亮一盏灯主程序。 三、实验设备 硬件: S3C6410实验板; PC机; 串口通信线; 软件: PC机操作系统(WINDOWS XP); ARM Developer Suite v1.2; 超级终端 四、实验步骤 1.新建ARM工程:工程名字自拟 启动ADS开发环境,选择File→New(Project)选项,使用ARM Executable Image工程模板创建一个工程。 2.新建C语言程序文件led.c(名字自拟),并将其添加到工程中 选择File→New(File)选项,新建汇编源程序文件,并添加到工程中,定义被汇编程序调用的C函数g( )和全局变量sum添加到工程中,led.c源程序的参考代码如下: /*------------------------地址声明---------------------------*/ #define GPQCON (*(volatile unsigned *)0x56000010) #define GPQDAT (*(volatile unsigned *)0x56000014) #define GPQUP (*(volatile unsigned *)0x56000018) #define uchar unsigned char #define uint unsigned int /*-----------------------定义全局变量------------------------*/ /*---------------------------------------------------------- 函数名称:ledMain 功能描述:入口程序 初始化后,进入跑马灯死循环 传参:无 返回值:int 0 -------------------------------------------------------------*/

嵌入式系统原理实验三跑马灯

实验三跑马灯实验 实验目的: 通过一个经典的跑马灯程序,了解STM32F1 的IO 口作为输出使用的方法。通过代码控制ALIENTEK 战舰STM32 开发板上的两个LED:DS0 和DS1 交替闪烁,实现类似跑马灯的效果 内容要点: 1.硬件设计 本章用到的硬件只有LED(DS0 和DS1)。其电路在ALIENTEK 战舰STM32F103 开发板上默认是已经连接好了的。DS0 接PB5,DS1 接PE5。所以在硬件上不需 要动任何东西。其连接原理图如图: 2.软件设计 跑马灯实验我们主要用到的固件库文件是: stm32f10x_gpio.c /stm32f10x_gpio.h stm32f10x_rcc.c/stm32f10x_rcc.h misc.c/ misc.h stm32f10x_usart /stm32f10x_usart.h 其中stm32f10x_rcc.h 头文件在每个实验中都要引入,因为系统时钟配置函数以及 相关的外设时钟使能函数都在这个其源文件stm32f10x_rcc.c 中。 stm32f10x_usart.h 和misc.h 头文件在我们SYSTEM 文件夹中都需要使用到,所 以每个实验都会引用。 首先,找到之前新建的Template 工程,在该文件夹下面新建一个HARDWARE 的文件夹,用来存储以后与硬件相关的代码,然后在HARDWARE 文件夹下新 建一个LED 文件夹,用来存放与LED 相关的代码。新建led.h和led.c文件, 一个外设对应一个.h和.c文件。 在Manage Components 管理里面新建一个 HARDWARE 的组,并把led.c 加入到这个组里面, 将led.h 头文件的路径加入到工程里面 一般的头文件有固定的格式,多个地方调用头文件会重复引用,为了避免头文件内 容重复引用,一般通过预编译的方式来写头文件。一般的格式如下:

单片机跑马灯实验报告-叶坤

单片机实验报告—Delay函数和中断系统实现跑马灯14级通信2班叶坤学号:201400800679 一、硬件组成介绍 1、最小系统 STC12C5A16S2单片机、开发板、12兆的晶振、电源。 2、其他 共有40个引脚,两个外部中断,两个定时器,一个串行口中断。四个独立按键,四个数码管,一个蜂鸣器,还有一块拓展区域,可作为日后拓展功能使用,开发单片机的更多功能。 二、软件开发流程 1、新建工程 打开Keil软件,点击“Project | New Project…”,弹出一个名为“Create New Project”的对话框。然后选择一个合适的文件夹准备来存放工程文件。 2、选择CPU Keil提示选择CPU 器件。选中ATMEL中的89c52即可。接下来弹出一个对话框。该对话框提示是否要把标准8051 的启动代码添加到工程中去,一般选择“否”。 3、新建一个.c文件 点击新建文件,将文件名改为“text.c”,然后保存在合适的文

件夹里。扩展名“.c”不可省略。 4、添加源程序文件到工程中 一个空的源程序文件“text.c”已经建立,但是这个文件与刚才新建的工程之间并没有什么内在联系,因此我们需要把它添加到工程中去。单击Keil软件左边项目工作窗口“Target 1 ”上的“+”,将其展开。然后右击“Source Group 1”文件夹,会弹出选择菜单。单击其中的“Add Files to Group 'Source Group 1' ”项。这时,对话框内将出现刚才保存过的“text.c”。双击文件“text.c”,这时,源程序文件“text.c ”已经出现在项目工作窗口的“Source Group 1 ”文件夹内。 5、设计和编辑C语言程序 单根据实验要求编辑C语言程序,并且通过反复的编译和调试以确保程序的正确性。编辑“text.c ”文件,然后点击“Project”中的“compile”,根据运行结果调试程序,以达到目的。 6、勾选产生.hex文件 单击Keil C51 工具栏的“”图标,弹出名为“Options for Target ‘Target 1’ ”的对话框。单击“Output”标签页,选中“Create HEX File”项,然后“确定”。 7、仿真调试 用鼠标左键单击菜单命令“Debug”→ “Start/Stop Debug

单片机跑马灯(流水灯)控制实验报告

单片机实验报告 姓名: 学号: 一、 实验实现功能: 1:计数器功能 2:流水灯 二、 具体操作: 1、计数器功能 数码管的动态显示。每按一次K2键计数器加1通过数码管显示出来,计数器可以实现从0计数到9999。 2、流水灯 当在计数器模式下的时候按下K3键时程序进入跑马灯模式,8个小灯轮流点亮每次只点亮一个,间隔时间为50ms 。 三、 程序流程图 开始 定时器T0 设置初值,启动定时器, 打开中断 复位 Key2按下 中断关闭 计数器模式 计数器加1 Key3按下 流水灯模式 数码管显示数字加1 跑马灯点亮间隔50ms Key1按下中断打开

四、程序 #include typedef unsigned char uint8; typedef unsigned int uint16; //类型定义 sbit P2_1 = P2^1; sbit P2_2 = P2^2; sbit P2_3 = P2^3; sbit P2_4 = P2^4; //位声明四个数码管开关 sbit Key2 = P3^2; sbit Key3 = P3^3; //位声明2个按键K2和K3 sbit Ledk = P2^0 ; //LED 开关 void delay(uint16 i); //延时函数声明 void refresh (); // 数码管刷新函数声明 void liushuideng(); //流水灯函数声明 uint8 number[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //数码管的真值表 uint8 out[4] = {0}; // 数组变量 uint16 counter=0; //用作计数器的变量 uint16 Time_counter=0; //用作定时器的变量 void main() //主函数 { TMOD = 0x01; //定时器0,工作方式一 TH0 = 0xFC; TL0 = 0x18; //定时器初值使每次循环为1ms TR0 = 0; //定时器0开始作 ET0 = 0; // 定时器中断关 EA = 0; // 关中断 while(1) //计数器模式 { Ledk =1 ; //led开关关 out[0]=number[counter%10]; //取个位 out[1]=number[counter%100/10]; //十位 out[2]=number[counter%1000/100]; //百位 out[3]=number[counter/1000]; //千位 if (!Key2) //计数器加1 { ++counter; //自加 out[0]=number[counter%10]; //取个位 out[1]=number[counter%100/10]; //十位 out[2]=number[counter%1000/100]; //百位 out[3]=number[counter/1000]; //千位

实验二 GPIO跑马灯实验

实验二 I/O接口实验 [实验目的] 1.熟悉ARM芯片I/O口配置方法 2.通过实验掌握ARM芯片I/O控制LED显示的方法 [实验仪器] 1.Proteus仿真的LPC2000系列的ARM处理器 2.软件:PC机操作系统Win98、Win2000或WinXP,Keil for ARM(MDK)集成开发环境 [实验原理] 根据LPC2000系列ARM芯片的特点,可以将P0口的功能设置为GPIO,用来驱动LED等设备或者接受矩阵键盘的输入等。 [实验内容] 设计一个ARM驱动LED的电路,使用LPC2000的GPIO功能,编写一个LED跑马灯程序,并且在Proteus上仿真运行。 [预备知识] LPC2000系列微控制器的大部分管脚都具有多种功能,即管脚复用,但是同一引脚在同一时刻只能使用其中一个功能,通过配置相关寄存器控制多路开关来连接引脚与片内外设。 通过引脚连接模块PINSELx控制引脚功能

[实验步骤] 一、参考实验一建立ARM的GPIO电路,图中使用P0口的低八位驱动八个发光二极管,元件参

二、使用Keil MDK软件和C语言编写LED的驱动程序: 按照实验一创建一个Keil项目,项目名称叫GPIO,不过在提示下图时候选择是,而不是否。此处使用Keil提供的汇编启动文件来启动arm处理器,不再使用自己编写的汇编语言了。 创建项目后界面如下:

在项目配置的界面下,linker页按如下设置,不按照实验一的设置进行。其余的设置按照实验一设定。 双击打开 Startup.s文件,见下图

这个文件有两种编辑方式,一种是使用文本方式,就是上图中的TextEditor。另一种是菜单界面的配置方式Configuration Wizard,用来配置ARM处理器的运行时候的设置。点击 Configuration Wizard(上图的编辑区的下方)如下图 按照图上设置,取消锁相环的设置。(同样的方式也可以设置其它选项,大家做实验的时候可以分别展开各个选项查看并熟悉一下,以后实验备用)。 新建一个文本文件,保存并且命名为gpio.c,并添加到该项目中。按照如下操作进行:

跑马灯报告

淮北师范大学 跑马灯设计 学院计算机科学与技术 专业 11级计算机科学与技术(非师范) 学号 学生姓名 指导教师姓名 2013年11月 24 日

前言 当今的社会科技迅速发展,流水灯在我们生活中有着更多的应用,流水灯控制器在我门日常生活中有重要的运用,如广告牌的设计和节日彩灯的设计都能运用到它的原理。流水灯是一串按一定的规律像流水一样连续闪亮。 流水灯的设计要求在预定的时间到来时,会产生一个控制信号控制LED灯的流向、间歇等,LED灯流向可以随着电路的改变而改变,并具有自控、手控、流向控制功能等。主要参考数字电路中计数器的原理。NE555振荡器的作用等相关知识在设计的过程中需要了解相关芯片(CD4017、NE555)的具体功能,引脚图,真值表,认真布局,在连接过程中更要细致耐心。 这次的设计致力于LED灯的流水设计,使之可以按一定的规律像流水一样连续闪亮。

目录 前言 (2) 1.设计目标 (3) 2.设计思路 (3) 3.正文 (3) 3.1、电路工作原理 (3) 3.2、电子元件介绍及说明 (6) 3.2.1、NE555相关资料 (6) 3.2.2、CD4017相关资料 (8) 3.2.3、LED灯的介绍 (12) 3.3、电路图和实物图 (13) 3.4、材料清单 (14) 4.注意事项 (15) 5.焊接与调试 (16) 6.参考文献 (20) 7.小结 (20)

一、设计目标 1、运用NE555和CD4017芯片设计并且实现跑马灯的设计,使发光二极管可以轮流闪亮,并且要可以控制两个灯之间的闪烁间隔。 二、设计思路 要想实现跑马灯的效果,首先要考虑的是如何让几个灯可以依次有间隔的闪烁,然后在考虑怎样可以使两灯之间的闪烁间隔变大或减小。由此可以以集成电路NE555为核心器件构成自激多谐振荡器,并用CD4017十进制计数器计数器进行计数,从而实现利用CD4017从十个输出端依次输出高电平,不断循环的功能,来使发光二极管可以轮流闪亮。并利用滑动变阻器改变电阻值来改变电压值,从而使两个灯之间的闪烁间隔可以改变。 三、正文 3.1、电路工作原理 先用NE555定时器用来生成脉冲,把脉冲给计数器CD4017,通过CD4017,在时钟脉冲的作用下,CD4017十进制计数器计数器进行计数,并从输出端依次输出高电平,不断循环。就能实现基本电路要求。 555定时器由3个阻值为5kΩ的电阻组成的分压器、两个电压比较器C1和 C2、基本RS触发器、放电三极管TD和缓冲反相器G4组成。虚线边沿标注的数字为管脚号。其中,1脚为接地端;2脚为低电平触发端,由此输入低电平触发脉冲;6脚为高电平触发端,由此输入高电平触发脉冲;4脚为复位端,输入负脉冲(或使其电压低于0.7V)可使555定时器直接复位;5脚为电压控制端,在此端外加电压可以改变比较器的参考电压,不用时,经0.01uF的电容接地,以防止引入干扰;7脚为放电端,555定时器输出低电平时,放电晶体管TD导通,外接电容元件通过TD放电;3脚为输出端,输出高电压约低于电源电压1V—3V,输出电流可达200mA,因此可直接驱动继电器、发光二极管、指示灯等;8脚为电源端,可在5V—18V范围内使用。

跑马灯实验代码

一、在PORTB口的小灯上循环显示跑马灯。 方法1:查表 #include /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions */ const unsigned char patten[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; void delay(unsigned int countert) { unsigned int i,j; for(i=0;i /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions */ void delay(unsigned int countert) { unsigned int i,j; for(i=0;i

STM32跑马灯实验

3.1 跑马灯实验 通过本节的学习,你将了解到STM32的IO口作为输出使用的方法。本节分为如下几个小节: STM32 IO口简介 3.1.1 硬件设计 3.1.2 软件设计 3.1.3 仿真与下载 3.1.4

3.1.1 STM32 IO简介 作为所有开发板的经典入门实验,莫过于跑马灯了。ALIENTEK MiniSTM32开发板板载了2个LED,DS0和DS1,本实验将通过教你如何控制这两个灯实现交替闪烁的类跑马灯效果。 该实验的关键在于如何控制STM32的IO口输出。了解了STM32的IO口如何输出的,就可以实现跑马灯了。通过这一节的学习,你将初步掌握STM32基本IO口的使用,而这是迈向STM32的第一步。 STM32的IO口可以由软件配置成8种模式: 1、输入浮空 2、输入上拉 3、输入下拉 4、模拟输入 5、开漏输出 6、推挽输出 7、推挽式复用功能 8、开漏复用功能 每个IO口可以自由编程,单IO口寄存器必须要按32位字被访问。STM32的很多IO口都是5V兼容的,这些IO口在与5V电平的外设连接的时候很有优势,具体哪些IO口是5V兼容的,可以从该芯片的数据手册管脚描述章节查到(I/O Level标FT的就是5V电平兼容的)。 STM32的每个IO端口都有7个寄存器来控制。他们分别是:配置模式的2个32位的端口配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR;1个32位的置位/复位寄存器BSRR;一个16位的复位寄存器BRR;1个32位的所存寄存器LCKR;这里我们仅介绍常用的几个寄存器,我们常用的IO端口寄存器只有4个:CRL、CRH、IDR、ODR。 CRL和CRH控制着每个IO口的模式及输出速率。 STM32的IO口位配置表如表3.1.1.1所示: 表3.1.1.1 STM32的IO口位配置表 STM32输出模式配置如表3.1.1.2所示:

DSP LED跑马灯实验

《DSP技术与实验》实验报告 姓名:学号:学期:

实验名:LED跑马灯 一、实验目的 1.熟悉CCS4集成开发环境 2.掌握CCS4下TMS320VC5509A的编程方法 3.熟悉CSL库的使用 二、实验设备 1.一台装有CCS4软件的计算机 2.HX5509开发板 3.XDS100-USB V1仿真器 三、实验原理 LED实验是一个基础,主要为了熟悉开发环境和5509芯片基本编

程方式。要实现LED跑马灯就首先要对芯片GPIO进行控制,GPIO为General Purpose Input Output 的缩写,即通用输入输出接口。每个GPIO都可以配置为输入或输出。HX5509开发板的LED硬件电路如图一所示。对GPIO控制寄存器IODIP写1就可以设定GPIO为输出,然后对数据寄存器IODATA写1或0就可以控制LED状态。GPIO寄存器表如图二所示。 在TI的5509编程过程中,我们不需要直接对寄存器地址操作,而是可以使用TI官方提供的CSL函数库,即Chip Support Library(片级支持库)。有了它,可以简单方便的完成对DSP器件片上外设配置和控制的编程工作,从而简化了DSP片上外设开发工作,缩短开发周期,并且可以达成标准化控制的编程工作。通过查阅TMS320C55x Chip Support Library API Reference Guide (Rev.G).pdf可知,GPIO操作函数原型为: 而且官方手册中提示REG include the registers IODIR,IOD ATA,GPIODIR,GPIODATA,GPIOEN,AGPIODIR,AGPIODATA,and AGPIOEN。

单片机跑马灯实验分析报告

单片机跑马灯实验报告

————————————————————————————————作者:————————————————————————————————日期:

学号14142200277序号19 单片机原理与接口技术 实验报告 实验项目序号一 实验项目名称跑马灯实验 姓名卢志雄专业电子信息工程班级电信14-2BF 完成时间2016年4月2日

一、实验内容 实验内容为3项,其中第1、2项必做。 1、基本的流水灯。 根据图1电路,编写一段程序,使8个发光二极管D1、D2、D3、D4、D5、D6、D7、D8顺序(正序)点亮:先点亮D1,再点亮D2、D3……D8、D1……,循环点亮。每点亮一个LED ,采用软件延时一段时间。 2、简单键控的流水灯。 不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,再顺序点亮D7、D6……D1、D8……。松手后,又按正序点亮流水灯。 3、键控的流水灯。 上电,不点亮LED ,按一下K1键,按正序点亮流水灯。按一下K2键,按倒序点亮流水灯,按一下K3键,全部关闭LED 。 二、电路原理图 图1 跑马灯实验电路原理图 XTAL2 18 XTAL1 19 ALE 30EA 31 PSEN 29RST 9 P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78 P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD 17 P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1 AT89C51 D0D1D2D3D4D5D6D7 +5V K1K2K3K4

单片机跑马灯实验

实验一、输入输出实验 实验目的: 1、体验单片机的程序编写和运行过程 2、掌握汇编语言的设计编译和运行 实验内容: 用P0端口作输入,P1端口做输出。程序循环从P0端口读入数据,从P1端口输出。输出用LED灯显示。 实验步骤和方法: 1、搭电路。输入端口的6个口接开关接口,输出6个接口接LED灯。 2、编写程序 3、调试程序 实验要求: 1、先用proteus软件搭建电路,编写程序作仿真。 2、在软件里验证好程序再上实验平台验证

I/O实验程序: ORG 0000H MAIN: MOV P0,#0FFH LOOP: MOV A,P0 MOV P1,A LJMP LOOP END

实验二、跑马灯实验目的: 1、掌握单片机的输出 2、掌握子程序的调用方法 3、掌握定时的设置方法 实验内容: 8个LED灯轮流点亮,点亮间隔为1秒。 定时方法采用子程序调用,延时子程序已经编写好。实验步骤和方法: 1、搭电路。P1作输出端口,接LED灯。 2、编写程序 3、调试程序 实验要求: 1、先用proteus软件搭建电路,编写程序作仿真。 2、在软件里验证好程序再上实验平台验证。 附:延时子程序 DELAY: M OV R3,#20 ;延时0.2s D1: MOV R4,#20 D2: MOV R5,#248 DJNZ R5,$ DJNZ R4,D2 DJNZ R3,D1 RET

跑马灯延时子程序 ORG 00H JMP MAIN ORG 30H MAIN: MOV A,#0FFH CLR C MOV R2,#08H ;循环八次LOOP: RLC A ;带进位左移 MOV P2,A MOV R7,#05H LOOP1: CALL DELAY DJNZ R7,LOOP1

相关文档
最新文档