硬件课程设计—电梯控制系统

目录

电梯控制器设计

课题的任务与要求

系统的组成及主要工作原理:

系统测试表

界面:


电梯控制器设计

要求:利用8255控制4*4键盘与LCD显示屏,利用8255控制步进电机正、反转,完成电梯上下方向控制,LCD屏显示上行、下行、开门、关门、楼层号显示。

语言环境:汇编

课题的任务与要求

4*4键盘进行楼层的输入,LCD显示电梯运行信息,包括当前楼层、运行方向、开关门状态等,8255进行控制和计算。

电梯控制器系统功能下所示:

  1. LCD显示开关门以及所在楼层
  2. LCD显示电梯上下行
  3. 键盘模拟楼层按键
  4. 电机模拟电梯上下行过程

利用8255控制4*4键盘与LCD显示屏,利用8255控制步进电机正、反转,完成电梯上下方向控制,LCD屏显示上行、下行、开门、关门、楼层号显示。 学习相关硬件的使用原理,如步进电机,LCD显示器等的工作原理。同时在 PC端搭建开发环境用于相关软件开发。利用步进电机,8255 控制芯片以及 LCD 显示器搭建一套 简单的电梯运行控制系统。

系统的组成及主要工作原理:

扫描键盘获取目标楼层,用目标楼层与当前电梯所在楼层比较,若目标楼层高于当前所在楼层则调用电梯上升程序,用电机转动模拟电梯上升。若目标楼层低于电梯所在楼层则电机反转,模拟电梯下降。若目标楼层等于电梯所在楼层则处于开门状态。每到达一层都要比较一下所在楼层与目标楼层。同时根据比较结果在LCD显示器上显示当前电梯状态。

系统测试表

键盘点击

电机状态     

LCD显示结果

初始状态

静止

1

开门

1

静止

1

开门

2

顺时针转动

1

电梯上升

2

开门

4

顺时针转动

2

电梯上升

3

电梯上升

4

开门

3

逆时针转动

4

电梯下降

3

开门

界面:

 

 

 

PORT_A equ 280H                 

PORT_B equ 281H

PORT_C equ 282H

PORT_CON equ 283H

DATA SEGMENT

TABLE1    DW 0770H,0B70H,0D70H,0E70H,07B0H,0BB0H,0DB0H,0EB0H

           DW 07D0H,0BD0H,0DD0H,0ED0H,07E0H,0BE0H,0DE0H,0EE0H    ;键盘扫描码表

HZ_TAB 

DW  0A3B1H,0A3B1H,0A3B1H,0A3B2H,0A3B3H,0A3B4H,0A3B5H,0A3B6H,0A3B7H,0A3B8H

         ;第一行信息?当前楼层(1~9对应的汉字码)

        DW 0BFAAH,0C3C5H,0a1a0h,0a1a0h              ;第二行信息 (开门)

        DW 0B5E7H,0CCDDH,0C9CFH,0C9FDH    ;第三行信息 (电梯上升)

        DW 0B5E7H,0CCDDH,0CFC2H,0BDB5H    ;第四行信息 (电梯下降)

HZ_ADR DB ?         ;存放显示行起始端口地址

BUF DB 0

NUM DB 0;用于存放楼层号

KEYNUM DB 0;;

CHECK DB 0;

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

MAIN:

  MOV     AX,CS

  MOV     DS,AX

  MOV     AX,DATA

  MOV     DS,AX

   MOV NUM,01H;初始默认在一楼

   MOV KEYNUM,01H

   CALL LCDSHOW

START:

        MOV DX,PORT_CON            ;初始化8255控制字

        MOV AL,81H ;  ;C口低四位输入

        OUT DX,AL

        CALL KEY              

KEY PROC

KEY_LOOP:

        MOV DX,PORT_C;;

        MOV AL,0FH

        OUT DX,AL

        IN AL,DX                    ;读行扫描值(取列值)

        AND AL,0FH

        CMP AL,0FH

        JZ KEY_LOOP                 ;未发现有键按下则转

        CALL KEYDELAY                  ;DELAY FOR AMOMENT

        MOV AH,AL

        MOV DX,PORT_CON

        MOV AL,88H         ; ;C口高四位输入

        OUT DX,AL

        MOV DX,PORT_C

        MOV AL,AH

        OR AL,0F0H

        OUT DX,AL

        IN AL,DX                    ;读列扫描值

        AND AL,0F0H

        CMP AL,0F0H

        JZ KEY_LOOP                 ;未发现有键按下则转

        MOV SI,OFFSET TABLE1        ;键盘扫描码表首址

        MOV CX,16              

KEY_TONEXT:

        CMP AX,[SI]                 ;CMP (COL,ROW) WITH EVERY WORD

        JZ NUMCMP             ;IN THE TABLE

        DEC CX

        JZ KEY_LOOP                 ;未找到对应扫描码

        ADD SI,2

        INC KEYNUM; ;用于存放键盘点击的楼层号

        JMP KEY_TONEXT

NUMCMP:    

          MOV AL,NUM   

         CMP AL,KEYNUM

         JE KEEPSHOW             

         CALL LCDSHOW

          CALL MOTOR

        

          JMP NUMCMP

KEEPSHOW:

     CALL LCDSHOW

     MOV KEYNUM,01

     JMP START

KEY_WAITUP:

        MOV DX,PORT_CON

        MOV AL,81H

        OUT DX,AL

        MOV DX,PORT_C

        MOV AL,0FH

        OUT DX,AL

        IN AL,DX           ;读行扫描值

        AND AL,0FH

        CMP AL,0FH

        JNZ KEY_WAITUP     ;按键未抬起转

        CALL KEYDELAY         ;DELAY FOR AMOMENT

        RET                  ;调显示子程序,显示得到的字符    

KEY ENDP

KEYDELAY PROC NEAR

        PUSH AX         

        MOV AH,0

        INT 1AH

        MOV BX,DX

DELAY1:

        MOV AH,0

        INT 1AH

        CMP BX,DX

        JZ DELAY1

        MOV BX,DX

DELAY2:

        MOV AH,0

        INT 1AH

        CMP BX,DX

        JZ DELAY2

        POP AX

        RET

KEYDELAY ENDP

MOTOR PROC

  PUSH AX

  PUSH CX

  MOV DX,PORT_CON

  MOV AL,80H

  OUT DX,AL;8255初始化

  MOV BUF,33H

  MOV CX,40;用来控制移位次数(进而实现一次运转时间)

  OUT1:

  DEC CX

  JZ CK  ;等于零就跳出子程序

  MOV AL,BUF

  MOV DX,PORT_B;;只用了四位

  AND AL,0F0H

  OUT DX,AL

  MOV AL,NUM

  CMP AL,KEYNUM

 JB  CW;;所在楼层小于按键楼层顺时针转

 JG  ACW;;所在楼层大于按键楼层逆时针转

CW:

        MOV    CHECK,01H

        MOV     BL,0FFH         

        CALL    DELAY

        MOV     AL,BUF

        ROL     AL,1

        MOV     BUF,AL

        JMP     OUT1

ACW:

        MOV    CHECK,00H

        MOV     BL,0FFH         

        CALL    DELAY

        MOV     AL,BUF

        ROR     AL,1

        MOV     BUF,AL

        JMP     OUT1

CK:

MOV AL,01H;

CMP AL,CHECK

JZ UP

JNZ DOWN

UP:                    ;楼层加一

INC NUM

JMP RETURN

DOWN:                 ;楼层减一

DEC NUM

JMP RETURN

RETURN:

POP CX

POP AX         

 RET

MOTOR ENDP

DELAY PROC    ; ;NEAR要求子程序与被调程序在同一代码段

                      PUSH CX      ;通用寄存器压栈,不影响外面记录移位次数的CX

DELAY01:         MOV     CX,0FFFH;05A4H

DELAY02:         LOOP    DELAY02

                       DEC     BL

                       JNZ     DELAY01

                       POP CX

                       RET

DELAY ENDP    ;跟PROC成对出现

;CODE ENDS

;END MOTOR

LCDSHOW PROC

PUSH AX

PUSH CX

MOV DX,PORT_CON

MOV AL,80H

OUT DX,AL    ;8255初始化

MOV AL,0FFH

MOV DX,300H

OUT DX,AL

CALL CLEAR

LEA BX,HZ_TAB

CALL LCD_DISP

POP CX

POP AX

RET

LCDSHOW ENDP

CLEAR  PROC

    MOV AL,0CH

    MOV DX,PORT_A        ;唤醒

    OUT DX,AL               ;设置CLEAR命令

    CALL CMD_SETUP          ;启动LCD执行命令

    RET

CLEAR ENDP

LCD_DISP  PROC

    LEA BX,HZ_TAB

    MOV BYTE PTR HZ_ADR,80H

CONTINUE1:

    PUSH CX

    MOV AL,HZ_ADR

    MOV DX,PORT_A

    OUT DX,AL

    CALL CMD_SETUP

    MOV AL,NUM

    MOV AH,0H

    MOV CX,AX

LOOP1:

    INC BX

    INC BX

   LOOP  LOOP1

    MOV AX,[BX]

    PUSH AX

    MOV AL,AH

    MOV DX,PORT_A

    OUT DX,AL;先送高八位

    CALL DATA_SETUP

    CALL DELAY0

    POP AX

    MOV DX,PORT_A

    OUT DX,AL;;再送低八位

    CALL DATA_SETUP

    CALL DELAY0

    POP CX

    MOV AL,NUM

    CMP AL,KEYNUM

    JZ OPEN2

    JG DOWN2

    JB UP2

OPEN2:

    CALL OPEN1

    RET

DOWN2:

    CALL DOWN1

    RET

UP2:

     CALL UP1

     RET

LCD_DISP ENDP  

OPEN1 PROC

PUSH CX

    LEA BX,HZ_TAB

    ADD BX,20

    MOV BYTE PTR HZ_ADR,90H

    MOV CL,4

CONTINUE2:

    PUSH CX

    MOV AL,HZ_ADR

    MOV DX,PORT_A

    OUT DX,AL

    CALL CMD_SETUP

    MOV AX,[BX]

    PUSH AX

    MOV AL,AH

    MOV DX,PORT_A

    OUT DX,AL

    CALL DATA_SETUP

    CALL DELAY0

    POP AX

    MOV DX,PORT_A

    OUT DX,AL

    CALL DATA_SETUP

    CALL DELAY0

    INC BX

    INC BX

    INC BYTE PTR HZ_ADR

    POP CX

    DEC CL

    JNZ CONTINUE2

    POP CX

    RET

OPEN1 ENDP 

UP1 PROC

    LEA BX,HZ_TAB

    ADD BX,28

    MOV BYTE PTR HZ_ADR,90H

    MOV CL,4

CONTINUE3:

    PUSH CX

    MOV AL,HZ_ADR

    MOV DX,PORT_A

    OUT DX,AL

    CALL CMD_SETUP

    MOV AX,[BX]

    PUSH AX

    MOV AL,AH

    MOV DX,PORT_A

    OUT DX,AL

    CALL DATA_SETUP

    CALL DELAY0

    POP AX

    MOV DX,PORT_A

    OUT DX,AL

    CALL DATA_SETUP

    CALL DELAY0

    INC BX

    INC BX

    INC BYTE PTR HZ_ADR

    POP CX

    DEC CL

JNZ CONTINUE3

RET

UP1 ENDP

DOWN1 PROC

    LEA BX,HZ_TAB

    ADD BX,36

    MOV BYTE PTR HZ_ADR,90H

    MOV CL,4

CONTINUE4:

    PUSH CX

    MOV AL,HZ_ADR

    MOV DX,PORT_A

    OUT DX,AL

    CALL CMD_SETUP

    MOV AX,[BX]

    PUSH AX

    MOV AL,AH

    MOV DX,PORT_A

    OUT DX,AL

    CALL DATA_SETUP

    CALL DELAY0

    POP AX

    MOV DX,PORT_A

    OUT DX,AL

    CALL DATA_SETUP

    CALL DELAY0

    INC BX

    INC BX

    INC BYTE PTR HZ_ADR

    POP CX

    DEC CL

JNZ CONTINUE4

RET

DOWN1 ENDP

;RET

;LCD_DISP ENDP

CMD_SETUP       PROC

                MOV DX,PORT_B               ;指向8255端口控制端口

                NOP

                MOV AL,00000000B             ;PB1置0,PB0置0 (LCD I端=0,W端=0)

                OUT DX, AL

                CALL DELAY0

                NOP

                MOV AL,00000100B                ;PB2置1 (LCD E端=1)

                OUT DX, AL

                NOP

                CALL DELAY0

                MOV AL, 00000000B               ;PB2置0,(LCD E端置0)

                OUT DX, AL

                CALL DELAY0

                RET

CMD_SETUP       ENDP

DATA_SETUP      PROC

                MOV DX,PORT_B                ;指向8255控制端口

                MOV AL,00000001B                ;PB1置0,PB0=1 (LCD I端=1)

                OUT DX, AL

                NOP

                CALL DELAY0

                MOV AL,00000101B                ;PB2置1 (LCD E端=1)

                OUT DX, AL

                NOP

                CALL DELAY0

                MOV AL, 00000001B               ;PB2置0,(LCD E端=0)

                OUT DX, AL

                NOP

                CALL DELAY0

                RET

DATA_SETUP      ENDP

DELAY0           PROC

                PUSH CX

                PUSH DX

                MOV CX, 0FFFH

 X1:           LOOP   X1

                POP DX

                POP CX

                RET

DELAY0          ENDP

CODE ENDS

END MAIN



  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值