zoukankan      html  css  js  c++  java
  • 微机原理课程设计——在液晶模块上面实现秒表功能——00.00~10.00

    使液晶屏实现秒表功能,显示数字00.00~10.00,每隔0.01 秒数字变化一次

    流程图

    中断程序流程图

    液晶屏显示流程图

    代码

      1 ;-----------------------------------------------------------
      2 CNT0            EQU 0280H
      3 CNT1            EQU 0281H
      4 CNT2            EQU 0282H
      5 CON_8253        EQU 0283H
      6 CON_NUM         EQU 36H             ;8253的控制字,采用方式3,36H
      7 INITIAL         EQU 2710H           ;写入8253的初值
      8 INT_NUM         EQU 0BH             ;IRQ3终端类型号
      9 IO_ADDRESS      EQU 0288H
     10 ;-----------------------------------------------------------
     11 DATA    SEGMENT
     12 FOUR            DB 30H              ;代表第四位的值
     13 THIR            DB 30H
     14 SEC             DB 30H
     15 FIR             DB 30H
     16 NUM_BUFF        DB 30H,30H,2EH,30H,30H
     17 NUM_ADR         DB  ?               ;存放显示行起始端口地址
     18 INT_SEG         DW  ?               ;用于保存中断向量段基址的变量
     19 INT_OFF         DW  ?               ;用于保存中断向量偏移量的变量
     20 INTSOR          DB  ?               ;定义保存中断屏蔽字的变量
     21 MES             DB      'PRESS ANY KEY TO DOS!'
     22                 DB      0AH,0DH,'$'
     23 DATA    ENDS
     24 ;-----------------------------------------------------------
     25 STACK   SEGMENT
     26 STA             DB      100     DUP (?)
     27 TOP             EQU     LENGTH  STA
     28 STACK   ENDS
     29 ;-----------------------------------------------------------
     30 CODE    SEGMENT
     31 ASSUME    CS:CODE,DS:DATA,SS:STACK,ES:DATA
     32 ;------------------------------------------------------------
     33 START:          MOV     AX, DATA
     34                 MOV     DS, AX
     35                 MOV     ES, AX
     36                 MOV     AX, STACK
     37                 MOV     SS, AX
     38                 MOV     SP, TOP
     39                 
     40                 PUSH    DS
     41                 PUSH    ES
     42 
     43                 ;保存原有中断向量
     44                 MOV     AL, INT_NUM             ;INT_NUM 为指定中断号
     45                 MOV     AH, 35H
     46                 INT     21H
     47                 MOV     INT_SEG, ES             ;保存向量段基址
     48                 MOV     INT_OFF, BX             ;保存向量偏移量
     49                 CLI                             ;修改向量前关中断
     50 
     51                 ;              
     52                 MOV     AX, SEG INT_PR          ;INT_TIME是中断服务程序
     53                 MOV     DS, AX                  ;DS指向中断程序段基址
     54                 MOV     DX, OFFSET INT_PR       ;DX指向中断程序偏移量
     55                 MOV     AL, INT_NUM
     56                 MOV     AH, 25H
     57                 INT     21H   
     58 
     59                 ;保护原中断屏蔽字
     60                 IN      AL, 21H
     61                 MOV     INTSOR, AL              ;保护原中断屏蔽字
     62                 AND     AL, 0F7H                ;开放IRQ3的中断请求
     63                 OUT     21H, AL
     64                 
     65                 POP     ES
     66                 POP     DS
     67 
     68                 ;显示
     69                 MOV     DX,     OFFSET  MES
     70                 MOV     AH,     09H
     71                 INT     21H
     72 
     73                 MOV     DX, IO_ADDRESS
     74                 ADD     DX, 3
     75                 MOV     AL, 80H
     76                 OUT     DX, AL                       ;8255初始化
     77 
     78                 MOV     AL, 0FFH
     79                 MOV     DX, IO_ADDRESS
     80                 OUT     DX, AL
     81 
     82                 CALL CLEAR                          ;LCD 清除
     83                 LEA     BX,  NUM_BUFF
     84                 CALL    LCD_DISP
     85 
     86                 ;计数器0/方式3/10ms
     87                 ;初始化8253,触发中断的脉冲处于低电平
     88                 MOV     DX, CON_8253
     89                 MOV     AL, 36H                     ;8253写入控制字
     90                 OUT     DX, AL
     91                 MOV     DX, CNT0
     92 ;                MOV     AL, 10H                     ;CNT0写入初始值低字节
     93                 MOV     AL, 20H                     ;CNT0写入初始值低字节
     94                 OUT     DX, AL
     95 ;                MOV     AL, 27H                     ;CNT0写入初始值高字节
     96                 MOV     AL, 4EH                     ;CNT0写入初始值高字节
     97 
     98                 OUT     DX, AL                   
     99 
    100                 STI                                 ;开中断    
    101 
    102 MAIN:           LEA     BX,  NUM_BUFF               ;显示第2行信息 
    103                 CALL    LCD_DISP
    104                 MOV     AH,         01H             ;键盘
    105                 INT     16H
    106                 JZ      MAIN
    107                 CLI                                 ;修改向量前关中断
    108 ;-----------------------------------------------------------
    109                 ;重新赋值中断向量
    110                 MOV     AX, INT_SEG
    111                 MOV     DS, AX                       ;DS指向向量段基址
    112                 MOV     DX, INT_OFF                  ;DX指向向量偏移址
    113                 MOV     AL, INT_NUM                  ;
    114                 MOV     AH, 25H;
    115                 INT     21H
    116 
    117                 ;恢复原中断屏蔽字
    118                 MOV     AL, INTSOR
    119                 OUT     21H,AL
    120                 ;STI
    121                 MOV     AH, 4CH         ;返回DOS
    122                 INT     21H
    123 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   
    124 CLEAR       PROC
    125                 ;00001100,开显示
    126                 MOV     AL, 0CH
    127                 MOV     DX, IO_ADDRESS
    128                 OUT     DX, AL                      ;设置CLEAR命令
    129                 CALL    CMD_SETUP                   ;启动LCD执行命令
    130                 RET
    131 CLEAR       ENDP
    132 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   
    133 LCD_DISP    PROC
    134                 LEA     BX, NUM_BUFF
    135                 MOV     BYTE PTR NUM_ADR,90H         ;10010000
    136                 MOV     CL,5
    137                 ;循环5次,输出5个字符
    138 CONTINUE:       PUSH    CX
    139                 MOV     AL, NUM_ADR
    140                 MOV     DX, IO_ADDRESS
    141                 OUT     DX, AL
    142                 CALL    CMD_SETUP                   ;设定DDRAM地址命令
    143 
    144                 MOV     AL,[BX]
    145                 MOV     DX,IO_ADDRESS
    146                 OUT     DX,AL
    147                 CALL    DATA_SETUP                  ;输出
    148                 CALL    DELAY                       ;延迟
    149 
    150                 INC     BX
    151                 INC     BYTE PTR NUM_ADR             ;修改LCD显示端口地址                
    152                 POP     CX
    153                 DEC     CL
    154                 JNZ     CONTINUE
    155                 RET
    156 LCD_DISP    ENDP
    157 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   
    158 CMD_SETUP   PROC
    159                 MOV     DX, IO_ADDRESS               ;指向8255端口控制端口
    160                 ADD     DX, 2
    161                 NOP
    162                 MOV     AL, 00000000B                ;PC1置0,PC0置0 (LCD I端=0,W端=0163                 OUT     DX, AL
    164                 CALL    DELAY
    165                 NOP
    166                 MOV     AL, 00000100B                ;PC2置1 (LCD E端=1167                 OUT     DX, AL
    168                 NOP
    169                 CALL    DELAY
    170                 MOV     AL, 00000000B               ;PC2置0,(LCD E端置0)
    171                 OUT     DX, AL
    172                 CALL    DELAY
    173 
    174                 RET
    175 CMD_SETUP   ENDP
    176 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   
    177 DATA_SETUP  PROC
    178                 MOV     DX, IO_ADDRESS              ;指向8255控制端口
    179                 ADD     DX, 2
    180                 MOV     AL, 00000001B               ;PC1置0,PC0=1 (LCD I端=1181                 OUT     DX, AL
    182                 NOP
    183                 CALL    DELAY
    184                 MOV     AL, 00000101B               ;PC2置1 (LCD E端=1185                 OUT     DX, AL
    186                 NOP
    187                 CALL    DELAY
    188                 MOV     AL, 00000001B               ;PC2置0,(LCD E端=0189                 OUT     DX, AL
    190                 NOP
    191                 CALL    DELAY
    192                 RET
    193 DATA_SETUP  ENDP
    194 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   
    195 DELAY       PROC
    196                 PUSH    CX
    197                 PUSH    DX
    198                 MOV     CX, 0FFFH
    199 X1:             LOOP    X1
    200                 POP     DX
    201                 POP     CX
    202                 RET
    203 DELAY       ENDP
    204 ;-----------------------------------------------------------
    205 INT_PR      PROC    FAR
    206             PUSH    SI
    207             PUSH    DI
    208             PUSH    CX
    209             PUSH    AX
    210             STI
    211 ;------------------------------------------------------------ 
    212             MOV     BYTE PTR FOUR, 30H               ;在从10.00到00.00时对最高位的初始化
    213             INC     BYTE PTR FIR
    214             CMP     BYTE PTR FIR, 3AH
    215             JZ      SEC_HAN                 ;能够进位,转入对第二位处理的程序
    216             JMP     BACK
    217          
    218 SEC_HAN:    MOV     BYTE PTR FIR, 30H                ;处理第二位,先将第一位的数值清零
    219             INC     BYTE PTR SEC
    220             CMP     BYTE PTR SEC, 3AH
    221             JZ      THIR_HAN
    222             JMP     BACK
    223 
    224 THIR_HAN:   MOV     BYTE PTR SEC, 30H
    225             INC     BYTE PTR THIR
    226             CMP     BYTE PTR THIR, 3AH
    227             JZ      FOUR_HAN
    228             JMP     BACK
    229 
    230 FOUR_HAN:   MOV     BYTE PTR THIR, 30H
    231             INC     FOUR
    232                 
    233 BACK:       MOV     SI, OFFSET FOUR
    234             MOV     DI, OFFSET NUM_BUFF
    235             MOV     CX, 2
    236             CLD
    237             REP     MOVSB
    238             MOV     AL, 2EH
    239             MOV     [DI], AL
    240             INC     DI
    241             MOV     CX, 2
    242             REP     MOVSB
    243 ;------------------------------------------------------------             
    244             CLI
    245             POP     AX
    246             POP     CX
    247             POP     DI
    248             POP     SI
    249             MOV     AL, 20H
    250             OUT     20H, AL  
    251 
    252             STI
    253             IRET                   ;不够进位,跳出中断,使触发中断的脉冲处于低电平
    254 INT_PR  ENDP
    255 ;-----------------------------------------------------------
    256 CODE        ENDS
    257             END     START
  • 相关阅读:
    『高性能模型』轻量级网络ShuffleNet_v1及v2
    『计算机视觉』物体检测之RefineDet系列
    『计算机视觉』目标检测前沿及回顾(2018)
    『高性能模型』轻量级网络MobileNet_v2
    『流畅的Python』第14章:可迭代的对象、迭代器和生成器
    『流畅的Python』第12章:继承的优缺点
    『关键点检测』CPN:Cascaded Pyramid Network for Multi-Person Pose Estimation
    『计算机视觉』Mask-RCNN_从服装关键点检测看KeyPoints分支
    『计算机视觉』Mask-RCNN_训练网络其三:训练Model
    『计算机视觉』mini深度学习框架实现
  • 原文地址:https://www.cnblogs.com/YiDongZhao/p/14732637.html
Copyright © 2011-2022 走看看