上海电力学院
嵌入式软件开发基础实验报告
题目: ARM 【实验4.6】数码管显示实验
专业: 电子科学与技术
年级:
姓名:
学号:
一、实验目的
(1)通过实验掌握 LED 的显示控制方法;
(2)巩固实验 4.1 中所掌握的对存储区进行访问的方法;
二、 实验设备
硬件:Embest EduKit-III 实验平台,Embest ARM 标准/增强型仿真器套件,PC 机
软件:Embest IDE Pro ARM 集成开发环境,Windows 98/2000/NT/XP
三、 实验内容
编写程序使实验板上八段数码管循环显示 0 到 9 字符
四、 实验原理
嵌入式系统中,经常使用八段数码管来显示数字或符号,由于它具有显示清晰、亮度高、使用电
压低、寿命长的特点,因此使用非常广泛。
(1)结构
八段数码管由八个发光二极管组成,其中七个长条形的发光管排列成“日”字形,右下角一个点
形的发光管作为显示小数点用,八段数码管能显示所有数字及部份英文字母
(2)工作原理
以共阳极八段数码管为例,当控制某段发光二极管的信号为低电平时,对应的发光二极管点亮,
当需要显示某字符时,就将该字符对应的所有二极管点亮;共阴极二极管则相反,控制信号为高电平时点亮。电平信号按照dp,g,e…a 的顺序组合形成的数据字称为该字符对应的段码,常用字符的段码表
(3)显示方式
八段数码管的显示方式有两种,分别是静态显示和动态显示。静态显示是指当八段数码管显示一个字符时,该字符对应段的发光二极管控制信号一直保持有效。动态显示是指当八段数码管显示一个字符时,该字符对应段的发光二极管是轮流点亮的,即控制信号按一定周期有效,在轮流点亮的过程中,点亮时间是极为短暂的(约 1ms),由于人的视觉暂留现象及发光二极管的余辉效应,数码管的显示依然是非常稳定的。
五、实验步骤
1. 准备实验环境
使用 Embest 仿真器连接目标板,使用 Embest EduKit-III 实验板附带的串口线,连接实验 板上的 UART0 和 PC 机的串口。
2. 串口接收设置
在 PC 机上运行 windows 自带的超级终端串口通信程序(波特率 115200、1 位停止位、无校验位、无硬件流控制);或者使用其它串口通信程序。
3. 打开实验例程
1)拷贝光盘 CD1\Software\EduKit44b0 文件夹到 EmbestIDE\Examples\Samsung\ 目录下;
2) 使用 Embest IDE 通过 Embest JTAG 仿真器连接实验板,打开实验例程目4.6_8led_test 子目录下的 8led_test.pjf 例程,编译链接工程成功;
3) 点击 IDE 的 Debug 菜单,选择 Remote Connect 项或 F8 键,远程连接目标板;
4) 点击 IDE 的 Debug 菜单,选择 Download 下载调试代码到目标系统的 RAM 中;
5) 点击 Debug 菜单的 Go 或 F5 键运行程序。
4. 观察实验结果
1).在 PC 机上观察超级终端程序主窗口,可以看到如下界面:
boot success...
8-segment Digit LED Test Example (Please look at LED)
2). 实验系统八段数码管循环显示 0 ~ 9 字符。
六、实验小结
这次ARM实验课的实验比较容易,只需打开现有程序即可实现,唯一的困难就是在于setting比较困难。我觉得实验在于最困难的地方还是在于没有提前预习,给实验造成了很大的困难,进程缓慢。这是我以后实验仍需注意的地方。
第二篇:实验报告 实验七 八段数码管显示实验
EDA实验报告 之
实验七 八段数码管显示实验
1、实验目的
1)了解数码管动态显示的原理。
2)了解用总线方式控制数码管显示
2、实验要求:利用实验仪提供的显示电路, 动态显示一行数据.
提示:把显示缓冲区(例如可为60H~65H作为缓冲区)的内容显示出来,当修改显示缓冲区的内容时,可显示修改后的内容(为键盘扫描、显示实验做准备)。
3、实验说明
本实验仪提供了6 位8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。显示共有6位,用动态方式显示。8位段码、6位位码是由两片74LS374输出。位码经MC1413或ULN2003倒相驱动后,选择相应显示位。
本实验仪中 8位段码输出地址为0X004H,位码输出地址为0X002H。此处X是由KEY/LED CS 决定,参见地址译码。
做键盘和LED实验时,需将KEY/LED CS 接到相应的地址译码上。以便用相应的地址来访问。例如,将KEY/LED CS接到CS0上,则段码地址为08004H,位码地址为08002H。
七段数码管的字型代码表如下表:
a
-----
f| |b
| |
-----
| g |
e| |c
-----
d 。h
显示字形 g f e d c b a 段码
0 0 1 1 1 1 1 1 3fh
1 0 0 0 0 1 1 0 06h
2 1 0 1 1 0 1 1 5bh
3 1 0 0 1 1 1 1 4fh
4 1 1 0 0 1 1 0 66h
5 1 1 0 1 1 0 1 6dh
6 1 1 1 1 1 0 1 7dh
7 0 0 0 0 1 1 1 07h
8 1 1 1 1 1 1 1 7fh
9 1 1 0 1 1 1 1 6fh
A 1 1 1 0 1 1 1 77h
b 1 1 1 1 1 0 0 7ch
C 0 1 1 1 0 0 1 39h
d 1 0 1 1 1 1 0 5eh
E 1 1 1 1 0 0 1 79h
F 1 1 1 0 0 0 1 71h
4、原理图及连线
5、实验内容
1) 使用仪器、仪表,开发平台型号
本实验用到了WAVE 6000软件平台,电脑一台,LAB6000实验箱,示波器,若干连线,串行数据线。
2) 性能指标、技术要求、思路方案、流程图
5.1 性能指标、技术要求见实验目的和实验要求。
5.2 思路方案:将数据放入显示缓冲区60—65H单元,通过位选信号,段选信号控制数码管显示相应的内容,其中,段选信号由查表得到。为了动态显示富有变化,每一轮显示完毕后,需要改变数据单元的内容。为了数码管显示不抖动,还需要对每一轮数据显示一定的次数,具体见代码。
5.3 流程图:(见下页)
流程图:
3) 源程序(为了程序看起来更规范和容易理解,最好将各部分功能分离,在主程序中以子程序调用的形式调用相应的子程序)
ORG 0000H
LJMP BEGIN
ORG 0030H
BEGIN:
LCALL INITIALIZE ;设置60H--65H单元的初值
DIS:
LCALL DISPLAY ;显示缓冲区单元的数据
LCALL CHANGE ;改变缓冲区单元的数据
LCALL DELAY ;为了两轮显示间时间间隔久一些
DJNZ R5,DIS ;是否显示完一遍0-F,是则重新开始
SJMP BEGIN ;重新开始
SJMP $
[番茄花园1]
;==============
DISPLAY:[番茄花园2]
;===
MOV R6,#40 ;设置每一轮显示的次数
BEGIN0:
MOV A,#01H ;位选通信号
MOV R2,#6 ;显示缓冲区只有6个字节单元
MOV R0,#60H ;显示缓冲区单元数据地址
;***
LOOP:
MOV DPTR,#8002H ;位选输出地址
MOVX @DPTR,A
RL A ;修改位信号
PUSH A
MOV DPTR,#8004H ;数据输出地址
MOV A,@R0
LCALL CHECK ;查表
MOVX @DPTR,A
LCALL DELAY ;显示一个数后稍等一会
;***
INC R0
POP A
DJNZ R2,LOOP ;这一轮是否显示完
DJNZ R6,BEGIN0 ;总轮数显示40次,是否显示完
RET
;==============
initialize:[番茄花园3]
mov 60h,#00h
mov 61h,#01h
mov 62h,#02h
mov 63h,#03h
mov 64h,#04h
mov 65h,#05h
MOV R5,#11 ;为了显示0---F,需要调用change子函数11次
RET
;==============
DELAY:[番茄花园4]
MOV R7,#03H
MOV R3,#0FFH
LOOPP:
DJNZ R3,$
DJNZ R7,LOOPP
RET
;==============
CHANGE:[番茄花园5]
MOV R2,#6 ;6次
MOV R0,#60H ;数据地址
LOOP1:
INC @R0
INC R0
DJNZ R2,LOOP1
RET
;==============
CHECK:[番茄花园6]
INC A
MOVC A,@A+PC
RET
;==============
TABLE:[番茄花园7]
DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
DB 77H,7CH,39H,5EH,79H
DB 71H
4) 实验步骤,完成情况
4.1 在WAVE 6000中新建文件,并将代码写入文件中,保存为EXPERIMENT7.ASM;
4.2 在WAVE 6000中新建项目,并在模块文件中包含上述EXPERIMENT7.ASM文件,最后保存为EXPERIMENT7.PRG。
4.3 编译程序,按照提示改正错误的地方,直到没有语法错误为止。
4.4 完成上一步后,检查是否有逻辑错误。
4.5 按连线图连好线,经师兄确认后打开电源。
4.6 观察数码管的输出是否正确。如果错误,检查连线,源程序,并修改错误的地方,直到调试出正确的波形为止。
4.7 结果正确后,等师兄检查完毕。然后收拾实验仪器,包括电源线、导线、串口线,示波器等,收拾桌面和凳子。
6、本实验遇到问题及解决方案
6.1 第一次做这个实验的时候,由于没有找到能用的电脑,和实验箱,以至于一直只能处于模拟调试的阶段,所以没有什么进展。
解决方案:俗话说,早起的鸟儿有虫吃,所以呢,以后实验课得早点去,呵呵。
6.2 实验中遇到一个问题:数码管显示的数据很是奇妙,非常诡异,而且复位后显示缓冲区的数据也被改得乱七八糟,着实让人头大。
解决方案:经过仔细(几乎是单步调试了)后,发现,原来是R3在两个不同的地方被误用了,改正后程序就没问题了。这也给我一个教训:用了什么寄存器单元资源,应该做到心中有数。
6.3 数码管显示的时候感觉总是有抖动。
解决方案:这是程序中delay的延时没有设置适当导致的,经过尝试几个不同的延时数值后,终于得到比较好的显示效果。一点经验:实践是检验真理的唯一标准,做硬件实验更是如此。呵呵。
7、对本实验的改进建议和疑难问题:
7.1 改进建议:
为了增大难度,可以将显示缓冲区改为外部数据存储单元,还可以将显示数据单元的内容增大一些。
7.1 疑难问题:
如何将数码管的显示抖动去除得更好,这是一个问题。除了实验过程中采用的尝试的方法以外,有没有什么科学的计算推理方法呢?这值得思考。
20##-5-6
[番茄花园1]这部分是主程序
[番茄花园2]显示子程序
[番茄花园3]初始化显示缓冲区数据单元
[番茄花园4]延时子程序
[番茄花园5]改变缓冲区数据单元的子程序
[番茄花园6]查表子程序
[番茄花园7]表格