回 帖 发 新 帖 刷新版面

主题:[讨论]交通灯控制系统设计--微机课程设计

我对微机根本就不熟,也没怎么学。但是到了期末,老师居然叫我们做课程设计:模拟十字路口红绿灯的循环。我根本就不会,所以上来向各位求救。老师的要求如下:

交通灯控制系统设计方案;方案实施,包括程序设计(程序框图和程序清单及注释)以及其他有关的理论分析和计算。


DATA      SEGMENT
LA1      DW  044CH,0420H,0253H,0220H,0252H
LA2     DW  024CH,0420H,0253H,0220H,0252H
LA3     DW  044CH,0220H,0453H,0220H,0452H
DATA    ENDS

STACK   SEGMENT  STACK  'STACK'
STT     DB      200   DUP (?)
STACK   ENDS

CODE      SEGMENT
MAIN    PROC FAR
ASSUME   CS:CODE,DS:DATA,SS:STACK
START:
      PUSH  DS
      SUB   AX,AX
      PUSH  AX
      MOV   AX,DATA
      MOV   DS,AX
      MOV   AX,STACK
      MOV   SS,AX
    MOV    AH,0                  ;设置80×25彩色文本方式
    MOV    AL,3
    INT    10H

    MOV    DI,25                  ;显示25个字符
      MOV    DX,080AH            ;显示位置
    MOV    AH,15               ;取当前页号
    INT    10H
      MOV   BL,07H
LP:   MOV   AH,2                ;置光标位置
    INC    DL
    INT    10H
    MOV    AL,2DH           ;显示'-'字符

    MOV    CX,1
      MOV    AH,9
    INT    10H

    DEC    DI                ;判显示完否
    JNZ    LP                ;未完转LP再显示
      MOV   DI,25
      ADD   DL,12
LP1:   MOV   AH,2             ;置光标位置
    INC    DL
    INT    10H
    MOV    AL,2DH          ;显示'-'字符

    MOV    CX,1
      MOV    AH,9
    INT    10H
      DEC    DI                ;判显示完否
    JNZ    LP1               ;未完转LP1再显示
 
      MOV   DI,25
      MOV    DX,100AH          ;显示位置
LP2:   MOV   AH,2             ;置光标位置
    INC    DL
    INT    10H
    MOV    AL,2DH          ;显示'-'字符

    MOV    CX,1
      MOV    AH,9
    INT    10H

    DEC    DI              ;判显示完否
    JNZ    LP2             ;未完转LP2再显示
 
      MOV   DI,25
      ADD   DL,12
LP3:   MOV   AH,2            ;置光标位置
    INC    DL
    INT    10H
    MOV    AL,2DH         ;显示'-'字符

    MOV    CX,1
      MOV    AH,9
    INT    10H

    DEC    DI              ;判显示完否
    JNZ    LP3             ;未完转LP3再显示

      MOV   DI,8
      MOV    DX,0023H       ;显示位置
LP4:   MOV   AH,2          ;置光标位置
    INC   DH
    INT    10H
    MOV    AL,7CH         ;显示'|'字符

    MOV    CX,1
      MOV    AH,9
    INT    10H

    DEC    DI             ;判显示完否
    JNZ    LP4            ;未完转LP4再显示

      MOV   DI,8
      ADD   DH,7
LP5:   MOV   AH,2           ;置光标位置
    INC    DH
    INT    10H
    MOV    AL,7CH         ;显示'|'字符

    MOV    CX,1
      MOV    AH,9
    INT    10H

    DEC    DI              ;判显示完否
    JNZ    LP5             ;未完转LP5再显示

      MOV   DI,8
      MOV    DX,002FH       ;显示位置
LP6:   MOV   AH,2          ;置光标位置
    INC   DH
    INT    10H
    MOV    AL,7CH         ;显示'|'字符

    MOV    CX,1
      MOV    AH,9
    INT    10H

    DEC    DI          ;判显示完否
    JNZ    LP6          ;未完转LP6再显示

      MOV   DI,8
      ADD   DH,7
LP7:   MOV   AH,2       ;置光标位置
    INC    DH
    INT    10H
    MOV    AL,7CH         ;显示'|'字符

    MOV    CX,1
      MOV    AH,9
    INT    10H

    DEC    DI          ;判显示完否
    JNZ    LP7          ;未完转LP7再显示
 

      LEA  SI,LA1
      CALL LL
      
      MOV  CX,663
      MOV  DI,50
WWW:  CALL  WAITF
      DEC  DI
      JNE  WWW
      

      LEA  SI,LA2
      CALL LL
      
      MOV  CX,663
      MOV  DI,100
WWW1:  CALL  WAITF
      DEC  DI
      JNE  WWW1


      LEA  SI,LA3
      CALL LL

      
      RET                       ;返回DOS
MAIN  ENDP
 
LL    PROC NEAR
      MOV  DI,5
      MOV  DX,0E28H

L1:   MOV   AH,2             ;置光标位置
    INC    DL
    INT    10H
    MOV    AL,[SI]         ;显示交通灯
      INC   SI
    MOV    BL,[SI]
      MOV   CX,1
      MOV    AH,9
    INT    10H
    INC    SI          ;指向下一属性字节
    DEC    DI          ;判显示完否
    JNZ    L1
      RET
LL    ENDP

;(CX)= 15.08μs的倍数
WAITF        PROC    NEAR
      PUSH      AX
WAITF1: IN  AL,61H
    AND      AL,10H        ;检测PB4的状态
    CMP      AL,AH         ;是否发生变化
    JE      WAITF1      ;等待变化
    MOV   AH,AL          ;存入新的PB4的状态
    LOOP  WAITF1    ;循环,直到CX=0为止
    POP   AX
    RET
WAITF      ENDP


CODE    ENDS
    END    START


这里只是个框而已
要补充很多
我实在无从下手了

回复列表 (共3个回复)

沙发

交大的?

板凳

让我想想吧.

3 楼

BIOS 中断 10H 的 11H         入口参数: AH = 11H
入口参数:
  ES:BP=指定的字符点阵  
  CX=装入的字符数目 
  DX=从哪个字符开始装入 
  BL=要装入的模式 
  BH=每个字符点阵的数据字节数
可以把两个字母串变成一个信号灯,下面是点阵数据:
lftdotdot db 0,0,111b,1111b,11111b,111111b,111111b,111111b,111111b,111111b,111111b,11111b,1111b,111b,0,0
rgtdotdot db 0,0,11100000b,11110000b,11111000b,11111100b,11111100b,11111100b,11111100b,11111100b,11111100b,11111000b,11110000b,11100000b,0,0

我来回复

您尚未登录,请登录后再回复。点此登录或注册