ARM实验5-流水灯仿真实验

这篇具有很好参考价值的文章主要介绍了ARM实验5-流水灯仿真实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实验名称:流水灯仿真实验

二、实验目的:

  1. 掌握ARM处理器的输入输出接口。
  2. 掌握通过MDK提供的仿真功能,实现系统的仿真运行。
  3. 通过该编程实验,进一步巩固和强化学生ARM汇编编程的能,ARM应用程序框架,培养学生实际应用的能力。

三、实验内容:

按下面电路图,编写一个流水灯程序,并通过MDK的仿真功能进行验证。

ARM实验5-流水灯仿真实验,ARM,arm开发,单片机

实验要求:

  1. 有1个拨码开关K1(接GPB1端口)作为输入;
  2. 有4个指示灯作为输出(接GPB5-GPB5端口);
  3. 拨码开关K1输入高电平时,指示灯从上到下(LED1到LED4)循环显示,每次只有一个灯亮;
  4. 拨码开关K1输入低电平时,指示灯从下到上(LED4到LED1)循环显示,每次只有一个灯亮;
  5. 要求每个灯点亮持续的时间是20ms-30ms之间。
  6. 使用C语言编写程序,给完整程序并加注释。
  7. 通过MDK的仿真功能验证程序的正确性。                                                                        

 四、实验器材(设备、元器件):

            (1)PC机一台;

(2)Keil MDK-ARM uVision5开发工具。

五、实验步骤:

(1)打开Keil MDK-ARM uVision5开发工具;

(2)新建一个工程文件;

(3)在新建的工程文件中,添加新的源程序文件

(4)编写代码

(5)选择“Build target”菜单对编写好的工程文件进行编译链接。

(6)点击““Start/Stop Debug Section””按键,对程序进行跟踪调试,在调试界面,单步执行,对CPU各寄存器的值的变化、以及相关内存的变化进行分析比较,判断程序的执行是否符合预期要求。在程序调试期间,利用MDK的“Logic Analyzer”对输出波形进行仿真,以验证程序执行是否正确。仿真的步骤如下:

  1.  在调试界面中,选择“Analysis Windows”→“Logic Analyzer”,进入“Logic Analyzer”界面后,点击“Setup”按键,设置需要观察的输出端口。
  2. 进入“Setup Logic Analyzer”窗口后,就可以对需要观察的输出端口引脚信号进行设置。由于本实验主要涉及到GPB5-8共4个输出端口的输出信号进行观察,因此需要添加这4个信号。
  3. 设置好相关引脚信号后,就可以进行回到“Debug”界面,调试运行。
  4. 先测试拨码开关K1(GPB1)输入为高电平的时候情况,指示灯从上到下(LED1到LED4)循环显示的输出情况。
  5. 然后选择“Peripherals”→“I/O Ports”→“PortB(GPB)”,设置拨码开关K1(GPB1)输入为低电平。
  6. 再次回到“Debug”界面,继续调试运行,测试拨码开关K1(GPB1)输入为低电平的时候情况,指示灯从下到上(LED4到LED1)循环显示的输出情况。

(7)最后得到完整的仿真输出波形

注意事项:
        给接口寄存器赋值,建议使用与或操作,只修改需 要配置的对应bit位,其余位都保持其原值不变。
         可以直接使用标准实验报告中给出的模板,在C编 程时可以直接使用寄存器的名称对其寻址。相关定 义如下:
#define GPBCON (*(volatile unsigned long *) 0x56000010)
#define GPBDAT (*(volatile unsigned long *) 0x56000014)
比如:
GPBCON = 0x155551; //GBP1是输入端口,
//其余端口都是输出端口

main.c参考代码:

#include <S3C2440.H> 
#include<stdio.h>
#include<stdlib.h> 
#define GPBCON (*(volatile unsigned long *) 0x56000010)
#define GPBDAT (*(volatile unsigned long *) 0x56000014)
void delay()  
{  
    int i;
	for(i = 0; i < 5; i++); 
}  
int main(){
	int i;
	GPBCON = 0x155551; //GPB1是输入端口,其余端口都是输出端口
	GPBDAT = ~(0);
	while(1){
		while((GPBDAT & (1<<1)) == 0){ // 开关k1关闭,端口GPB1是低电平
			// 指示灯从下到上(LED4到LED1)循环显示,每次只有一个灯亮
			for(i = 8; i >= 5; i--){
				GPBDAT &= ~(1<<i);
				delay();
				GPBDAT = ~(0);
			}		
		}
		while((GPBDAT & (1<<1)) != 0){ // 开关k1打开,端口GPB1是高电平
			// 指示灯从上到下(LED1到LED4)循环显示,每次只有一个灯亮
			for(i = 5; i <= 8; i++){
				GPBDAT &= ~(1<<i);
				delay();
				GPBDAT = ~(0);
			}	
		}
	}
}

 

五、实验结论

        通过仿真测试,可以看出,GPB5-8这4个端口,在GPB1为高电平时,轮流输出低电平,使得指示灯从上到下(LED1到LED4)循环显示;在GPB1为低电平时,轮流输出低电平,使得指示灯从下到上(LED4到LED1)循环显示。且低电平的持续时间约为20-30ms,即使得每个灯被点亮的持续时间约为20-30ms。符合实验要求。

六、总结及心得体会:

       通过本次实验,我掌握了ARM处理器的输入输出接口相关设置及使用,也掌握了如何通过MDK提供的仿真功能,实现系统的仿真运行。同时通过该编程实验,也进一步巩固和强化我的ARM汇编编程的能力、ARM应用程序框架,培养了我的实际应用的能力。文章来源地址https://www.toymoban.com/news/detail-610566.html

到了这里,关于ARM实验5-流水灯仿真实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Proteus 8.9仿真STM32F103流水灯实验

    STM32流水灯程序非常简单,在我的实验中使用GPIOC的引脚连接流水灯。主要程序如下: LED初始化:led.h  led.c test.c文件,main主函数:  工程目录如下,记得包含头文件。工程链接在文末。  编译生成.hex文件即可,接下来绘制仿真电路。 打开Proteus 点击新建工程。 我将工程保存

    2024年02月04日
    浏览(66)
  • C51单片机开发心形灯流水灯(C语言)

    利用Keil uVision4编程程序,在Proteus 8 Professional中创建仿真电路 仿真电路 16进制样式花型 延迟函数 循环调用函数 led1() 是指操作P0端口, 以此类推,led4() 是调用四个输出端口,循环闪烁 C语言代码 仿真电路和代码 链接:https://pan.baidu.com/s/1vx33QiXO0uhXMq1ItUebNQ 提取码:5151

    2024年02月07日
    浏览(41)
  • 【51单片机】:闪灯、流水灯(从左往右)、流水灯(从右往左)、蜂鸣器。

            言归正传,一切都回归本源,从51再来一次,首先就是最简单的点灯大师。         这么些年从51 到  32  再到  arduino  再到  ESP  等等,都是从点灯大师开始的。 于是介绍如下: 闪灯 流水灯(从左往右) 流水灯(从右往左) 蜂鸣器         LED灯的原理:LED是发

    2024年02月11日
    浏览(49)
  • 【单片机】06流水灯

    上次课布置的流水灯实验,硬件上我们用8根导线分别将P1口的第0脚接到第0个灯,第1脚接到第1个灯,以此类推,直到将第7脚接到第7个灯上。软件上相信大家能想到的最简单的办法是先将第0个灯点亮,延时,再将1个灯点亮,再延时,依次类推直到将第7个灯点亮,延时,再将

    2024年02月08日
    浏览(47)
  • 【51单片机】键控流水灯

    设置k3作为启动键,只有先按下k3才能开始控制流水灯,按下k3后LED闪烁提示开始成功。 在按下k3后,其余键即可控制流水灯。其中k1执行从右到左,k2执行从左到右。 按下k4,执行外部中断,立马中止流水灯运行,需重新按下启动键重启。

    2024年02月06日
    浏览(36)
  • 51单片机实现流水灯

    我们之前说过可以控制管脚口电平来控制LED的亮灭,低电平灯亮,高电平灯灭,具体可以看我之前的博客。 P20~P27可以用八位二进制数来表示每一位的电平,第八位是P20,第一位是P27,那么11111110就代表P20亮,其他灭,11101111就代表P24亮,其他灭。流水灯的代码就可以写成这样

    2024年02月11日
    浏览(44)
  • 51单片机入门流水灯

    上次已经实现了LED的点亮了,这篇文章将带大家实现流水灯。 要想实现流水灯首先就得知道什么是延时函数,延时函数的作用就是等待。比如延时一毫秒就是让程序在这里等待一毫秒。延时函数的本质就是执行一些空指令,因为执行指令需要耗费时间,所以执行一定数量的空

    2024年02月04日
    浏览(41)
  • 51单片机按键控制流水灯

    1独立按键的原理图 按键所对应的引脚为P3的0、1、2、3引脚口,并且这里总共有四个独立按键,它们公共的一段都接到了 GND 电源的负极。这样我们就知道按键上电的默认电平为高电平。所以我们只需要控制按键按下时给一个低电平0,不按下时默认高电平1就行。  2按键控制

    2024年02月11日
    浏览(52)
  • 51单片机学习--LED流水灯

    延时代码可通过软件生成,系统频率要和开发板的晶振频率相对应。  

    2024年02月16日
    浏览(51)
  • 51汇编单片机学习(三)八路流水灯

    流水灯主要是在小灯闪烁的基础上对小灯进行移动 八路流水则为赋值一组引脚并对引脚进行定义,在上一篇文章我们能知道当引脚置1时为高电平,此时小灯不亮,引脚置0时,低电平,小灯亮,所以可知在一组引脚中,可设置小灯初始位置从“01111111”开始亮起,而十六进制

    2024年02月07日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包