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