您好,欢迎来到华佗健康网。
搜索
您的当前位置:首页LED控制实验

LED控制实验

来源:华佗健康网
LED 控制实验

一. 实验目的

掌握利用 S3C2410X 芯片地址总线扩展的I/O 来驱动LED 显示;

了解 ARM 芯片中利用总线扩展I/O 口的使用方法。

二. 实验设备

硬件:Embest EduKit-IV 平台,ULINK2 仿真器套件,PC 机;

软件:μVision IDE for ARM 集成开发环境,Windows 98/2000/NT/XP。

三. 实验内容

编写程序,控制实验平台的发光二极管LED1,LED2,LED3,LED4,使它们有规律的点亮和熄灭,

具体顺序如下:LED1 亮->LED2 亮->LED3 亮->LED4 亮->LED1 灭->LED2 灭->LED3 灭->LED4 灭->全亮->全灭,如此反复。

四. 实验原理

在开发LED 驱动之前,首先了解本实验的原理图:EduKit-IV 设计了5 个LED(D1~D5)用于指示和控制系统的状态,其中D2 指示电源的状态,其他4 个的状态是用户可编

程的(SYSLED1~SYSLED4),在EduKit-IV 中,这4 个 LED 的状态通过扩展I/O 接口进行控制。

EduKit-IV LED 所用到的扩展I/O 如图5-2-1 所示:

图5-2-1 片选信号的产生

利用3/8 译码器将A18-A20 扩展了7 个外设片选信号CS1-CS7。CS1 和CS2 引出到外部扩展接口EXCON_B3,CS3 和CS4 为总线扩展输入的芯片74HC1 的片选。CS5,CS6,和CS7 为总线扩展输出的芯片74HC573 的片选。

片选信号在接入74HC573 前经过了如下处理:

图5-2-2 OLE 信号的产生

其中CS5,CS6,CS7 3 个片选信号和写使能信号通过74HC32 或门输出一个选通信号LE 为低

电平。

图5-2-3 LE 信号的产生

前面或门输出的LE 选通信号经过74HC04 反相得到高电平后再连接到扩展输出芯片74HC573。

EduKit-IV LED 接口电路如图5-2-4 和图5-2-5 所示。在本实验平台上,如图5-2-4,芯片

74VHC573DT 的选通物理地址为0x21180000,当访问这个物理地址的时候,就可以访问其上的硬件资源了。这里可以把其理解为一个寄存器,寄存器地址是0x21180000,它的低4 位控制了4 个LED灯,通过访问地址为0x21180000 的寄存器,往其低4 位置高/低电平,从而控制相应的4 个LED 灯的亮/灭。

(注意:寄存器0x21180000 是只写的,在软件编程时只能往里写数据,不能从里读数据)

图5-2-4 向LED 写入数据

图5-2-5 LED1-4 连接图

如图5-2-5 所示,LED1-4 这4 个LED 采用了共阳极的接法,分别与SYSLED1-4 相连,通过

SYSLED1-4 引脚的高低电平来控制发光二极管的亮与灭。当这几个管脚输出高电平的时候发光二极管熄灭,反之,发光二极管点亮。

五. 实验步骤

1. 准备实验环境

使用ULINK2 仿真器连接Embest EduKit-IV 实验平台的主板JTAG 接口;使用Embest EduKit-IV实验平台附带的交叉串口线,连接实验平台主板上的COM2 和PC 机的串口(一般PC 只有一个串口,如果有多个请自行选择,笔记本没有串口设备的可购买USB 转串口适配器扩充);使用Embest EduKit-IV 实验平台附带的电源适配器,连接实验平台主板上的电源接口。

2. 串口接收设置

在PC 机上运行windows 自带的超级终端串口通信程序,或者使用实验平台附带光盘内设置好了的超级终端,设置超级终端:波特率115200、1 位停止位、无校验位、无硬件流控制,或者使用其它串口通信程序。(注:超级终端串口的选择根据用户的PC 串口硬件不同,请自行选择,如果PC机只有一个串口,一般是COM1)

3. 打开实验例程

1)拷贝实验平台附带光盘DISK3_S3C2410\\03-Codes\\01-MDK\\Mini2410-IV 文件夹到MDK 的

安装路径:Keil\\ARM\\Boards\\Embest\\(如果本实验之前已经拷贝,可以跳过这一步)。(注:用户也可拷贝工程到任意目录,本实验为了便于教学,故统一实验路径);

2)运行μVision IDE for ARM 软件,点击菜单栏“Project”,选择“Open Project…”,在弹出的对话框选择实验例程目录LED_Test 子目录下的LED_Test.Uv2 工程。

3)默认打开的工程在源码编辑窗口会显示实验例程的说明文件readme.txt,详细阅读并理解实验内容。

4)工程提供了两种运行方式:一是下载到SDRAM 中调试运行,二是固化到Nor Flash 中运行。用户可以在工具栏Select Target 下拉框中选择在RAM 中调试运行还是固化Flash 中运行。如下图所示:

图5-2-6 选择运行方式

下面实验将介绍下载到SDRAM 中调试运行,所以我们在Select Target 下拉框中选择LED_Test IN RAM。

5)接下来开始编译链接工程,在菜单栏“Projiet”选择“Build target”或者“Rebuild all target files”编译整个工程,用户也可以在工具栏单击“ ”或者“ ”进行编译。

6) 编译完成后,在输出窗口可以看到编译提示信息,比如“\".\\SDRAM\\LED_Test.axf\" - 0 Error(s),1 Warning(s).”,如果显示“0 Error(s)”即表示编译成功。

7)拨动实验平台电源开关,给实验平台上电,单击菜单栏Debug->Start/Stop Debug Session

项将编译出来的映像文件下载到SDRAM 中,或者单击工具栏“ ”按钮来下载。

8)下载完成后,单击菜单栏Debug->Run 项运行程序,或者单击工具栏“ ”按钮来全速运

行程序。用户也可以使用进行单步调试程序。

9)全速运行后,用户可以在超级终端看到程序运行的信息。

10)用户可以Stop 程序运行,使用μVision IDE for ARM 的一些调试窗口跟踪查看程序运行的信息。

注:如果在第4)步用户选择在Flash 中运行,则编译链接成功后,单击菜单栏Flash->Download项将程序固化到NorFlash 中,或者单击工具栏按钮“ ”固化程序,从实验平台的主板拔出JTAG线,给实验平台重新上电,程序将自动运行。

4. 观察实验结果

在执行到第8)步时,可以看到超级终端上输出如下字符。观察发光二极管的亮灭情况,可以观察到的现象与前面实验内容中的相符,说明实验成功的实现了利用总线扩展I/0 对LED 的驱动。

*******************************************************************

** 英蓓特EduKit 系列嵌入式教学系统平台 **

** Embest EduKit Series Embedded Teaching Platform **

*******************************************************************

Expand I/O (Diode Led) Test Example

Please Look At The LEDS

end.

5. 完成实验练习题

理解和掌握实验后,完成实验练习题。

六. 实验参考程序

/*********************************************************************************************

* File: led_test.c

* Author: embest

* Desc: Led_Test

* History:

*********************************************************************************************/

/*------------------------------------------------------------------------------------------*/

/* include files */

/*------------------------------------------------------------------------------------------*/

#include \"2410lib.h\"

/*------------------------------------------------------------------------------------------*/

/* constant define */

/*------------------------------------------------------------------------------------------*/

#define LEDADDR (*(volatile unsigned char*)0x21180000) // LED Address

/*********************************************************************************************

* name: led_on

* func: turn on the leds one by one

* para: none

5. * ret: none

* modify:

* comment:

*********************************************************************************************/

void led_on(void)

{

int i,nOut;

nOut = 0xFF;

LEDADDR = nOut & 0xFE;

for(i = 0; i < 100000; i++);

LEDADDR = nOut & 0xFC;

for(i = 0; i < 100000; i++);

LEDADDR = nOut & 0xF8;

for(i = 0; i < 100000; i++);

LEDADDR = nOut & 0xF0;

for(i = 0; i < 100000; i++);

}

/*********************************************************************************************

* name: led_off

* func: turn off the leds one by one

* para: none

* ret: none

* modify:

* comment:

*********************************************************************************************/

void led_off(void)

{

int i,nOut;

nOut = 0xF0;

LEDADDR = nOut | 0x01;

for(i = 0; i < 100000; i++);

LEDADDR = nOut | 0x03;

for(i = 0; i < 100000; i++);

LEDADDR = nOut | 0x07;

for(i = 0; i < 100000; i++);

LEDADDR = nOut | 0x0F;

for(i = 0; i < 100000; i++);

}

/*********************************************************************************************

* name: led_on_off

* func: turn on the 4 leds and then turn off the 4 leds

* para: none

* ret: none

* modify:

* comment:

*********************************************************************************************/

void led_on_off(void)

{

int i;

LEDADDR = 0xF0;

for(i = 0; i < 100000; i++);

LEDADDR = 0xFF;

for(i = 0; i < 100000; i++);

}

/*********************************************************************************************

* name: led_test

* func: i/o control test(led)

* para: none

* ret: none

* modify:

* comment:

*********************************************************************************************/

void led_test(void)

{

uart_printf(\" Expand I/O (Diode Led) Test Example\\n\");

uart_printf(\" Please Look At The LEDS \\n\");

led_on();

led_off();

led_on_off();

delay(2000);

uart_printf(\" end.\\n\");

}

七. 练习题

自己编写程序使数码管以不同的显示方式显示。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.com 版权所有 湘ICP备2023021991号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务