实验3 数码管显示实验
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8位锁存器74LVCH273功能表 D0 D Q CLK Q0 CLR 1 1 0 CLK 其它 X 操作 Qi = Di Qi =不变 Qi =高阻态
Vcc Q7 D7 D6 Q6 Q5 D5 D4 Q4 CLK
D7
D
Q CLK
Q7
CLK CLR
74LVCH273
CLR Q0 D0 D1 Q1 Q2 D2 D3 Q3 GND
H
ED7~ED0
3.3V
G
D
B C H
3.3V nCS SEG1 (对应口地址 =0x20006000)
3.3V
8段共阳数码管
ldr r0,=0x20007000 2、向位选通信口地址0x20007000输出一个位选通数据: ldr r1,=0xDF ;仅6#数码管亮 str r1,[r0]
实验说明
F
取显示码送数码管显示
ldr ldr add ldr r4,=seg7table r2,=0x00 r1,r4,r2 r1,[r1] ; r4存放显示码表起始地址 ; r2存放将要显示的值 ; r1记录当前数码管数据所在的地址 seg7table+3 0xb0 3 ; 把数码管所要显示的值加载到r1中
ED0 ED1 ED2 ED3 ED4 ED5 ED6 ED7 D0 D1 D2 D3 D4 D5 D6 D7 CLK Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 CLR
a
PA7
h
f
e
a g b c d h
处理器 数据总线
PA0
nCS SEG1
段数据选通
8D锁存器结构及工作原理
锁存器就是带三态输出的D触发器,通常以8个D触发器为一个封装。 74LVCH273就是一个典型的8D锁存器。 当MR为高电平时,CP脉冲上升沿将使得输出Qi等于其输入Di。 若CP脉冲无上升沿,则Di的变化不会影响Qi的状态,这种现象称为锁存。
ldr r0,=0x20006000 1、向段选通信号口地址0x20006000输出一个显示码: ldr r1,=0xC0 ;0的显示码 str r1,[r0]
S3C2440数据线
接数码管1 3.3V 接数码管6 3.3V nCS SEG2 (对应口地址 =0x20007000) (8D锁存器) 注:”0”电平 三极管导通 A F E
选通6个数码管位选择 显示值+1 向数码管输出显示码
此部分只能采用汇编程序
延时
实验说明
主应用汇编语言参考程序
Main LOOP L2 ldr r4,=seg7table ldr r2,=0x00 cmp r2,#0x0f bne L1 cmp r2,#0x0 beq L1 ldr r0,=0x20007000 ldr r1,=0x00 str r1,[r0] ldr r0,= 0x20006000 sub r2,r2,#1 add r1,r4,r2 ldr r1,[r1] str r1,[r0] bl Delay b L2 ; r4存储seg7table的地址 ; r2记录数码管的值 ; 比较数码管的值是否为F ; 如果不为F则跳转到L1 ; 比较数码管的值是否为0 ; 如果为数码管的值0,则跳转到L1 ; 数码管6个位选信号锁存器地址nCS SEG2 ; 把数码管全部选定 ; 把6个数码管全部选定 ; 数码管8位段数据锁存器地址nCS SEG1 ; r2减1,即完成从F到0的显示 ; r1记录当前数码管数据所在的地址 ; 把数码管所要显示的值加载到r1中 ; 显示数码管的值 ; 延时 ; 跳转到L2
1. 共阳极数码管的结构及数字显示码
位选通信号线 段数据驱动线
D7 D6 D5 D4 D3 D2 D1 D0
接处理器 数据总线
h g f e d c b a
h g f e d c b a
h g f e d c b a
a f e g b c h
d
段数据信号线
2. 8段数码管显示数字0~F的段安排
0 1 2 3 4 5 6 7 8 9 A b C d E F
显示码 (16进制)
C0 F9 A4 B0 99 92 82 F8 80 90 88 83 C6 A1 86 8E
8段共阳极数码管显示过程:
1、将8位显示码输出到数码管段数据端(经过8D锁存器)同时产生段选通信号。 2、产生某位数码管选通的位数据选通信号。
3.3V
nCS SEG2
位数据选通
数码管6 8D锁存器 74LVCH273
6位共阳数码管动态循环显示电路原理图
6个数码管的段数据和位数据分别由2个8D锁存器74LVCH273加以驱动。
段显示码数据的最低位到最高位分别对应数码管的a段到h段。
CPU首先向口地址0x20006000输出段数据(显示码),然后向口地址
0x20007000输出位数据(仅使需要显示当前段数据的数码管被选通)。
二、设计实验: 用6个八段数码管显示自己学号的最后6位数。
实验说明
八段数码管由八个发光二极管组成。 右下角一个点形的发光二级管作为小数点用。 八段数码管可分为共阴极数码管和共阳极数码管两种。 主要可用于显示0~F十六进制数。 本实验采用的数码管为共阳极数码管。
Байду номын сангаас
8段共阴极LED数码管结构及显示码的构成
八段数码管的显示方式
静态显示 动态显示 动态显示是用一组数据及控制信号实现多个数量可变的数 码管显示控制,并且不断变化送给各数码管的数据,使得 不同的数码管显示不同的字符。这种方式利用了逐位快速 轮循显示的方法。即在一个轮循显示周期中,让每位数码 管都显示一次各自的数一定时间。当轮循显示周期的数目 大于每秒50次,人眼由于视觉的惰性无法察觉变化而感觉 是静止的。本实验中采用指令延时方式,延时指令大致设 为8000条时现象较好。
实验目的
复习ADS环境下的编程,可执行文件的下载以及程序
的调试 通过实验掌握处理器利用数据总线挂带外设的方法 掌握八段数码管的显示控制方法 掌握裸机系统下采用汇编语言和C语言实现数码管显 示的编程方法
实验内容
一、验证实验:
编程实现6个数码管循同时先以正序显示0~F字符, 然后再以逆序显示F~0,并不断循环。
; 返回原程序
完成实验后,先关闭电源,再拔取
导线,将导线整理好后放入指定位 置,将凳子放入桌下,方可离开。
2440处理器
74LVCH273 ED7~ED0
数据总线
0x200070000
nCS SEG2 段数据选通 D0 D1 D2 D3 D4 D5 D6 D7 CLK Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 CLR
PA0
a f g b e a b c d e f g h
第 1位 数码管 c h
第 6位 数码管
地址总线 A31~ A0 74LVCH273 ED5~ED0 地 址 0x200060000 译 nCS SEG1 码 288H 位数据选通
D0 D1 D2 D3 D4 D5 D6 D7 CLK Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 CLR
h
a bc
de
fg h
数码管驱动电路(只画出6#数码管)及驱动程序
seg7table+2 0xa4 2 seg7table+1 0xf9 1 seg7table+0 0xc0 0
实验说明
数码管的段显示口地址、数据及程序片断
ldr r0,=0x20006000 ldr r1,=0xff str r1,[r0] ;口地址nCS SEG1=0x20006000 ; 熄灭所有数码管
数码管的位选择口地址、数据及程序片断
ldr r0,=0x20007000 ldr r1,=0x0 str r1,[r0] ; 口地址nCS SEG2=0x20007000 ;选中所有数码管,低电平有效
实验说明
取显示码送数码管显示的程序片断
ldr r4,=seg7table ldr r2,=0x? add r1,r4,r2 ldr r0,= 0x20006000 ldrb r1,[r1] str r1,[r0] ldr r0,=0x20007000 ldr r1,=0x00 str r1,[r0] ; r4=显示码表起始地址 ; r2=将要显示的值 (0~F) ; r1=将要读取的?值对应的显示码地址 ; r0=数码管段数据锁存器地址nCS SEG1 ; r1=显示值对应的显示码; ; 将显示码数据用数据线D7~D0输出到数码管 ; r0=6个数码管位选信号锁存器地址nCS SEG2 ; 使6个数码管全部都亮 ;将数码管位选择数据用数据线D7~D0输出到 ; 数码管位数据锁存器。
实验说明
本实验中所用的共阳极数码管显示数据表
字符 0 1 2 3 4 5 6 7 8 9 A b C d E F . 熄灭 H 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 G 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 0 F 1 0 0 0 1 1 1 0 1 1 1 1 1 0 1 1 0 0 0 E 1 0 1 0 0 0 1 0 1 0 1 1 1 1 1 1 0 0 0 D 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 0 0 0 0 C 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 B 1 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 0 0 0 A 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1 0 0 0 共阳极 C0H F9H A4H B0H 99H 92H 82H F8H 80H 90H 88H 83H C6H A1H 86H 8EH BFH 7FH FFH
实验说明
L1 ldr r0,=0x20007000 ldr r1,=0x00 str r1,[r0] ldr r0,= 0x20006000 add r2,r2,#1 add r1,r4,r2 ldrb r1,[r1] str r1,[r0] bl Delay b LOOP ; 数码管6个位选信号锁存器地址nCS SEG2 ; 把数码管全部选定 ; 把6个数码管全部选定 ; 数码管8位段数据锁存器地址nCS SEG1 ; r2加1,即完成从0到F的显示 ; r1记录当前数码管数据所在的地址 ; 把数码管所要显示的值加载到r1中 ; 显示数码管的值 ; 延时 ; 跳转到LOOP
;以下为数码管显示字符数据区 AREA RamData, DATA, READWRITE seg7table DCB 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e END
实验说明
;以下为延时子程序 Delay stmfd sp!,{r8,r9,lr} ldr r3,=0x8ffff; ; 延时 LOOP1 sub r3,r3,#1 cmp r3,#0 bne LOOP1 ldmfd sp!,{r8,r9,pc} LTORG ; 保护当前现场
实验程序流程框图
裸机系统基本程序运行环境设置参数及程序
复位异常程序:裸机初始化 设置静态参数 程序从0X0开始 建立异常向量表 预存存储器参数 关闭看门狗定时器
主应用程序
获取显示码表起始地址
显示值=F?
显示值=0?
选通6个数码管位选择
显示值-1 向数码管输出显示码
关闭所有中断
设置系统时钟
延时 将存储器参数写入处 理器特殊功能寄存器 区内的存储器参数区
实验说明
建立0~F显示码表:
AREA RamData, DATA, READWRITE seg7table DCB 0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82, 0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e END
seg7table+F 0x8e
Vcc Q7 D7 D6 Q6 Q5 D5 D4 Q4 CLK
D7
D
Q CLK
Q7
CLK CLR
74LVCH273
CLR Q0 D0 D1 Q1 Q2 D2 D3 Q3 GND
H
ED7~ED0
3.3V
G
D
B C H
3.3V nCS SEG1 (对应口地址 =0x20006000)
3.3V
8段共阳数码管
ldr r0,=0x20007000 2、向位选通信口地址0x20007000输出一个位选通数据: ldr r1,=0xDF ;仅6#数码管亮 str r1,[r0]
实验说明
F
取显示码送数码管显示
ldr ldr add ldr r4,=seg7table r2,=0x00 r1,r4,r2 r1,[r1] ; r4存放显示码表起始地址 ; r2存放将要显示的值 ; r1记录当前数码管数据所在的地址 seg7table+3 0xb0 3 ; 把数码管所要显示的值加载到r1中
ED0 ED1 ED2 ED3 ED4 ED5 ED6 ED7 D0 D1 D2 D3 D4 D5 D6 D7 CLK Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 CLR
a
PA7
h
f
e
a g b c d h
处理器 数据总线
PA0
nCS SEG1
段数据选通
8D锁存器结构及工作原理
锁存器就是带三态输出的D触发器,通常以8个D触发器为一个封装。 74LVCH273就是一个典型的8D锁存器。 当MR为高电平时,CP脉冲上升沿将使得输出Qi等于其输入Di。 若CP脉冲无上升沿,则Di的变化不会影响Qi的状态,这种现象称为锁存。
ldr r0,=0x20006000 1、向段选通信号口地址0x20006000输出一个显示码: ldr r1,=0xC0 ;0的显示码 str r1,[r0]
S3C2440数据线
接数码管1 3.3V 接数码管6 3.3V nCS SEG2 (对应口地址 =0x20007000) (8D锁存器) 注:”0”电平 三极管导通 A F E
选通6个数码管位选择 显示值+1 向数码管输出显示码
此部分只能采用汇编程序
延时
实验说明
主应用汇编语言参考程序
Main LOOP L2 ldr r4,=seg7table ldr r2,=0x00 cmp r2,#0x0f bne L1 cmp r2,#0x0 beq L1 ldr r0,=0x20007000 ldr r1,=0x00 str r1,[r0] ldr r0,= 0x20006000 sub r2,r2,#1 add r1,r4,r2 ldr r1,[r1] str r1,[r0] bl Delay b L2 ; r4存储seg7table的地址 ; r2记录数码管的值 ; 比较数码管的值是否为F ; 如果不为F则跳转到L1 ; 比较数码管的值是否为0 ; 如果为数码管的值0,则跳转到L1 ; 数码管6个位选信号锁存器地址nCS SEG2 ; 把数码管全部选定 ; 把6个数码管全部选定 ; 数码管8位段数据锁存器地址nCS SEG1 ; r2减1,即完成从F到0的显示 ; r1记录当前数码管数据所在的地址 ; 把数码管所要显示的值加载到r1中 ; 显示数码管的值 ; 延时 ; 跳转到L2
1. 共阳极数码管的结构及数字显示码
位选通信号线 段数据驱动线
D7 D6 D5 D4 D3 D2 D1 D0
接处理器 数据总线
h g f e d c b a
h g f e d c b a
h g f e d c b a
a f e g b c h
d
段数据信号线
2. 8段数码管显示数字0~F的段安排
0 1 2 3 4 5 6 7 8 9 A b C d E F
显示码 (16进制)
C0 F9 A4 B0 99 92 82 F8 80 90 88 83 C6 A1 86 8E
8段共阳极数码管显示过程:
1、将8位显示码输出到数码管段数据端(经过8D锁存器)同时产生段选通信号。 2、产生某位数码管选通的位数据选通信号。
3.3V
nCS SEG2
位数据选通
数码管6 8D锁存器 74LVCH273
6位共阳数码管动态循环显示电路原理图
6个数码管的段数据和位数据分别由2个8D锁存器74LVCH273加以驱动。
段显示码数据的最低位到最高位分别对应数码管的a段到h段。
CPU首先向口地址0x20006000输出段数据(显示码),然后向口地址
0x20007000输出位数据(仅使需要显示当前段数据的数码管被选通)。
二、设计实验: 用6个八段数码管显示自己学号的最后6位数。
实验说明
八段数码管由八个发光二极管组成。 右下角一个点形的发光二级管作为小数点用。 八段数码管可分为共阴极数码管和共阳极数码管两种。 主要可用于显示0~F十六进制数。 本实验采用的数码管为共阳极数码管。
Байду номын сангаас
8段共阴极LED数码管结构及显示码的构成
八段数码管的显示方式
静态显示 动态显示 动态显示是用一组数据及控制信号实现多个数量可变的数 码管显示控制,并且不断变化送给各数码管的数据,使得 不同的数码管显示不同的字符。这种方式利用了逐位快速 轮循显示的方法。即在一个轮循显示周期中,让每位数码 管都显示一次各自的数一定时间。当轮循显示周期的数目 大于每秒50次,人眼由于视觉的惰性无法察觉变化而感觉 是静止的。本实验中采用指令延时方式,延时指令大致设 为8000条时现象较好。
实验目的
复习ADS环境下的编程,可执行文件的下载以及程序
的调试 通过实验掌握处理器利用数据总线挂带外设的方法 掌握八段数码管的显示控制方法 掌握裸机系统下采用汇编语言和C语言实现数码管显 示的编程方法
实验内容
一、验证实验:
编程实现6个数码管循同时先以正序显示0~F字符, 然后再以逆序显示F~0,并不断循环。
; 返回原程序
完成实验后,先关闭电源,再拔取
导线,将导线整理好后放入指定位 置,将凳子放入桌下,方可离开。
2440处理器
74LVCH273 ED7~ED0
数据总线
0x200070000
nCS SEG2 段数据选通 D0 D1 D2 D3 D4 D5 D6 D7 CLK Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 CLR
PA0
a f g b e a b c d e f g h
第 1位 数码管 c h
第 6位 数码管
地址总线 A31~ A0 74LVCH273 ED5~ED0 地 址 0x200060000 译 nCS SEG1 码 288H 位数据选通
D0 D1 D2 D3 D4 D5 D6 D7 CLK Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 CLR
h
a bc
de
fg h
数码管驱动电路(只画出6#数码管)及驱动程序
seg7table+2 0xa4 2 seg7table+1 0xf9 1 seg7table+0 0xc0 0
实验说明
数码管的段显示口地址、数据及程序片断
ldr r0,=0x20006000 ldr r1,=0xff str r1,[r0] ;口地址nCS SEG1=0x20006000 ; 熄灭所有数码管
数码管的位选择口地址、数据及程序片断
ldr r0,=0x20007000 ldr r1,=0x0 str r1,[r0] ; 口地址nCS SEG2=0x20007000 ;选中所有数码管,低电平有效
实验说明
取显示码送数码管显示的程序片断
ldr r4,=seg7table ldr r2,=0x? add r1,r4,r2 ldr r0,= 0x20006000 ldrb r1,[r1] str r1,[r0] ldr r0,=0x20007000 ldr r1,=0x00 str r1,[r0] ; r4=显示码表起始地址 ; r2=将要显示的值 (0~F) ; r1=将要读取的?值对应的显示码地址 ; r0=数码管段数据锁存器地址nCS SEG1 ; r1=显示值对应的显示码; ; 将显示码数据用数据线D7~D0输出到数码管 ; r0=6个数码管位选信号锁存器地址nCS SEG2 ; 使6个数码管全部都亮 ;将数码管位选择数据用数据线D7~D0输出到 ; 数码管位数据锁存器。
实验说明
本实验中所用的共阳极数码管显示数据表
字符 0 1 2 3 4 5 6 7 8 9 A b C d E F . 熄灭 H 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 G 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 0 F 1 0 0 0 1 1 1 0 1 1 1 1 1 0 1 1 0 0 0 E 1 0 1 0 0 0 1 0 1 0 1 1 1 1 1 1 0 0 0 D 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 0 0 0 0 C 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 B 1 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 0 0 0 A 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1 0 0 0 共阳极 C0H F9H A4H B0H 99H 92H 82H F8H 80H 90H 88H 83H C6H A1H 86H 8EH BFH 7FH FFH
实验说明
L1 ldr r0,=0x20007000 ldr r1,=0x00 str r1,[r0] ldr r0,= 0x20006000 add r2,r2,#1 add r1,r4,r2 ldrb r1,[r1] str r1,[r0] bl Delay b LOOP ; 数码管6个位选信号锁存器地址nCS SEG2 ; 把数码管全部选定 ; 把6个数码管全部选定 ; 数码管8位段数据锁存器地址nCS SEG1 ; r2加1,即完成从0到F的显示 ; r1记录当前数码管数据所在的地址 ; 把数码管所要显示的值加载到r1中 ; 显示数码管的值 ; 延时 ; 跳转到LOOP
;以下为数码管显示字符数据区 AREA RamData, DATA, READWRITE seg7table DCB 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e END
实验说明
;以下为延时子程序 Delay stmfd sp!,{r8,r9,lr} ldr r3,=0x8ffff; ; 延时 LOOP1 sub r3,r3,#1 cmp r3,#0 bne LOOP1 ldmfd sp!,{r8,r9,pc} LTORG ; 保护当前现场
实验程序流程框图
裸机系统基本程序运行环境设置参数及程序
复位异常程序:裸机初始化 设置静态参数 程序从0X0开始 建立异常向量表 预存存储器参数 关闭看门狗定时器
主应用程序
获取显示码表起始地址
显示值=F?
显示值=0?
选通6个数码管位选择
显示值-1 向数码管输出显示码
关闭所有中断
设置系统时钟
延时 将存储器参数写入处 理器特殊功能寄存器 区内的存储器参数区
实验说明
建立0~F显示码表:
AREA RamData, DATA, READWRITE seg7table DCB 0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82, 0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e END
seg7table+F 0x8e