最近因为对突然对电子感兴趣,前几天在路过电子商城时买了一个数码管。因为以前总是纸上谈兵,根本没实验过,连数码见都没见过,所以开始觉得将这块数码管显示出来是非常具有挑战性的工作。 今天正好有空,拿来了我的数码管,并在网上看了一些资料,才发现并不是想象中的那么难,其实更准确的说是太简单了。不到半天就将完成了程序的编写。下面是这次编程的总结。 先来了解一下数码管的构造,数码管分共阳极和共阴极两种。所谓共阳极就是所有二极管的阳极是连在一起的,而阴极则不连;共阴极数码管正好相反:它的所有阴极相连。这两种数码管的原理图如下:
下面是个数码管的实物图,共阳极数的和共阴极的外表一样:

在背面上下两排各有五个脚,每排中间脚为共阳/阴脚。每个脚对应的二极管如下图:

因为我买的数码管是共阴极的,所有下面我以共阴极数码管来说说如何显示。我使用了并行端口的数据寄存器来控制各二极管。并行端口是一个25针端口(如下图) 。

它的第2~9针对应着数据寄存器的0~7位,数据寄存器的地址为:0X378。并口的针18~25为接地信号。所以我将并口与我的数码管按下表连接起来:
18(接地) 共极 18(接地) 共极 基于这样的连接,我写了一个循环100次显示0~9的程序,该程序在MASM6.11下编译,在DOS下运行成功,源代码如下: .386P STACK SEGMENT USE16 DB 256 DUP (0) STACKLEN = $ STACK ENDS CODE SEGMENT USE16 ASSUME SS:STACK, CS:CODE
START: MOV AX, STACK MOV SS, AX MOV SP, STACKLEN MOV BX, 100
NEXT: MOV DX, 378H MOV AL, 01111110B ;0 OUT DX, AL CALL MYWAIT MOV DX, 378H MOV AL, 11001000B ;1 OUT DX, AL CALL MYWAIT MOV DX, 378H MOV AL, 00111101B ;2 OUT DX, AL CALL MYWAIT MOV DX, 378H MOV AL, 11101101B ;3 OUT DX, AL CALL MYWAIT MOV DX, 378H MOV AL, 01001011B ;4 OUT DX, AL CALL MYWAIT MOV DX, 378H MOV AL, 11100111B ;5 OUT DX, AL CALL MYWAIT MOV DX, 378H MOV AL, 01110111B ;6 OUT DX, AL CALL MYWAIT MOV DX, 378H MOV AL, 11001100B ;7 OUT DX, AL CALL MYWAIT MOV DX, 378H MOV AL, 01111111B ;8 OUT DX, AL CALL MYWAIT MOV DX, 378H MOV AL, 01101111B ;9 OUT DX, AL CALL MYWAIT DEC BX JNZ NEXT MOV AH, 4CH INT 21H
MYWAIT PROC NEAR PUSH AX PUSH CX MOV AX, 1FFH
NEXTWAIT: MOV CX, 0FFFFH LOOP $ DEC AX JNZ NEXTWAIT POP CX POP AX RET
MYWAIT ENDP CODE ENDS END START
|