51汇编Proteus仿真教程——7.数码管显示1-6

简介:

本文详细介绍如何使用51汇编的Proteus仿真去实现数码管静态显示1-6。此教程只做操作过程,不具体解释每一步具体含义,以极简的方式,通过操作让你实现相关功能。

前提条件:

①新建好相关的仿真工程,绘制好相关原理图

②学会了IO口的基本控制

如果不具备以上条件,可以往回看相关教程,往期内容有较详细的讲解!

1、整体原理图如下

在这里插入图片描述

2、数码管原理图

在这里插入图片描述

这里使用的是蓝色的6位,数码管的名称SEG-MPX6-CA-BLUE。将数码管的a、b、c、d、e、f、g、dp的段选连接到P0口,将数码管1到6位选连接到P3口。通过先选通段选,在再选位选,实现数码管的显示。

3、数码管显示1-6子程序

;=========================

; 数码管显示1-6子程序

; 名称:SEG_1_6

; 输入:空

; 输出:空

; 功能:数码管2,4,6位循环显示0-9

;=========================

SEG_1_6:

CLR SEG_1 ; 关闭数码管1

CLR SEG_2 ; 关闭数码管2

CLR SEG_3 ; 关闭数码管3

CLR SEG_4 ; 关闭数码管4

CLR SEG_5 ; 关闭数码管5

CLR SEG_6 ; 关闭数码管6

LCALL DELAY20_NOP ; 调用延时20个机器周期函数

SETB SEG_1 ; 打开数码管1

MOV SEG_DUAN, #0F9H ; 点亮段选

LCALL DELAY ; 调用延时20个机器周期函数

CLR SEG_1 ; 关闭数码管1

MOV SEG_DUAN, #0FFH ; 灭亮段选

LCALL DELAY20_NOP ; 调用延时20个机器周期函数

SETB SEG_2 ; 打开数码管2

MOV SEG_DUAN, #0A4H ; 点亮段选

LCALL DELAY ; 调用延时20个机器周期函数

CLR SEG_2 ; 关闭数码管2

MOV SEG_DUAN, #0FFH ; 灭亮段选

LCALL DELAY20_NOP ; 调用延时20个机器周期函数

SETB SEG_3 ; 打开数码管3

MOV SEG_DUAN, #0B0H ; 点亮段选

LCALL DELAY ; 调用延时20个机器周期函数

CLR SEG_3 ; 关闭数码管3

MOV SEG_DUAN, #0FFH ; 灭亮段选

LCALL DELAY20_NOP ; 调用延时20个机器周期函数

SETB SEG_4 ; 打开数码管4

MOV SEG_DUAN, #099H ; 点亮段选

LCALL DELAY ; 调用延时20个机器周期函数

CLR SEG_4 ; 关闭数码管4

MOV SEG_DUAN, #0FFH ; 灭亮段选

LCALL DELAY20_NOP ; 调用延时20个机器周期函数

SETB SEG_5 ; 打开数码管5

MOV SEG_DUAN, #92H ; 点亮段选

LCALL DELAY ; 调用延时20个机器周期函数

CLR SEG_5 ; 关闭数码管5

MOV SEG_DUAN, #0FFH ; 灭亮段选

LCALL DELAY20_NOP ; 调用延时20个机器周期函数

SETB SEG_6 ; 打开数码管6

MOV SEG_DUAN, #82H ; 点亮段选

LCALL DELAY ; 调用延时20个机器周期函数

CLR SEG_6 ; 关闭数码管6

MOV SEG_DUAN, #0FFH ; 灭亮段选

LCALL DELAY20_NOP ; 调用延时20个机器周期函数

RET

4、具体效果展示

在这里插入图片描述

5、完整程序

;=========================

; 文件名称:main.asm

; 文件描述:汇编基本程序教程:数码管

; 创建人:lsh

; 创建日期: 2023.9.21

; 程序版本:1.0

; 完成日期:2023.9.21

;=修改记录====

; 修改人:

; 修改内容:

; 修改时间:

;=========================

$NOMOD51

$INCLUDE (80C52.MCU)

; IO引脚定义

;=========================

SEG_1 EQU P3.0 ; 定义P3.0口为SEG_1

SEG_2 EQU P3.1 ; 定义P3.1口为SEG_2

SEG_3 EQU P3.2 ; 定义P3.2口为SEG_3

SEG_4 EQU P3.3 ; 定义P3.3口为SEG_4

SEG_5 EQU P3.4 ; 定义P3.4口为SEG_5

SEG_6 EQU P3.5 ; 定义P3.5口为SEG_6

SEG_DUAN EQU P0 ;定义P0口为SEG_DUAN

;=========================

;=========================

  org   0000h

  jmp   Start        ; 跳转到程序开始入口

;=========================

; 主程序

;=========================

  org   0100h

Start:

;=========================

; 主程序的主循环

;=========================

Loop: ; 程序主循环

LCALL SEG_1_6

AJMP  Loop        ;  跳转到程序主循环开头

;=========================

;子程序

;=========================

;=========================

; 延时子程序

; 名称:DELAY

; 输入:空

; 输出:空

; 功能:占用cpu,实现延时一段时间

;=========================

DELAY:

MOV R0,#10

DELAY1:

MOV R1,#20

DELAY2:

MOV R2,#20

DJNZ R2,$

DJNZ R1,DELAY2

DJNZ R0,DELAY1

RET

;=========================

;=========================

;=========================

; 延时20机器指令子程序

; 名称:DELAY20_NOP:

; 输入:空

; 输出:空

; 功能:占用cpu,实现延时20机器指令

;=========================

DELAY20_NOP:

MOV R0,#20

DELAY20_NOP1:

NOP

DJNZ R0,DELAY20_NOP1

RET

; 数码管显示1-6子程序

; 名称:SEG_1_6

; 输入:空

; 输出:空

; 功能:数码管2,4,6位循环显示0-9

;=========================

SEG_1_6:

CLR SEG_1 ; 关闭数码管1

CLR SEG_2 ; 关闭数码管2

CLR SEG_3 ; 关闭数码管3

CLR SEG_4 ; 关闭数码管4

CLR SEG_5 ; 关闭数码管5

CLR SEG_6 ; 关闭数码管6

LCALL DELAY20_NOP ; 调用延时20个机器周期函数

SETB SEG_1 ; 打开数码管1

MOV SEG_DUAN, #0F9H ; 点亮段选

LCALL DELAY ; 调用延时20个机器周期函数

CLR SEG_1 ; 关闭数码管1

MOV SEG_DUAN, #0FFH ; 灭亮段选

LCALL DELAY20_NOP ; 调用延时20个机器周期函数

SETB SEG_2 ; 打开数码管2

MOV SEG_DUAN, #0A4H ; 点亮段选

LCALL DELAY ; 调用延时20个机器周期函数

CLR SEG_2 ; 关闭数码管2

MOV SEG_DUAN, #0FFH ; 灭亮段选

LCALL DELAY20_NOP ; 调用延时20个机器周期函数

SETB SEG_3 ; 打开数码管3

MOV SEG_DUAN, #0B0H ; 点亮段选

LCALL DELAY ; 调用延时20个机器周期函数

CLR SEG_3 ; 关闭数码管3

MOV SEG_DUAN, #0FFH ; 灭亮段选

LCALL DELAY20_NOP ; 调用延时20个机器周期函数

SETB SEG_4 ; 打开数码管4

MOV SEG_DUAN, #099H ; 点亮段选

LCALL DELAY ; 调用延时20个机器周期函数

CLR SEG_4 ; 关闭数码管4

MOV SEG_DUAN, #0FFH ; 灭亮段选

LCALL DELAY20_NOP ; 调用延时20个机器周期函数

SETB SEG_5 ; 打开数码管5

MOV SEG_DUAN, #92H ; 点亮段选

LCALL DELAY ; 调用延时20个机器周期函数

CLR SEG_5 ; 关闭数码管5

MOV SEG_DUAN, #0FFH ; 灭亮段选

LCALL DELAY20_NOP ; 调用延时20个机器周期函数

SETB SEG_6 ; 打开数码管6

MOV SEG_DUAN, #82H ; 点亮段选

LCALL DELAY ; 调用延时20个机器周期函数

CLR SEG_6 ; 关闭数码管6

MOV SEG_DUAN, #0FFH ; 灭亮段选

LCALL DELAY20_NOP ; 调用延时20个机器周期函数

RET

;=========================

;=========================

  END          ;   程序结束

;=========================

点赞、收藏加关注,下期不迷路!

更多精彩内容,请看往期!

一起学起来,让我们成为更优秀的自己!我们下期不见不散!

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值