Proteus 8 Professional 仿真流水灯以及数码管显示数字

实验环境

windows10
Proteus 8 Professional
需要安装包的可以看一下一下文章:
https://blog.csdn.net/liz_lalala/article/details/106128441

实现功能

流水灯(LED):当开关全开时从左向右进行流水灯,当开关全闭合时从右向左进行流水灯
数码管(7SEG-COM-CAT-BLUE):当只打开一个灯时显示该灯的位置,当打开多个灯时显示数字0

仿真整体图

仿真文件及代码:
链接:https://pan.baidu.com/s/1M7be5e9lDcRjjEXuqPOl_A
提取码:1li8
在这里插入图片描述

配置步骤

1.进入配置界面
在这里插入图片描述
2.将红色框改为汇编代码的exe文件的路径
在这里插入图片描述
3.其他配置
在这里插入图片描述
在这里插入图片描述

运行

点击左下角的三角形就可以开始运行了
在这里插入图片描述

原理图讲解

8086CPU最小系统搭建

注意一定要把标签标完,不然可能会出错。注意细节不要标错了,可以按照我发的文件来画图,这里就不放大图片了
在这里插入图片描述
元件
在这里插入图片描述
一些小细节的画法:
DEFAULT是小圆圈接口(我不知道专业术语是什么),POWER是接高电压,GROUND是接地
在这里插入图片描述

LED灯的和数码管的建立

就是按照图来画就算是建立成功(注意:一定一定不要画错了,因为画错一点就会出现错误)

代码讲解

完整代码

DATA SEGMENT
IO3   EQU 0030H ;30-0F
PA    EQU 30H
PB    EQU 32H
PC    EQU 34H
PCON  EQU 36H
CONTR EQU 82H
DATA ENDS

STACK SEGMENT STACK
      DW 100H DUP(?)
TOP   DW ?
STACK ENDS

CODE SEGMENT  
     ASSUME CS:CODE,DS:CODE,SS:STACK
MAIN PROC FAR
START:
     MOV AX,DATA
	 MOV DS,AX           ;数据段
	 
	 MOV AX,STACK
	 MOV SS,AX
	 LEA SP,TOP         ;栈段
	 
	 MOV DX,PCON      
	 MOV AL,CONTR
	 OUT DX,AL           ;写入工作方式
	 
R_PB:MOV DX,PB
     IN  AL,DX              ;PB处写入数据,开关打开为1,闭合为0
	 CMP AL,0FFH
	 JZ  LEFTLED      ;如果开关全打开,进入从左向右流水灯
	 CMP AL,0H
	 JZ  RIGHT           ;如果开关全闭合,进入从右向左流水灯
	 
W_PA:CALL WRITE   
	 JMP R_PB
	 
LEFTLED:
     CALL LEFTLEDP
	 JMP R_PB
RIGHT:  
     CALL RIGHTLEDP
	 JMP R_PB
	 
	 MOV AH,4CH
	 INT 21H
MAIN ENDP

WRITE PROC
     PUSH AX
	 PUSH DX
     MOV DX,PA
     OUT DX,AL
	 
	 CMP AL,01111111B
	 JZ  LO1
	 CMP AL,10111111B
	 JZ  LO2
	 CMP AL,11011111B
	 JZ  LO3
	 CMP AL,11101111B
	 JZ  LO4
	 CMP AL,11110111B
	 JZ  LO5
	 CMP AL,11111011B
	 JZ  LO6
	 CMP AL,11111101B
	 JZ  LO7
	 CMP AL,11111110B
	 JZ  LO8
	 MOV AL,00111111B
	 JMP L4
	 
LO1: MOV AL,01111111B
     JMP L4
LO2: MOV AL,00000111B
     JMP L4
LO3: MOV AL,01111101B
     JMP L4
LO4: MOV AL,01101101B
     JMP L4
LO5: MOV AL,01100110B
     JMP L4
LO6: MOV AL,01001111B
     JMP L4
LO7: MOV AL,01011011B
     JMP L4
LO8: MOV AL,00000110B
L4:	 
	 MOV DX,PC
     OUT DX,AL	 
	 POP DX
	 POP AX
	 RET
WRITE ENDP

LEFTLEDP PROC
     PUSH AX
	 PUSH CX
     MOV  AL,11101111B
	 CALL WRITE
	 CALL DELAY
	 MOV  CX,7
 L1:
	 ROL AL,1
	 CALL WRITE
	 CALL DELAY
	 LOOP L1
	 
	 POP CX
	 POP AX
     RET
LEFTLEDP ENDP  

RIGHTLEDP PROC
     PUSH AX
	 PUSH CX
     MOV AL,01111111B
	 CALL WRITE
	 CALL DELAY
	 MOV CX,7
  L2:
	 ROR AL,1
	 CALL WRITE
	 CALL DELAY
	 LOOP L2
	 
	 POP CX
	 POP AX
     RET
RIGHTLEDP ENDP 

DELAY PROC
     PUSH CX
	 MOV  CX,0FFFFH
 L3:
	 LOOP L3
	 POP  CX
     RET
DELAY ENDP

CODE ENDS
     END MAIN 

数据段

选择IO3是因为下图红框处连接的是它,以下代码是将IO3所处的地址赋给字符,CONTR是代表工作方式,82H指的是A,C口读取数据,B口写入数据

DATA SEGMENT
IO3   EQU 0030H ;30-0F
PA    EQU 30H
PB    EQU 32H
PC    EQU 34H
PCON  EQU 36H
CONTR EQU 82H
DATA ENDS

在这里插入图片描述

WRITE子程序

首先将读取PB处的数据,写入到PA处,即可使LED灯亮;再根据LED亮的情况,即将AL依次比对,来进行判断数码管应该显示的数字。不同数码管显示的数字的数据不同,该图使用的是7SEG-COM-CAT-BLUE,连接方式如下图
在这里插入图片描述

数码管显示数字对应的数据

;0 00111111B 
;1 00000110B
;2 01011011B
;3 01001111B
;4 01100110B
;5 01101101B
;6 01111101B
;7 00000111B
;8 01111111B
;9 01101111B

LEFTLEDP和RIGHTLEDP子程序

将数据左移或者右移,每移一次位也会在数码管上显示相应的数字

DELAY子程序

进行循环来延迟,但是无法预计延迟的时间。

如有错误,欢迎指正!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值