65.9K
CodeProject 正在变化。 阅读更多。
Home

通过并行端口和 x86 汇编控制 7 段显示器的多路复用

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (5投票s)

2012年8月15日

GPL3

7分钟阅读

viewsIcon

92212

通过并行端口和 x86 汇编实现 6 个 7 段显示器的时分复用控制。

引言

本文介绍如何通过并行端口和 x86 汇编实时控制 7 段显示器。项目包含 SN74LS57N 解码/驱动器、74HC238 分频器/驱动器和 6 个七段显示器。我将演示如何使用单个解码器/驱动器在 6 个七段显示器之间进行复用。

http://youtu.be/kwiHF2zoIpI

所需材料

  • SN74LS47N BCD 转 7 段显示解码器(用于共阳极显示器)。
  • 74HC238 3 线转 8 线译码器
  • 6 x 共阳极 7 段显示器
  • 面包板
  • 约 5 米电缆

1.什么是复用和分频?

复用是指一个源被许多用户共享使用。复用信号通过通信信道传输,该信道可以是物理传输介质。复用将高级通信信道的容量划分为多个低级逻辑信道,每个逻辑信道对应一个要传输的消息信号或数据流。一个称为分频的逆向过程可以在接收端提取原始信道。执行复用功能的设备称为复用器 (MUX),执行逆向过程的设备称为分频器 (DEMUX)。逆复用 (IMUX) 与复用的目的相反,即是将一个数据流分解成多个数据流,通过多个通信信道同时传输,然后重新组合成原始数据流。有四种类型的复用:分时复用 (SDM)、频分复用 (FDM)、时分复用 (TDM) 和码分复用 (CDM)。

1.1 什么是时分复用?

时分复用 (TDM) 是一种数字(或极少情况下的模拟)复用方式,其中两个或多个比特流或信号作为子信道在单个通信信道中看似同时传输,但实际上是在信道上轮流进行传输。

1.2本项目中的时分复用

简单来说,TDM 就是每个部分在相等的时间内共享资源。



图 1



图 2

每条线应该被非常快速地选中。如果每组的持续时间是 1 秒而不是 1/1000 秒(1 千赫兹),系统将显示如图 3 所示。



图 3

人脑无法察觉这种快速切换操作。这种方法有几个优点。最重要的优点是只使用一个源。在这个项目中,我将 SN74LS47N 解码器共享给并联连接的 6 个七段显示器。

2. 七段显示器

7 段显示器是一种二进制到十进制的转换器。有两种类型的显示器:共阳极和共阴极。

共阳极和共阴极 7 段显示器的主要区别。

7 段显示器的真值表

3. SN74LS47N BCD 转七段解码器/驱动器

SN74LS47N 解码器/驱动器用于共阳极显示器。它有 4 位 BCD 输入和 7 个显示输出。SN74LS47 是低功耗肖特基 BCD 转 7 段解码器/驱动器,由 NAND 门、输入缓冲器和七个 AND-OR-INVERT 门组成。它们提供低电平有效、高吸电流输出,可直接驱动指示灯。七个 NAND 门和一个驱动器成对连接,为七个解码 AND-OR-INVERT 门提供 BCD 数据及其补码。剩余的 NAND 门和三个输入缓冲器提供灯测试、空白输入/闪烁空白输出和闪烁输入。该电路接受 4 位二进制编码的十进制 (BCD) 数,并根据辅助输入的电平,将其解码以驱动 7 段显示指示灯。辅助输入所需的相对正逻辑输出电平和条件如真值表所示。SN74LS47 的输出配置设计用于承受 7 段指示灯所需的相对较高的电压。这些输出可承受 15 V 电压,最大反向电流为 250 mA。需要高达 24 mA 电流的指示段可以直接从 SN74LS47 的高性能输出晶体管驱动。BCD 输入计数大于九的显示模式是独特的符号,用于验证输入条件。


SN74LS47N 的引脚图

SN74LS47N 的引脚说明


SN74LS47N 的真值表

4. 74HC238 3 线转 8 线译码器/分频器

74HC/HCT238 是高速 Si-门 CMOS 器件,与低功耗肖特基 TTL (LSTTL) 引脚兼容。它们符合 JEDEC 标准 no. 7A。74HC/HCT238 译码器接受三个加权地址输入 (A0, A1, A2),在启用时提供 8 个互斥的有效高输出 (Y0 至 Y7)。“238”具有三个启用输入:两个低电平有效 (E1 和 E2) 和一个高电平有效 (E3)。除非 E1 和 E2 为低电平且 E3 为高电平,否则所有输出都将为低电平。这种多重启用功能允许仅使用四个“238”IC 和一个反相器,轻松地将“238”并行扩展到一个 1-of-32(5 线到 32 线)译码器。“238”可以用作八输出分频器,使用一个低电平有效的启用输入作为数据输入,其余启用输入作为选通信号。未使用的启用输入必须永久连接到其适当的高电平有效或低电平有效状态。“238”与“138”相同,但具有非反相输出。

74HC238 的引脚图


74HC238 的引脚说明


74HC238 的真值表

5. 并行端口 (LPT 端口)

并行端口是个人计算机接口,通常一次传输一个字节的数据。并行端口符合电气和电子工程师协会 (IEEE) 的文档规范,称为 IEEE Std 1284-1994:个人计算机双向并行外设接口的标准信令方法,简称 IEEE 1284。基本上,IEEE-1284 收集和统一了当时已在使用的并行传输标准。它描述了一种外设(通常是打印机)与主机(通常是 PC)之间异步、全互锁的双向通信系统。

IEEE 1284 并行端口模式称为

兼容模式,
Nibble 模式,
Byte 模式,
增强模式,
增强并行端口 (EPP),
扩展能力端口 (ECP)


并行端口的引脚图


并行端口的引脚说明


标准并行端口地址

IEEE 1284 Level II

数据输出(>2.4V)14 mA

数据线吸入(<0.4V)14 mA

控制输出(>2.4 V)?

信号线(短路)?

控制线吸入(<0.4V)14 mA

6. 电路设计

项目设计的基本部分是电路。我决定只使用 LPT 端口的 8 个数据寄存器。

所有七段显示器彼此并联连接。并行端口的第一个 4 位(引脚 2 至 5)保留给 SN74LS47N 的数据输入。这意味着这里确定显示的数字。接下来的 3 位(引脚 6 至 8)保留给 74HC238 的切换输入。最后一个位(引脚 9)用于系统的 Vcc 输入。

十进制 128-255

D7 Vcc

D6,D5,D4 74238 BCD

D3,D2,D1,D0 7447 BCD

选定的显示器

显示的数字

129

1

000

0001

1

1

144

1

001

0000

2

0

160

1

010

0000

3

0

176

1

011

0000

4

0

192

1

100

0000

5

0

208

1

101

0000

6

0

130

1

000

0010

1

2

144

1

001

0000

2

0

160

1

010

0000

3

0

176

1

011

0000

4

0

192

1

100

0000

5

0

208

1

101

0000

6

0

系统真值表的一部分

SEG1 SEG2 SEG3 SEG4 SEG5 SEG6
128 0 144 0 160 0 176 0 192 0 208 0
129 1 145 1 161 1 177 1 193 1 209 1
130 2 146 2 162 2 178 2 194 2 210 2
131 3 147 3 163 3 179 3 195 3 211 3
132 4 148 4 164 4 180 4 196 4 212 4
133 5 149 5 165 5 181 5 197 5 213 5
134 6 150 6 166 6 182 6 198 6 214 6
135 7 151 7 167 7 183 7 199 7 215 7
136 8 152 8 168 8 184 8 200 8 216 8
137 9 153 9 169 9 185 9 201 9 217 9
+7 不关心

7. 如何用 x86 汇编编程?

mov cx,0ffffh 
loop1:
mov dx,03bch
MOV al,10000000b
out dx,al
dec cx
jnz loop1

此代码块将(128d)10000000b 的高低逻辑电压分别发送到 d7,d6,d5,d4,d3,d2,d1,d0 引脚,并在大约 1 秒的时间内循环显示数字。在 800MHz 处理器上,Windows XP 操作系统具有高优先级。具体时间无法精确计算,因为不同系统的刷新率和流速在不同机器上永远无法稳定。现代实时操作系统会与许多线程共享资源。如果在这个项目中使用微控制器,就可以精确计算。

MOV bl,127d

mov cx,10d ; loop1 count last digit 0 to 9
next:
push cx

INC bl


mov cx,5d ; loop2 scan 5 times
duration:
push cx ; LIFO


mov cx,0500h ; loop3 duration of digit
loop1:
mov dx,03bch
MOV al,bl
out dx,al
dec cx
jnz loop1

mov cx,0500h
loop2:
mov dx,03bch
MOV al,144d
out dx,al
dec cx
jnz loop2

mov cx,0500h
loop3:
mov dx,03bch
MOV al,160d
out dx,al
dec cx
jnz loop3

mov cx,0500h
loop4:
mov dx,03bch
MOV al,176d
out dx,al
dec cx
jnz loop4

mov cx,0500h
loop5:
mov dx,03bch
MOV al,192d
out dx,al
dec cx
jnz loop5

mov cx,0500h
loop6:
mov dx,03bch
MOV al,208d
out dx,al
dec cx
jnz loop6


pop cx ; loop2
loop duration

pop cx ; loop3
loop next

8. 参考文献

  1. SN74LS47N 半导体数据手册
  2. 74HC238 飞利浦数据手册
  3. IEEE 1284 STD

9. 联系方式

http://blog.armanasci.com

© . All rights reserved.