8255A控制八位七段LED数码管

微机实验六

文章目录

  • 微机实验六
  • 前言
  • 八位七段LED数码管
    • 驱动方式
      • 静态显示
      • 动态显示
    • 实验所用七段数码管
      • 相关参数
      • 字形代码表
      • 实验连线步骤:
    • 汇编程序(.ASM)
      • 程序初始化
      • 数据段定义
      • 代码段定义
    • 实验流程图:
  • 总结


前言

本博客仅做学习笔记,如有侵权,联系后即刻更改

科普:八位七段数码管
8255A控制八位七段LED数码管_第1张图片


八位七段LED数码管

驱动方式

LED数码管要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字
动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

静态显示

静态驱动也称直流驱动。

静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。

静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多

如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

动态显示

LED数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一

动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,
另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,单片机对位选通COM端电路的控制,
所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,

实验所用七段数码管

相关参数

七段数码管为共阴型

段码采用同相驱动

输入端加高电平,选中的数码管亮

位码加反相驱动器,位码输入端高电平选中。

字形代码表

8255A控制八位七段LED数码管_第2张图片

实验连线步骤:

(1): 关闭实验箱电源,按照下面原理图连线;
(2): 将8255的A0,A1,RST 接至 扩展总线区A0,A1,RESET;
(3): 将8255的/RD,/WR 接至 扩展总线区/IOR,/IOW;
(4): 将8255的/CS 接至 I/O地址区/220H—22FH;
(5): 将8255的PA7~PA0 接至 七段数码管显示区DP~A;
(6): 将8255的PB7~PB0 接至 七段数码管显示区S7~S0;
8255A控制八位七段LED数码管_第3张图片

汇编程序(.ASM)

程序初始化

;使用8255连接7段数码管显示器  8255A口连接段码,h-a插孔连接PA7-PA0;B口连接位码,s7-s0插孔连接PB7-PB0。 
.model small
.486

数据段定义

DATA SEGMENT           
io_address EQU 220H 
LEDCODE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
BUF  DW ? 
DATA ENDS 

代码段定义

code segment    
     assume cs:code,ds:DATA 
     start: cli    ;全称为Clear Interupt,该指令的作用是禁止中断发生
           mov ax, data 
          mov ds,ax

设 置 8255工作方式 0

  mov al, 80h
   mov dx, 223h
   out dx, al        

设置显示缓冲区首址

TTT:  mov ch,10
          lea si, LEDCODE    ;lea指令获取偏移地址 

设置显示初始位置

 tt1:   mov bl,[si]
         and bl, 7fh
         MOV cl,01H      

调用显示子程序

 lll:   CALL DISP      ;call是调用子程序指令。

       ;显示到最左边吗?
       jnc lll       ;jnc指令用于对进位位进行判断从而决定程序走向
       ;JNZ  LLL    ;条件转移指令,结果不为零(或不相等)则转移。

       ;指针增 1
        inc si

       ;全部显示完毕吗?
       dec ch   ;DEC是减1指令
       jnz  tt1    ;条件转移指令,结果不为零(或不相等)则转移。
       JMP   TTT   ;jmp为无条件转移,可以只修改IP,也可以同时修改CS和IP

proc是定义子程序的伪指令,位置在子程序的开始处,它和endp分别表示子程序定义的开始和结束两者必须成对出现。

DISP PROC

     push dx   
     push ax    
    mov al,bl
lp1:     mov dx,IO_ADDRESS     
     out dx,al     
     mov al,cl
E:   mov dx,IO_ADDRESS
       inc dx       
       out dx,al     ;将AL的值写入dx端口
       call delay
       sal cl,1      ;SAL(算术左移)和SAR(算术右移)
       pop ax        
       POP DX
        RET     ;ret指令的内部操作是:栈顶字单元出栈,其值赋给IP寄存器。即实现了一个程序的转移,将栈顶字单元保存的偏移地址作为下一条指令的偏移地址。
  DISP ENDP


DELAY   PROC
     PUSH CX
     PUSH DX
kk2: MOV  DX,50
kk1: MOV CX,800H
 
   kk: LOOP  KK
     dec dx
     jnz kk1     ;;条件转移指令,结果不为零(或不相等)则转移。
     pop dx
     POP CX
     RET
DELAY   ENDP


CODE ends
end start

实验流程图:

8255A控制八位七段LED数码管_第4张图片

总结

小小励志

有些事你现在不做,一辈子都不会做了。
如果你想做一件事,全世界都会为你让路。
《搭车去柏林》

你可能感兴趣的:(微型计算机技术和应用,单片机,嵌入式硬件)