当前位置: 首页 > news >正文

实验五 8255和LED数码管显示实验

一、实验目的               

1.掌握并行接口8255A的工作原理及使用方法。

2.了解七段数码管显示数字的原理。

3.掌握多位数码显示的接口技术。

二、实验电路

三、实验内容

1.静态显示:按图3连接好电路,将8255A的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V(选中),S0、S2、S3、dp接地(关闭)。编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。

2.动态显示:按图4连接好电路,七段数码管段码连接不变,位码驱动输入端S1、S0接8255C口的PC1、PC0,S2、S3接地(关闭)。编程在两个数码管上显示56。

四、编程提示

1.实验台上的七段数码管为共阴极,码段采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。

五、实验程序(必须加注释)和结果

实验程序1

;************************************************

;* 键盘输入数据(0-9)控制LED数码管显示(静态显示) *

;************************************************

DATA    SEGMENT

IO8255A  EQU 288H       ; 8255A端口A的地址

IO8255K  EQU 28BH       ; 8255A控制端口的地址

LED      DB  3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ; 数码管显示的段码表

MESG1    DB  0DH,0AH,'INPUT A NUM (0--9),OTHER KEY IS EXIT:',0DH,0AH,'$' ; 提示信息

mess2    DB 'Kruanjian221  guozhihong 2022900624 AND mingruizhao2022900625',0DH,0AH,'$' ; 另一个提示信息

DATA    ENDS

CODE    SEGMENT

        ASSUME CS:CODE,DS:DATA

START:  MOV AX,DATA

        MOV DS,AX

        MOV DX,IO8255K           ; 初始化8255A,设置端口A为输出方式

        MOV AX,80H

        OUT DX,AL

        MOV ah,9

        MOV dx,offset mess2                                         

        int 21h

SSS:     MOV DX,OFFSET MESG1     ; 显示提示信息

        MOV AH,09H

        INT 21H

        MOV AH,01                ; 从键盘接收字符

        INT 21H

        CMP AL,'0'               ; 检查输入是否小于0

        JL  EXIT                 ; 若是则退出

        CMP AL,'9'               ; 检查输入是否大于9

        JG  EXIT                 ; 若是则退出

        SUB AL,30H               ; 将所得字符的ASCII码减30H,得到对应的数值

        MOV BX,OFFSET LED        ; BX指向数码管显示的段码表

        XLAT                     ; 根据数值查找对应的段码

        MOV DX,IO8255A           ; 将段码输出到8255A的端口A

        OUT DX,AL

        JMP SSS                  ; 循环,继续接收键盘输入

EXIT:    MOV AH,4CH               ; 返回操作系统

        INT 21H

CODE    ENDS

        END START

设计思路:

  1. 初始化
    • 首先初始化数据段,设置8255A芯片,将端口A设为输出方式,并显示特定提示信息(mess2)。
  2. 输入获取与判断
    • 显示输入提示信息(MESG1)后,从键盘接收字符。判断输入字符是否在0 - 9之间,若不在此范围则退出程序。
  3. 数码管显示
    • 若输入在0 - 9之间,将输入字符的ASCII码转换为对应数值,通过查表(LED段码表)得到数码管显示的段码,输出到8255A的端口A以在数码管上显示相应数字,然后循环继续获取输入。
  4. 结束程序
    • 若输入不符合要求则执行EXIT,返回操作系统 

      实验程序2

      DATA   SEGMENT

          LED     DB  3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ; 定义一个字节型数据LED,存放数码管显示0 - 9的段码值

      mess2 DB 'Kruanjian221  guozhihong 2022900624 AND mingruizhao2022900625',0DH,0AH,'$'

      DATA  ENDS

      CODE   SEGMENT

          ASSUME  CS:CODE,DS:DATA

      START: 

          MOV AX,DATA    ; 将数据段DATA的段地址赋给AX寄存器

          MOV DS,AX      ; 将AX中的段地址值赋给数据段寄存器DS,完成数据段的初始化

          MOV ah,9

          MOV dx,offset mess2                                         

          int 21h

          MOV DX,293H    ; 写控制字使8255的A口、C口为输出方式,28BH为8255控制端口地址

          MOV AL,80h     ; 控制字80H,表示设置8255的工作方式等,这里设置A口、C口为输出

          OUT DX,AL      ; 将控制字通过DX指定的端口(28BH)输出,配置8255

      LOOP1: 

          MOV AL,00H     ; 先向8255的C口送数据00H,可能是用于准备进行后续操作(如清一些控制位等,具体取决于硬件连接情况)

          MOV DX,292H    ; 28AH为8255的C口地址

          OUT DX,AL      ; 将00H输出到8255的C口

          MOV AL,5       ; 准备显示数字5对应的段码,这里将数字5作为索引

          MOV BX,OFFSET LED  ; 将LED表的偏移地址赋给BX寄存器,为查表做准备

          XLAT           ; 通过查表指令XLAT,根据AL中的索引(这里是5)从LED表中查出对应的段码送给AL

          MOV DX,290H    ; 288H为8255的A口地址,A口用于输出数码管段码

          OUT DX,AL      ; 将查找到的数字5对应的段码输出到8255的A口,以驱动数码管显示数字5

          MOV AL,02H     ; 向8255的C口送数据02H,可能用于控制数码管的其他功能,比如位选等(具体看硬件连接)

          MOV DX,292H

          OUT DX,AL

          MOV CX,100    ; 设置循环次数为1000,用于延时,以让数码管显示数字5能保持一段时间,让人眼能看清

      DELAY: 

          LOOP DELAY     ; 循环执行,实现延时功能,每次循环CX减1,直到CX为0

          MOV AL,00H     ; 再次向8255的C口送数据00H,进行新一轮操作前的准备

          MOV DX,292H

          OUT DX,AL

          MOV AL,6       ; 准备显示数字6对应的段码,这里将数字6作为索引

          MOV BX,OFFSET LED  ; 重新指向LED表偏移地址,为查数字6的段码做准备

          XLAT           ; 查表获取数字6对应的段码到AL寄存器

          MOV DX,290H

          OUT DX,AL      ; 将数字6的段码输出到8255的A口,驱动数码管显示数字6

          MOV AL,01H     ; 向8255的C口送数据01H,同样可能用于控制数码管的其他相关功能,比如位选等

          MOV DX,292H

          OUT DX,AL

          MOV CX,100 ; 设置循环次数为1000,用于延时,让数码管显示数字6能保持一段时间

      DELAY1: 

          LOOP DELAY1    ; 循环实现延时,直到CX减为0

          MOV AH,1       ; 调用BIOS中断16H的功能1,用于检测键盘是否有按键按下,若有按键按下则AL存放按键的ASCII码

          INT 16H

          JNZ EXIT       ; 如果有按键按下(ZF标志位不为0),则跳转到EXIT标号处执行,结束程序显示

          JMP LOOP1      ; 如果没有按键按下,则跳回LOOP1继续循环,实现不断切换显示数字5和6的功能

      EXIT: 

          MOV AL,0H      ; 将0H送到AL寄存器,准备关闭数码管显示(通过向A口输出0来实现,具体看硬件逻辑)

          MOV DX,290H    ; 指向8255的A口

          OUT DX,AL      ; 输出0到8255的A口,关闭数码管显示

          MOV AH,4CH     ; 返回操作系统的功能号,准备结束程序

          INT 21H        ; 调用DOS中断21H,实现返回操作系统的功能

      CODE  ENDS

      END START

      设计思路:

    • 初始化数据段和代码段
      • 首先,定义了数据段(DATA)和代码段(CODE),并初始化了数据段寄存器(DS)。
    • 配置8255芯片
      • 通过向8255的控制端口(28BH)写入控制字(80H),将8255的A口和C口设置为输出模式。
    • 显示数字5和6
      • 在主循环(LOOP1)中,首先向8255的C口写入数据(00H),然后通过查表指令(XLAT)从LED表中获取数字5的段码,并将其输出到8255的A口,以显示数字5。
      • 接着,向8255的C口写入数据(02H),可能是用于控制数码管的其他功能,比如位选等。
      • 通过一个延时循环(DELAY),使数字5在数码管上保持显示一段时间。
      • 然后,重复上述步骤,显示数字6。
    • 检测键盘输入
      • 在每次显示数字后,通过调用BIOS中断16H的功能1来检测键盘是否有按键按下。
      • 如果有按键按下,则跳转到EXIT标号处,结束程序。
      • 如果没有按键按下,则跳回LOOP1,继续循环显示数字5和6。
    • 结束程序
      • 在EXIT标号处,将0H输出到8255的A口,关闭数码管显示。
      • 最后,通过调用DOS中断21H的功能4CH,返回操作系统。

相关文章:

  • AOSP的Doze模式-DeepIdle 初识
  • 从彩色打印单行标准九九表学习〖代码情书〗的书写范式(Python/DeepSeek)
  • 定制化 Docsify 文档框架实战分享
  • async-profiler火焰图找出耗CPU方法
  • # 04_Elastic Stack 从入门到实践(四)--2
  • Docker 设置镜像源后仍无法拉取镜像问题排查
  • postman莫名奇妙报错,可能是注释引起的。postman 过滤请求体中的注释。
  • Oracle 19c部署之数据库软件安装(二)
  • 细说STM32单片机FreeRTOS任务管理API函数及多任务编程的实现方法
  • 深入了解v-model的原理:v-model拆分为value属性和input事件,表单类组件的封装并用v-model简化代码
  • 【python画图】:从入门到精通绘制完美柱状图
  • 【Qt】初识Qt(一)
  • 4.15【Q】netsafe
  • 量化交易 - 布林带(Bollinger Bands)策略研究 - 源码
  • 智能制造中如何进行智能工厂三年规划设计?【附全文阅读】
  • 双指针算法(二)
  • 【系统搭建】DPDK实现两虚拟机基于testpmd和l2fwd的收发包
  • C++之类模板
  • 基于AI大语言模型的历史文献分析在气候与灾害重建领域中的技术应用
  • 对抗生成进化:基于DNA算法的AIGC检测绕过——让AI创作真正“隐形“
  • 俄罗斯纪念卫国战争胜利80周年阅兵式首次彩排在莫斯科举行
  • 深圳宝安区一宗涉宅用地中止出让,起始总价86.27亿元
  • 文化润疆|让新疆青少年成为“小小博物家”
  • 上海灵活就业人员公积金新政有哪些“创新点”?
  • 美乌总统梵蒂冈会谈,外交部:望有关各方继续通过对话谈判解决危机
  • 国家发改委答澎湃:力争6月底前下达2025年两重建设和中央预算内投资全部项目清单