<微机原理>[汇编语言]-[实验七]数码管动态显示实验

这篇具有很好参考价值的文章主要介绍了<微机原理>[汇编语言]-[实验七]数码管动态显示实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

实验一 软件开发环境和简单程序设计
实验二 I_O输入输出实验
实验三 键盘扫描显示实验
实验四 中断实验
实验五 定时器实验
实验六 串行口实验
实验七 数码管动态显示实验
实验八 矩阵键盘应用实验
实验九 电子时钟



前言

微机原理实验课程,会陆续根据目录更新文章

一、实验目的

掌握LED八段码显示器的动态显示工作原理

二、实验仪器

  1. Keil5
  2. 普中A2开发板
  3. stc-isp

三、实验内容

单片机控制8只数码管,同时显示8个字符。例如,从左至右显示“12345678”,接着显示“23456781”,…“81234567”,“12345678”。

四、流程框图

通过找到数码管数据之间的关系实现(难,不容易理解)

<微机原理>[汇编语言]-[实验七]数码管动态显示实验

通过查表法实现(简单、容易理解)

<微机原理>[汇编语言]-[实验七]数码管动态显示实验

五、实验程序

逻辑法

    ORG     0000H
    LJMP    START
    ORG     0003H
    LJMP    EX0_ISR             ;外部中断0程序入口
    ORG     000BH
    LJMP    TM0_ISR             ;定时器0中断程序入口
    ORG     0030H
START:                          ;系统初始化
    ACALL   EX0_INIT            ;外部中断0初始化
    ACALL   TM0_INIT            ;定时器0初始化
    MOV     DPTR,   #TAB1       ;指向字形码表首地址
    MOV     R1  ,   #01H        ;因为显示的是1-8,所以初始化为1,如果显示是0-7,则初始化为0
    SETB    EA                  ;开启总中断
MAIN:
    ACALL   DTSEG               ;数码管显示
    AJMP    MAIN                ;主函数循环
EX0_INIT:
    SETB    EX0                 ;允许外部中断0中断
    SETB    IT0                 ;设置外部中断0下降沿触发
    RET
TM0_INIT:
    ANL     TMOD,   #0F0H       ;初始化定时器0
    ORL     TMOD,   #01H        ;设置定时器0工作方式1
    MOV     TL0 ,   #00H        ;设置定时器初值 50ms
    MOV     TH0 ,   #4CH        ;设置定时器初值
    CLR     TF0                 ;清除TF0标志
    SETB    TR0                 ;定时器0开始计时
    SETB    ET0                 ;开启T0溢出中断
    RET
DTSEG:                          ;动态数码管显示
    MOV     A   ,   R1          ;R1存储的是第1位数码管显示的值(从右到左数第一位)
    ADD     A   ,   #8          ;
    MOV     R0  ,   A           ;
ONE:                            ;第一个数码管显示
    CLR     P2.2                ;选择第一位数码管显示
    CLR     P2.3                
    CLR     P2.4                
    DEC     R0                  ;R0减一 
    MOV     A   ,   R0          
    SUBB    A   ,   #8          ;R0 - 8
    JZ      JW1                 ;判断R0是否为8,是则直接显示R0的值
    JNC     JNW1                ;判断R0是否小于8,小于8则直接显示R0的值
                                ;大于8则显示R0-8的值
JW1:MOV     A   ,   R0          ;
JNW1:
    MOVC    A   ,   @A+DPTR
    MOV     P0  ,   A
    ACALL   DELAY100US          ;单个数码管显示时间,时间太短,人眼无法看清;但也不能太长,因为要受限于临界闪烁频率。
    MOV     P0  ,   #00H        ;熄灭数码管,消影,防止下一个数码管显示上一个数码管显示的残影
TWO:
    SETB    P2.2
    CLR     P2.3
    CLR     P2.4
    DEC     R0                  ;R0减一 
    MOV     A   ,   R0          
    SUBB    A   ,   #8          ;判断R0是否大于8
    JZ      JW2                 ;
    JNC     JNW2
JW2:MOV     A   ,   R0          ;
JNW2:
    MOVC    A   ,   @A+DPTR
    MOV     P0  ,   A
    ACALL   DELAY100US
    MOV     P0  ,   #00H        ;
THREE:
    CLR     P2.2
    SETB    P2.3
    CLR     P2.4
    DEC     R0                  ;R0减一 
    MOV     A   ,   R0          
    SUBB    A   ,   #8          ;判断R0是否大于8
    JZ      JW3                 ;
    JNC     JNW3
JW3:MOV     A   ,   R0          ;
JNW3:
    MOVC    A   ,   @A+DPTR
    MOV     P0  ,   A
    ACALL   DELAY100US
    MOV     P0  ,   #00H        ;
FOUR:
    SETB    P2.2
    SETB    P2.3
    CLR     P2.4
    DEC     R0                  ;R0减一 
    MOV     A   ,   R0          
    SUBB    A   ,   #8          ;判断R0是否大于8
    JZ      JW4                 ;
    JNC     JNW4
JW4:MOV     A   ,   R0          ;
JNW4:
    MOVC    A   ,   @A+DPTR
    MOV     P0  ,   A
    ACALL   DELAY100US
    MOV     P0  ,   #00H        ;
FIVE:
    CLR     P2.2
    CLR     P2.3
    SETB     P2.4
    DEC     R0                  ;R0减一 
    MOV     A   ,   R0          
    SUBB    A   ,   #8          ;判断R0是否大于8
    JZ      JW5                 ;
    JNC     JNW5
JW5:MOV     A   ,   R0          ;
JNW5:
    MOVC    A   ,   @A+DPTR
    MOV     P0  ,   A
    ACALL   DELAY100US
    MOV     P0  ,   #00H        ;
SIX:
    SETB    P2.2
    CLR     P2.3
    SETB    P2.4
    DEC     R0                  ;R0减一 
    MOV     A   ,   R0          
    SUBB    A   ,   #8          ;判断R0是否大于8
    JZ      JW6                 ;
    JNC     JNW6
JW6:MOV     A   ,   R0          ;
JNW6:
    MOVC    A   ,   @A+DPTR
    MOV     P0  ,   A
    ACALL   DELAY100US
    MOV     P0  ,   #00H        ;
SEVEN:
    CLR     P2.2
    SETB    P2.3
    SETB    P2.4
    DEC     R0                  ;R0减一 
    MOV     A   ,   R0          
    SUBB    A   ,   #8          ;判断R0是否大于8
    JZ      JW7                 ;
    JNC     JNW7
JW7:MOV     A   ,   R0          ;
JNW7:
    MOVC    A   ,   @A+DPTR
    MOV     P0  ,   A
    ACALL   DELAY100US
    MOV     P0  ,   #00H        ;
EIGHT:
    SETB    P2.2
    SETB    P2.3
    SETB    P2.4
    DEC     R0                  ;R0减一 
    MOV     A   ,   R0          
    SUBB    A   ,   #8          ;判断R0是否大于8
    JZ      JW8                 ;
    JNC     JNW8
JW8:MOV     A   ,   R0          ;
JNW8:
    MOVC    A   ,   @A+DPTR
    MOV     P0  ,   A
    ACALL   DELAY100US
    MOV     P0  ,   #00H        ;
    RET
EX0_ISR:
    ACALL   DELAY50MS           ;延时50ms消抖
    SETB    P3.2                ;P3,2置1,准备读取端口的值
    MOV     C   ,   P3.2        ;读取P3.2口的值
    JC      RETURN              ;如果P3,2为1,则说明按键没有按下,退出中断
    INC     R1                  ;进入中断一次,数码管显示的值+1
    CJNE    R1  ,   #9, RETURN  ;如果R1的值为9,则置1
    MOV     R1  ,   #01H        
    RETI
TM0_ISR:
    MOV     TL0 ,   #00H        ;重装定时器初值 50ms
    MOV     TH0 ,   #4CH        ;重装定时器初值                                                            
    INC     R2                  ;R2加1
    CJNE    R2  ,   #20 ,RETURN ;判断是否到达1s
    MOV     R2  ,   #00H        ;R2清0
    INC     R1                  ;显示值加1
    CJNE    R1  ,   #9, RETURN  ;如果R1的值为9,则置1
    MOV     R1  ,   #01H        
    RETI                                               
RETURN:
    RETI
DELAY50MS:			;@11.0592MHz
	PUSH 30H
	PUSH 31H
	MOV 30H,#90
	MOV 31H,#158
NEXT50MS:
	DJNZ 31H,NEXT50MS
	DJNZ 30H,NEXT50MS
	POP 31H
	POP 30H
	RET
DELAY100US:			;@11.0592MHz
	PUSH 30H
	MOV 30H,#41
NEXT100US:
	DJNZ 30H,NEXT100US
	POP 30H
	RET
TAB1:
    DB      03FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH; 0 - 9共阳极字形码
    END

查表法

    ORG     0000H
    LJMP    START
    ORG     000BH
    LJMP    TM0_ISR             ;定时器0中断程序入口
    ORG     0030H
START:
    ACALL   TM0_INIT
    MOV     DPTR,   #TAB1
    MOV     R1  ,   #01H        ;用于选择显示的表
    SETB    EA
MAIN:
    ACALL   XZTAB               ;选择显示的字形码表
    ACALL   DTSEG               ;动态数码管显示
    AJMP    MAIN
TM0_INIT:
    ANL     TMOD,   #0F0H       ;初始化定时器0
    ORL     TMOD,   #01H        ;设置定时器0工作方式1
    MOV     TL0 ,   #00H        ;设置定时器初值 50ms
    MOV     TH0 ,   #4CH        ;设置定时器初值
    CLR     TF0                 ;清除TF0标志
    SETB    TR0                 ;定时器0开始计时
    SETB    ET0                 ;开启T0溢出中断
    RET
XZTAB:
    XZTAB1:
        CJNE    R1  ,   #1  ,   XZTAB2  ;根据R1的值选择字形码表
        MOV     DPTR,   #TAB1          
        RET
    XZTAB2:
        CJNE    R1  ,   #2  ,   XZTAB3
        MOV     DPTR,   #TAB2
        RET
    XZTAB3:
        CJNE    R1  ,   #3  ,   XZTAB4
        MOV     DPTR,   #TAB3
        RET
    XZTAB4:
        CJNE    R1  ,   #4  ,   XZTAB5
        MOV     DPTR,   #TAB4
        RET
    XZTAB5:
        CJNE    R1  ,   #5  ,   XZTAB6
        MOV     DPTR,   #TAB5
        RET
    XZTAB6:
        CJNE    R1  ,   #6  ,   XZTAB7
        MOV     DPTR,   #TAB6
        RET
    XZTAB7:
        CJNE    R1  ,   #7  ,   XZTAB8
        MOV     DPTR,   #TAB7
        RET
    XZTAB8:
        CJNE    R1  ,   #8  ,   XZTAB_RET
        MOV     DPTR,   #TAB8
    XZTAB_RET:
        RET
DTSEG:
    MOV     R2  ,   #0          ;R2清0
EIGHT:
    ANL     P2  ,   #0E3H       ;P2.2 P2.3 P2.4置0
    ORL     P2  ,   #1CH        ;选择第8位数码管显示
    MOV     A   ,   R2 
    MOVC    A   ,   @A+DPTR
    MOV     P0  ,   A           ;字形码输出到数码管
    LCALL   DELAY100US
    MOV     P0  ,   #00H        ;消影
SEVEN:
    INC     R2
    ANL     P2  ,   #0E3H
    ORL     P2  ,   #18H
    MOV     A   ,   R2
    MOVC    A   ,   @A+DPTR
    MOV     P0  ,   A
    LCALL   DELAY100US
    MOV     P0  ,   #00H;
SIX:
    INC     R2
    ANL     P2  ,   #0E3H
    ORL     P2  ,   #14H
    MOV     A   ,   R2
    MOVC    A   ,   @A+DPTR
    MOV     P0  ,   A
    LCALL   DELAY100US
    MOV     P0  ,   #00H;
FIVE:
    INC     R2
    ANL     P2  ,   #0E3H
    ORL     P2  ,   #10H
    MOV     A   ,   R2
    MOVC    A   ,   @A+DPTR
    MOV     P0  ,   A
    LCALL   DELAY100US
    MOV     P0  ,   #00H;
FOUR:
    INC     R2
    ANL     P2  ,   #0E3H
    ORL     P2  ,   #0CH
    MOV     A   ,   R2
    MOVC    A   ,   @A+DPTR
    MOV     P0  ,   A
    LCALL   DELAY100US
    MOV     P0  ,   #00H;
THREE:
    INC     R2
    ANL     P2  ,   #0E3H
    ORL     P2  ,   #08H
    MOV     A   ,   R2
    MOVC    A   ,   @A+DPTR
    MOV     P0  ,   A
    LCALL   DELAY100US
    MOV     P0  ,   #00H;
TWO:
    INC     R2
    ANL     P2  ,   #0E3H
    ORL     P2  ,   #04H
    MOV     A   ,   R2
    MOVC    A   ,   @A+DPTR
    MOV     P0  ,   A
    LCALL   DELAY100US
    MOV     P0  ,   #00H;
ONE:
    INC     R2
    ANL     P2  ,   #0E3H
    ORL     P2  ,   #00H
    MOV     A   ,   R2
    MOVC    A   ,   @A+DPTR
    MOV     P0  ,   A
    LCALL   DELAY100US
    MOV     P0  ,   #00H;
    RET
TM0_ISR:
    MOV     TL0 ,   #00H        ;重装定时器初值 50ms
    MOV     TH0 ,   #4CH        ;重装定时器初值 
    INC     R0
    CJNE    R0  ,   #20 ,RETURN ;
    MOV     R0  ,   #0
    INC     R1          
    CJNE    R1  ,   #9  ,RETURN ;1~8循环
    MOV     R1  ,   #1
RETURN:
    RETI
DELAY100US:			;@11.0592MHz
	PUSH 30H
	MOV 30H,#41
NEXT100US:
	DJNZ 30H,NEXT100US
	POP 30H
	RET
TAB1:
    DB      06H,5BH,4FH,66H,6DH,7DH,07H,7FH; 12345678
TAB2:
    DB      5BH,4FH,66H,6DH,7DH,07H,7FH,06H; 23456781
TAB3:
    DB      4FH,66H,6DH,7DH,07H,7FH,06H,5BH; 34567812
TAB4:
    DB      66H,6DH,7DH,07H,7FH,06H,5BH,4FH; 45678123
TAB5:
    DB      6DH,7DH,07H,7FH,06H,5BH,4FH,66H; 56781234
TAB6:
    DB      7DH,07H,7FH,06H,5BH,4FH,66H,6DH; 67812345
TAB7:
    DB      07H,7FH,06H,5BH,4FH,66H,6DH,7DH; 78123456
TAB8:
    DB      7FH,06H,5BH,4FH,66H,6DH,7DH,07H; 81234567

    END;

六、程序分析

1.逻辑法

数码管动态显示

在某一时刻,只让某一位的位选线处于选通状态,而其他各位的位选线处于关闭状态,同时,段码线上输出相应位要显示的字符段的段码。如此循环下去,就可以使各位轮流显示出将要显示的字符。

字符移位

首先观察每个时刻8个数码管显示的值之间的联系。观察到前一个数码管显示的值总是后一个数码管显示的值减一,只有1-8字符有效,即1-1之后不显示0而显示8。根据这层关系即可编写代码。

切换方式

字符切换有两种方式,第一种为每一秒钟自动移位,第二种为按键按下移位,在定时器0中断服务函数和外部中断0服务函数中实现。

数码管位选

查看原理图可知,数码管的位选由74HC138译码器控制,即需要控制P2.2,P2.3,P2.4的值来控制数码管位选。

2.查表法

通过R1的值来切换显示的字形码表,很简单,不多做解释了,查表法这里采用了另一种数码管位选的方式,以显示第8位数码管为例

    ANL     P2  ,   #0E3H       ;P2.2 P2.3 P2.4置0
    ORL     P2  ,   #1CH        ;选择第8位数码管显示

通过ANL语句将P2.2 P2.3 P2.4置0,再采用ORL语句对P2.2 P2.3 P2.4置1。通过这种方式可以不影响P2其他端口的输出。

七、测试报告

—上电后,数码管按照实验要求显示。每一秒钟或按键按下字符移位。效果如下图所示
<微机原理>[汇编语言]-[实验七]数码管动态显示实验

总结

第一次写博客,如有不足,请多多包含😊,如果对您有帮助的话记得点赞哦😍文章来源地址https://www.toymoban.com/news/detail-470293.html

到了这里,关于<微机原理>[汇编语言]-[实验七]数码管动态显示实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微机原理:汇编语言语句类型与格式

    汇编语言源程序包括的语句类型为:指令性语句和指示性语句。 指令性语句 即为通常所说的 符号指令 ; 符号指令 :经过汇编后,其机器指令通知CPU进行数模操作。 指示性语句 包括 伪指令 和 宏指令 。 伪指令 :是非机器指令,是在汇编链接期间进行操作。为汇编程序,

    2024年02月07日
    浏览(27)
  • 微机原理:并行接口实验(7七段数码管显示)

    一. 实验要求         编写程序,使8255的A口为输入,B口为输出,通过拨动开关让7段数码管显示0~F。 二. 实验代码 三. 实验结果         如需要硬件连接图和详细的实验报告,请自行点击下面网址付积分查看。 微型计算机原理与接口技术并行接口仿真实验_proteus右击主控

    2024年02月05日
    浏览(50)
  • 【汇编语言与微机原理】 期末复习题整理(小题)

    在机器数(补码)中,对真值0的表示是唯一的。 与十进制数56等值的二进制数是(111000) 二进制数10101转换成十进制数是(21)。 十进制数-75用二进制数10110101表示,其表示方式是(补码)。 关于补码机器数的描述中错误的是(不可能出现一个数的补码与其原码相同 ) 某计

    2024年01月15日
    浏览(32)
  • 【微机原理课设protues-汇编】基于8086四种波形发生器仿真设计-基于8086数码管矩阵键盘控制设计-基于8086微机原理直流电机控制系统-基于单片机PWM直流电机控制系统设计汇编

    文章转自电设屋,资料百度网盘下载地址  https://www.aiesst.cn/share.html 目录 1207基于8086四种波形发生器仿真设计-微机原理汇编仿真资料 1202基于8086数码管矩阵键盘控制设计-全套资料 1218基于8086智能汽车控制系统设计-微机原理课设 1209基于8086微机原理直流电机控制系统-设计资料

    2024年02月12日
    浏览(30)
  • 汇编语言实验——大数相乘

    1.1实验内容 实现两个十进制大整数的相乘(100位以上),输出乘法运算的结果。 1.2实验环境 Microsoft Visual Studio 2017+masm 32 1.3实验思路 1.3.1数据读入 大数相乘由于输入的数字过大而不能用一个dword来存储,所以需要使用数组来存取每一位,每一位大小范围在0-9中,按位读取输入

    2024年02月09日
    浏览(29)
  • 南京邮电大学汇编语言程序设计实验一(汇编语言语法练习与代码转换)

    排除语法错误:给出的是一个通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序,但有很多语法错误。要求实验者按照原样对源程序进行编辑,汇编后,根据TASM给出的信息对源程序进行修改,知道没有语法错误为止。然后进行链接,并执行相应可

    2024年02月08日
    浏览(45)
  • 汇编语言:矩阵式键盘扫描实验

    利用4x4矩阵键盘和一个LED数码管构成简单的输入显示系统,实现对键盘的扫描和LED数码管的显示键盘按下键的键号。共有4x4个按键和一个数码管,16个按键的键号分别对应十六进制数字:0~F。单机相应按键,数码管就会显示相应的数字。 数码管:这里采用共阳极数码管 CA为共

    2024年02月11日
    浏览(60)
  • 《汇编语言》王爽(第四版)第八章 实验7

    文章目录 前言 一、题目 二、分析 1.内存分配情况 2.数据结构分析 3.实现思路 (1)设置段寄存器 (2)复制“年份”数据 (3)复制“年总收入”数据 (4)复制“雇员人数”数据 (5)计算“人均收入” 三、代码 1.实现代码 2.优化代码 3.最终代码 总结 王爽老师《汇编语言》

    2024年02月04日
    浏览(59)
  • 《汇编语言》王爽(第四版) 第十章 实验10

    文章目录 前言 一、子程序1 显示字符串 1.实验任务 2.分析 (1)如何在指定位置显示 (2)如何显示指定颜色 (3)保存子程序中用到的寄存器 3.代码 二、子程序2 解决除法溢出的问题 1.实验任务 2.代码 三、子程序3 数值显示 1.实验任务 2.显示一个word型数据的代码 总结 本文是

    2024年02月08日
    浏览(30)
  • 单片机原理与接口技术(汇编语言)

    学习建议 结合哈工大的教程视频及课件学习 【公开课】哈工大 单片机原理及应用 单片机基础 计算机 计算机只能识别存储数码0和1 微型计算机中,负数常用补码表示 电子元器件的电位被区分为两种状态:高电位和低电位 常见高电位范围:2V ~ 5V 常见低电位范围:0V ~ 0.8V 正

    2024年01月20日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包