2021-06-23

简介: 2021-06-23

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

; 文件名:

; 功能描述: 全自动滚筒洗衣机

;=========================================================SSTACK SEGMENT STACK

DW 256 DUP(?)

SSTACK ENDS

DATA SEGMENT


led db 6FH,7FH,07H,7DH,6DH,66H,4FH,5BH,06H,3FH

ioporta equ 600h

ioportb equ 602h

ioportc equ 604h

TABDT DB 01H,03H,02H,06H,04H,0CH,08H,09H

DATA ENDS


CODE SEGMENT

ASSUME CS:CODE, DS:DATASTART:

;Begin=======

  MOV AX, DATA
    MOV DS, AX
    mov dx,606h
  mov al,88H;方式0,A输出,B输出,C低四位输出
  out dx,al 


BEGIN:

CALL TUBE_STOP

MOV DX, 0604H

IN AL, DX ;读C口输入

MOV BL, AL


    MOV CL, 4
    SHR BL, CL  ;获取低四位
    CMP BL, 0
    JZ  BEGIN
    CMP BL, 1 ;若开关1打开,甩干模式
    JZ  FASTEST
    CMP BL, 02H
  JZ  FAST
  CMP BL, 04H
  JZ  SLOW  

FASTEST:

CMP DI,10 ;甩干模式出来停止

JZ BEGIN

call meantime

;MOV DI, 1000H ;约定使用DI来传递参数(延时长短)

;CALL SPEED ;甩干模式,急速快

FAST:

MOV DI, 4000H ;约定使用DI来传递参数(延时长短)

CALL SPEED ;开关1被打开,速度1标准

SLOW:

MOV DI, 0FFFFH ;约定使用DI来传递参数(延时长短)

CALL SPEED ;开关2被打开,速度2轻柔


;读取开关子程序

READ PROC

PUSH DX

PUSH AX

PUSH BX

PUSH CX

  MOV DX, 0604H
    IN  AL, DX  ;读C口输入
    MOV BL, AL
    MOV CL, 4
    SHR BL, CL  ;获取低四位
    CMP BL, 0
    JZ  BEGIN

CMP BL, 1 ;若开关1打开,甩干模式

; JZ Q1

; CMP BL, 02H ;若开关2打开,标准模式

; JZ FAST

; CMP BL, 04H ;若开关3打开,轻柔模式

; JZ SLOW

POP CX

POP BX

POP AX

POP DX

RET


READ ENDP

;动态数码管停止;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TUBE_STOP PROC
PUSH AX
PUSH BX
PUSH DX
mov dx,606h
mov al,88H;方式0,A输出,B输出,C低四位输出
out dx,al ;初始化8255
mov bx,offset led
mov al,11111001b ;选择全部
mov dx,ioportc
out dx,al ;出C口 选择个位
mov al,[bx+9] ;
mov dx,ioporta
out dx,al ;从a口输出
POP DX
POP BX
POP AX
RET
TUBE_STOP ENDP

;同步

meantime proc

mov dx,606h
mov al,10001000b;方式0,A输出,B输出,C输出
out dx,al   ;初始化8255
mov bx,offset led
mov si,0;个位
mov di,8;十位
mov cx,6


digit1: ;动态刷新一次数码管数字

CALL GEW ;从a口输出
call delay;1000
CALL TEN
CALL shuaigan
call read ;读开关
loop digit1
digit3:
mov cx,6
inc si
cmp si,9
jbe digit1
CMP  DI,9 ;只为判断最后一次00情况
Ja  DIGIT4

inc di  ;满十进一
mov si,0;清零个位

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

digit2: ;个位刷成0,十位刷成 原来-1

CALL GEW
call delay;1000
CALL TEN
CALL shuaigan
call read ;读开关
loop digit2

mov  cx,6
CMP  DI,9
JBe  DIGIT3

DIGIT4: ;输出为0结束程序

call tube_stop

jmp begin


meantime endp

;个位*

GEW PROC

PUSH AX

PUSH BX

PUSH DX

PUSH SI

mov bx,offset led

mov al,11111011b ;选择个位

mov dx,ioportC

out dx,al ;出C口 选择个位

    mov al,[bx+SI]  ;
    NOT AL
    mov dx,ioporta
    out dx,al ;从a口输出
  POP SI
  POP DX
  POP BX
  POP AX
  RET

GEW ENDP

;十位*

TEN PROC

PUSH AX

PUSH BX

PUSH DX

PUSH DI

    mov bx,offset led 
  
    mov al,11111101B  ;选择十位
    mov dx,ioportC
    out dx,al   ;出c口 选择十位
    
    mov al,[bx+di];
    NOT AL
    mov dx,ioporta
    out dx,al ;从a口输出
    
  POP DI
  POP DX
  POP BX
  POP AX
  RET

TEN ENDP

;延时子程序***

delay proc

push cx

mov cx,1000h

del:

;nop

nop

loop del

pop cx

ret

delay endp

;甩干子程序**

shuaigan proc

push ax

push bx

push cx

push dx

MOV BX, OFFSET TABDT

MOV CX, 0008H

Q2:

  call    gew
    
  MOV AL,[BX]   
  MOV   DX, 0602H   ; 写B口       
  OUT DX, AL
  INC BX
  call  delay   ; 控制步进电机的+转速1000 
  
  CALL    TEN
  call  delay
  LOOP  Q2
  
  pop dx
  pop cx
  pop bx
  pop ax
  ret

shuaigan endp


;延时子程序*

DALLY PROC

; PUSH DI

PUSH CX

MOV CX, DI

A3: PUSH AX

POP AX

LOOP A3

POP CX

; POP DI

RET


DALLY ENDP

;电机驱动子程序*******

SPEED PROC


MAIN: MOV AL, 88H ; 控制B口工作于方式0,输出

MOV DX, 0606H

OUT DX, AL

MOV  SI, 0      ;SI用于计算反转时间

;正转**

A1:

MOV  BX, OFFSET TABDT
    MOV  CX, 0008H

A2: MOV AL,[BX]

MOV DX, 0602H ; 写B口

OUT DX, AL

  CALL DALLY    ; 控制步进电机的+转速  
               
  INC  BX                                      
  LOOP A2
    
  CALL READ
    
  INC SI        ;SI用于计算反转时间
  CMP SI, 8H        ;8次后反转
  JB  A1
    
  PUSH DI
  MOV  DI, 0FFFFH
  CALL DALLY      ;正反转切换,需停止休息
  POP  DI

  PUSH DI
  MOV  DI, 0FFFFH
  CALL DALLY      ;正反转切换,需停止休息
  POP DI
  
  PUSH DI
  MOV  DI, 0FFFFH
  CALL DALLY      ;正反转切换,需停止休息
  POP  DI
  
  JMP  A5

A8: JMP A1

; CALL DALLY ;正反转切换,需停止休息(模仿现实中洗衣机)

; CALL DALLY ;正反转切换,需停止休息

;反转

A5:

MOV BX, OFFSET TABDT+7

MOV CX, 0008H

A4:

MOV AL,[BX]

MOV DX, 0602H ; 写B口

OUT DX, AL

CALL DALLY ; 控制步进电机的+转速

DEC BX

LOOP A4

  CALL READ
    
  DEC SI        ;SI用于计算反转时间
  CMP SI, 0     ;0后正转
  JA  A5
          
  PUSH DI
  MOV  DI,0FFFFH
  CALL DALLY      ;正反转切换,需停止休息
  POP  DI
  
  PUSH DI
  MOV  DI,0FFFFH
  CALL DALLY      ;正反转切换,需停止休息
  POP  DI
  
  PUSH DI
  MOV  DI,0FFFFH
  CALL DALLY      ;正反转切换,需停止休息
  POP  DI
  
  ; CALL DALLY      ;正反转切换,需停止休息
  ; CALL DALLY      ;正反转切换,需停止休息
  JZ  A8
  
  RET

SPEED ENDP

CODE ENDS

END START

相关文章
|
14天前
|
前端开发
z-index失效的几种情况,父标签position属性为relative的时候,详解
z-index失效的几种情况,父标签position属性为relative的时候,详解
|
14天前
|
前端开发 JavaScript
同源策略下,服务器会收到浏览器的请求吗?
同源策略下,服务器会收到浏览器的请求吗?
|
14天前
|
算法
二叉树中序遍历(一)
二叉树中序遍历(一)
|
14天前
|
算法
还不会防抖和节流?看这篇就足够了
还不会防抖和节流?看这篇就足够了
|
14天前
|
存储
二叉树遍历(五-最终篇)
二叉树遍历(五-最终篇)
|
14天前
## 标题: 求一元二次方程的根(25分)
## 标题: 求一元二次方程的根(25分)
|
14天前
|
Python
matplotlib-条形图
matplotlib-条形图
|
14天前
|
Python
pycharm使用Anaconda中的虚拟环境【我的入门困惑二】
pycharm使用Anaconda中的虚拟环境【我的入门困惑二】
|
14天前
|
C语言
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
|
14天前
|
前端开发 容器
用html、css实现一颗简单小爱心【2022首文】
用html、css实现一颗简单小爱心【2022首文】