“嵌入式系统”实验教案
实验二 数码管显示实验
一、实验目的
1.通过实验了解点亮数码管的方法
2. 了解数码管应用的方法
3. 修改原代码,实现其它的应用
二、 实验设备
1.PC 微机一台;
2.Super ARM 实验箱一台;
3.U-Link2 仿真器一只。
三、实验原理
1. 数码管及其显示方式
(1)静态显示
静态显示是指当 8 段数码管显示一个字符时,该字符对应段的发光二极管控制信号一直保
持有效。即显示的笔段始终保持发光,字不会出现闪烁;显示 N 个字需要 N 倍连线,因而需要
的 I/O 较多。
(2)动态显示
动态显示是指当 8 段数码管显示一个字符时,该字符对应段的发光二极管是轮流点亮的,
即控制信号按一定周期有效。在轮流点亮的过程中,点亮时间是极为短暂的(约 1ms)。但由于
人的视觉暂留现象及发光二极管的余辉效应,数码管的显示依然是非常稳定的。
四、 实验步骤
1、建立工程文件夹、启动RealView MDK、工程创建和启动代码配置
z 在E:盘目录下建立工程文件夹(e:\exp2)。并将“嵌入式系统实验二”文
件夹内的“2410addr.h”;“option.h”;“SDRAM.ini”三个文件拷贝至工
程文件夹(e:\exp2)内。
z 启动RealView MDK,选择菜单Project->New uVision Project,指定工程的保存路径
(e:\exp2),并给新工程命名为digitLED.uvproj,单击“保存”按钮。
z 在自动弹出的器件选择窗口(Select Device for Target ‘Target 1’)中选择该工
程所对应的处理器型号(实验箱中处理器为Samsung 公司的S3C2410A),并单击“确
定”按钮,。在弹出启动代码生成对话框时,选择 “是”按钮,此时将在LED 工程中
自动生成S3C2410A 的启动代码。
z 对启动代码进行配置,全部除去勾选项(否则可能导致调试时不稳定)
2、 编辑代码,将其另存为 digitLED.c 文件,并添加到工程中
选择菜单 File->New…创建新文件(缺省为 text1*,保存时应修改文件名及文件类型),
编辑代码:
/* -----digitLED.c begin------ */
#include "2410addr.h"
void LedShow( int key,int i);
lchzeng
高亮
lchzeng
高亮
lchzeng
高亮
Administrator
高亮
int led[]={4,3,2,1};
int main(void){
unsigned int i,j,k;
while (1){
for (k=0; k<5; k++)
{
for (j=0; j<50; j++)
for (i=0; i<4; i++)
LedShow(8, i); // 全亮
for (j=0; j<50; j++)
for (i=0; i<4; i++)
LedShow(15, i); // 全灭
}
// 顺序亮
for (k=0; k<10; k++)
for (j=0; j<200; j++)
for (i=0; i<4; i++)
LedShow(k, i);
// 循环亮
for (k=0; k<10; k++)
for (i=0; i<4; i++)
for (j=0; j<100; j++)
LedShow(k, i);
// 1,2,3,4
for (j=0; j<600; j++)
for(i=0; i<4; i++)
LedShow(led[i], i);
}
}
void LedShow(int key,int i)
{
int j;
rGPHCON = (rGPHCON & ~(3<<16)) | (1<<16); // 设置点,不亮(GPH8 = OUTPUT)
rGPHUP |= 1<<8;
rGPHDAT = (rGPHDAT & ~(1<<8)) | (0<<8);
rGPECON = (rGPECON & ~(0xFFC0000)) | (0x5540000); // 设置 GPE[9 ~ 13] = OUTPUT
rGPEUP |= (1<<9) | (1<<10) | (1<<11) | (1<<12);
rGPGCON = (rGPGCON & ~(3<<4)) | (1<<4); // 设置 GPG2 = OUTPUT
rGPGUP |= 1<<2;
switch(i)
{
case 0:
// 选择第一个数码管(从右到左)
rGPGDAT |= (1<<2); // 设置数码管的位选 GPG2 = 1
rGPEDAT |= (1<<9); // 设置数码管的位选 GPE9 = 1
break;
case 1:
// 选择第二个数码管(从右到左)
rGPGDAT &= ~(1<<2); // 设置数码管的位选 GPG2 = 0
rGPEDAT |= (1<<9); // 设置数码管的位选 GPE9 = 1
break;
case 2:
// 选择第三个数码管(从右到左)
rGPGDAT |= (1<<2); // 设置数码管的位选 GPG2 = 1
rGPEDAT &= ~(1<<9); // 设置数码管的位选 GPE9 = 0
break;
case 3:
// 选择第四个数码管(从右到左)
rGPGDAT &= ~(1<<2); // 设置数码管的位选 GPG2 = 0
rGPEDAT &= ~(1<<9); // 设置数码管的位选 GPE9 = 0
break;
}
rGPEDAT = (rGPEDAT & ~(0x3C00)) | (key<<10); // 对应数字(0 ~ 9)
for(j=0; j<=1000; j++);
}
/* -----digitLED.c end------ */
将代码另存为 digitLED.c 文件;并将 digitLED.c 添加到工程中
(4)对工程属性进行设置(必须在编译 Build Project 之前配置,否则报错!)
选择菜单Project->Options for target ‘target 1’或单击工程属性快捷键,打
开工程属性设置窗口,
z 设置 Target 项:
lchzeng
线条
SDRAM 起始地址为 0x3000 0000,大小 64MByte(0x400 0000)
设置 ROM1: Start=0x3000000;Size=0x1000000; 并选中 Startup
设置 RAM1: Start=0x3100000;Size=0x1000000;
z 设置工程属性的Debug 项
设置仿真调试等控制和指定装载调试脚本文件。Use:ULink ARM Debugger (注:
Initialization File 项的SDRAM.ini 文件为调试脚本,最好将其置于该工程目录下)。
工程属性的其它选项为默认设置。
lchzeng
高亮
lchzeng
高亮
lchzeng
高亮
lchzeng
矩形
选择菜单 Project->Build all target file 或快捷键,对整个工程进行编译链接
(6)仿真调试
选择菜单Debug->Start/Stop Debug Session,或者点击快捷键,如果顺利将进入如下图所
示的调试窗口。切换到混合模式查看时,将出现如图所示的汇编模式窗口,此时应特别关注PC 指
向的地址(0x30000xxx)在SDRAM 内存区域
(7)观察运行结果
单步 step 、运行 run 和停止 stop 观察 LED 灯的亮灭情况(先亮红灯,后亮绿
灯)。
(8) 修改代码实验
看懂 void LedShow(int key,int i)函数,并应用它修改 main()函数,使数码管显现不同的
显示效果。
提示:LedShow 的参数 key 代
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
数码管显示的数字,参数 i 代表自左至右第 i 个数码管显
示数字。
(a)使左边第一个数码管依次显示 0~9: 修改 main()函数:
int main(void){
unsigned int i,j,k;
lchzeng
矩形
lchzeng
矩形
while (1){
i=1;
for(k=0; k<=9; k++)
for (j=0; j<600; j++)
LedShow(k, i);
}
}
(b)使数码管循环自左向右在 0~9 之间依次增加 digitLED_add.c
int main(void){
unsigned int i,j,k;
while (1){
for (i=0;i<4;i++){
k++;
if (k>9) k=0;
for (j=0; j<600; j++)
LedShow(k, i);
}
}
}
(c)自行设计数码管循环及显示方式,如变速闪亮、方向轮换等
五、 实验结果与分析
1、写出参考代码运行的现象
(1)运行成功与否,出现问题原因(如语法错误,配置不当)?
(2)运行成功后实验现象,并解释
2、自行设计的程序,描述其功能?运行现象,并写出其关键代码(加以注释)
(1)自行设计的程序原理及其分析。ǎ2?运行成功后实验现象,并解释!
Administrator
线条
Administrator
线条
Administrator
高亮