实验环境
windows10
Proteus 8 Professional
需要安装包的可以看一下一下文章:
实现功能
流水灯(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子程序
进行循环来延迟,但是无法预计延迟的时间。