实验2 GPIO控制实验1211.docx
《实验2 GPIO控制实验1211.docx》由会员分享,可在线阅读,更多相关《实验2 GPIO控制实验1211.docx(16页珍藏版)》请在冰豆网上搜索。
实验2GPIO控制实验1211
实验二GPIO控制实验
【实验目的】
1.熟悉Eclipse开发环境。
2.熟悉在ARM裸机环境下的C语言编程。
3.掌握CVT-A8下,跑马灯和数码管的应用程序编写。
【实验内容】
1.编写程序,练习C语言的使用。
2.实现对开发板上发光二极管LED的跑马灯控制。
3.代码分别在Eclipse的Debug环境下运行。
4.LED灯能按照按照一定的规律依次亮,数码管显示HELLO。
【实验设备】
1.硬件:
CVT-S5PV210嵌入式教学实验箱、PC机;
2.软件:
PC机操作系统Windows98(2000、XP)+Eclipse开发环境。
【基础知识】
按照实验一的内容,熟悉操作Eclipse操作。
LED显示原理
从实验箱边板电路图上我们可以看到,4个发光二极管LED的一端连接到了3.3V电源上,另一端经过一个限流电阻接到XEINT28\29\30\31这四个引脚。
实验电路原理图如下:
继续查找实验箱核心板电路图,可以看到当XEINT28\29\30\31这四个引脚对应S5PV210核心芯片的GPH3IO口GPH3_4/5/6/7这四个引脚。
实验电路原理图如下:
那么我们通过GPH3的这四个引脚的某个输出端为低电平时,对应连接的LED两端产生电压降,这时此LED有电流通过并发光。
反之我们通过GPH3的这四个引脚的某个输出端为高电平时,此LED将熄灭。
注意亮灭之间要有一定的延时,以便人眼能够区分出来。
控制GPH3的相应寄存器GPH3CON和GPH3DAT如下:
实验程序通过设置GPH3CON控制GPH3_4GPH3_5GPH3_6GPH3_7为输出方式,通过GPH3DAT控制输出电平点亮或熄灭4个LED灯,如下:
#include"s5pc210.h"
#include"uart.h"
/********************************************************************
//Functionname:
delay
//Description:
延时子程序
//Returntype:
void
//Argument:
count,延时的数值
********************************************************************/
voiddelay(intcount)
{
intcnt;
for(count=count;count>0;count--)
for(cnt=0;cnt<1000;cnt++);
}
intmain()
{
uart_init();
printf("CVTS5PV210JtagGpioLedTest...\n");
volatileinti,j=0;
GPH3.GPH3CON=0x11110000;
while
(1){
GPH3.GPH3DAT=0xFF;/*灯全灭*/
for(i=0;i<=1000000;i++);
GPH3.GPH3DAT=0x0;
for(i=0;i<=1000000;i++);
for(j=0;j<4;j++){
GPH3.GPH3DAT=~(0x1<<(j+4));
for(i=0;i<=1000000;i++);
}
}
return0;
}
数码管显示原理
发光二极管数码显示器简称LED显示器。
LED显示器具有耗电省、成本低廉、配置简单灵活、安装方便、耐振动、寿命长等优点,目前广泛应用于嵌入式系统中。
7段LED由7个发光二极管按“日”字形排列,所有发光二极管的阳极连在一起称共阳极接法,阴极连在一起称为共阴极接法。
一般共阴极可以不需外接电阻,但共阳极接法中发光二极管必须外接电阻。
LED的结构及连接图见图2-5-1。
图2-5-1LED结构及连接图
当选用共阴极的LED显示器时,所有发光二极管的阴极连在一起接地,当某个发光二极管的阳极加入高电平时,对应的二极管点亮。
因此要显示某字形就应使此字形的相应段的二极管点亮,也就是送一个用不同电平组合代表的数据字来控制LED的显示,此数据称为字符的段码。
字符0、1、2…F与LED码段A、B、C…F以及DP(小数点)的关系如表3-8-2所示:
表3-8-2LED字符与码段对应表
字符
DP
G
F
E
D
C
B
A
段码(共阴)
段码(共阳)
0
0
0
1
1
1
1
1
1
3FH
C0H
1
0
0
0
0
0
1
1
0
06H
F9H
2
0
1
0
1
1
0
1
1
5BH
A4H
3
0
1
0
0
1
1
1
1
4FH
B0H
4
0
1
1
0
0
1
1
0
66H
99H
5
0
1
1
0
1
1
0
1
6DH
92H
6
0
1
1
1
1
1
0
1
7DH
82H
7
0
0
0
0
0
1
1
1
07H
F8H
8
0
1
1
1
1
1
1
1
7FH
80H
9
0
1
1
0
1
1
1
1
6FH
90H
A
0
1
1
1
0
1
1
1
77H
88H
B
0
1
1
1
1
1
0
0
7CH
83H
C
0
0
1
1
1
0
0
1
39H
C5H
D
0
1
0
1
1
1
1
0
5EH
A1H
E
0
1
1
1
1
0
0
1
79H
86H
F
0
1
1
1
0
0
0
1
71H
8EH
-
0
1
0
0
0
0
0
0
40H
BFH
.
1
0
0
0
0
0
0
0
80H
7FH
熄灭
0
0
0
0
0
0
0
0
00H
FFH
说明:
共阴的LED,被选中时的段为高电平有效,熄灭的段码为00H;
共阳的LED,被选中时的段为低电平有效.熄灭的段码为FFH。
LED数码管显示器的接口一般有静态显示与动态显示接口两种方式,下面分别加以介绍。
1)静态显示
LED数码管采用静态接口时,共阴极或共阳极点连接在一起接地或接高电平。
每个显示位的段选线与一个8位并行口线对应相连,只要在显示位上的段选线上保持段码电平不变,则该位就能保持相应的显示字符。
这里的8位并行口可以直接采用并行I/O口,也可以采用串入/并出的移位寄存器或是其它具有三态功能的锁存器等。
2)动态显示
在多位LED显示时,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个8位I/O口控制。
而共阴(或共阳)极公共端分别由相应的I/O线控制,实现各位的分时选通。
由于各个数码管是共用同一个段码输出口,分时轮流通电的,从而大大简化了硬件线路,降低了成本。
不过这种方式的数码管接口电路中数码管不宜太多,一般在8个以内,否则每个数码管所分配的实际导通时间会太少,显得亮度不足。
若LED位数较多时应采用增加驱动能力以提高显示亮度。
本实验系统中采用的是动态显示接口,其中数码管扫描控制地址为0x88007000,位0-位5每位分别对应一个数码管,将其中某位清0来选择相应的数码管;地址0x88009000为数码管的数据寄存器。
数码管采用共阳方式,向该地址写一个数据就可以控制LED的显示。
实验电路原理图如下:
实验程序如下:
#include"s5pc210.h"
#include"uart.h"
#defineU8unsignedchar
unsignedcharseg7table[16]={
/*01234567*/
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
/*89ABCDEF*/
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,
};
/*****************************************************************************
//Functionname:
delay
//Description:
延时子程序
//Returntype:
void
//Argument:
count,延时的数值
*****************************************************************************/
voiddelay(intcount)
{
intcnt;
for(count=count;count>0;count--)
for(cnt=0;cnt<1000;cnt++);
}
intmain()
{
uart_init();
printf("CVTS5PV210JtagSegTest...\n");
inti;
*((U8*)0x88007000)=0x00;/*数码管地址为0x88007000,选通所有数码管*/
for(;;){
/*数码管从0到F依次将字符显示出来*/
for(i=0;i<0x10;i++){
/*查表并输出数据*/
*((U8*)0x88009000)=seg7table[i];
delay(1000);
}
/*数码管从F到0依次将字符显示出来*/
for(i=0xf;i>=0x0;i--){
/*查表并输出数据*/
*((U8*)0x88009000)=seg7table[i];
delay(1000);
}
}
return0;
}
【实验步骤】
1.首先打开Eclipse软件指定工作目录。
2.打开GpioLed工程。
点击eclipse工具栏的“File”,然后点击“Import”。
然后点击“ExistingProjectintoWorkspace”。
再次点击“Browse”按钮。
进入目录D:
\eclipse_projects\GpioLed\。
点击“Finish”按钮。
成功添加工程到Eclipse中。
3.点击工程右键,点击“BulidProject”按钮,对工程进行编译,生成Gpioled.elf文件。
点击工具栏“Run“-“DebugConfiguration”设置工程调试参数,详细设置过程参看实验一内容。
注意在Command选项卡中输入:
load
breakmain
c
编译成功提示如上。
4.连接好仿真器,将仿真器一端使用排线链接试验箱JTAG接口,另一端使用方口USB线连接实验电脑。
5.实验箱通电,迅速打开Jlink安装目录下的JLinkGDBServerCL调试工具,
等待连接成功连接试验箱。
6.点击工具栏“Run—DebugConfigurations“,选择”GpioLedDefault“调试配置选项,然后点击”Debug“按钮进入调试模式。
7.在eclipse调试界面下,可以使用工具提供的调试功能进行程序调试,运行。
【实验结果】
1.四个LED轮流闪烁,实现流水灯效果。
2.六个SEG轮流闪烁,实现从0-F轮流显示。
【实验要求】
1.掌握实验原理
2.能够debug程序,运行结果正确
3.能够分析程序代码,根据要求更改程序
4.循环显示你学号的后六位(在第X个数码管上显示你学号后六位的第x位,比如你的学号后六位为012345,则在最左边数码管显示0,最右边显示5,并循环显示
5.进阶:
静止显示你学号的后六位(012345)