微机原理课程设计——在液晶模块上面实现秒表功能——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

 

posted @ 2021-05-05 20:15  Ted_Zhao  阅读(427)  评论(0编辑  收藏  举报