?? clock_lcd1.lst
字號:
A51 MACRO ASSEMBLER CLOCK_LCD1 08/17/2006 16:39:47 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN clock_lcd1.OBJ
ASSEMBLER INVOKED BY: D:\Keil\C51\BIN\A51.EXE clock_lcd1.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;/********************************************************************
2 ; * 主 頁 : HTTP://WWW.QLMCU.COM
3 ; *
4 ; * 程序功能 : 液晶顯示的秒表
5 ; *
6 ; * 應用軟件 : KEIL C
7 ; *
8 ; * 版 本 : KEIL 7.06
9 ; *
10 ; * 硬 件 : WS803、WS804、WS806、WS2511、WS2566、WS9600、WS9700
11 ; *
12 ; * 整理時間 : 2006-03-11
13 ; *
14 ; * 程序整理 : pingdan11
15 ; *
16 ; * 注:為了有更多實用的實驗程序供大家學習,部分程序參考網上的資源,
17 ; * 在此謝謝這些無私奉獻的朋友!!!
18 ; *
19 ; ********************************************************************/
20
21
22
23
24
25
26
27
000C 28 TLOW EQU 0CH ;定時器初值
00DC 29 THIGH EQU 0DCH
30
0030 31 HOUR EQU 30H
0031 32 MIN EQU 31H
0032 33 SEC EQU 32H
0033 34 SEC0 EQU 33H ;10ms計數值
0034 35 KEY_S EQU 34H ;為鍵當前的端口狀況
0035 36 KEY_V EQU 35H ;為鍵上次的端口狀況
0036 37 X EQU 36H ;LCD 地址變量
0037 38 KEY_C EQU 37H ;鍵計數單元
39
00A0 40 K1 EQU P2.0
00A1 41 K2 EQU P2.1
00A2 42 K3 EQU P2.2
00A3 43 K4 EQU P2.3
44
00B2 45 BEEP EQU P3.2
00A5 46 RS EQU P2.5 ;LCD控制端口定義
00A6 47 RW EQU P2.6
00A7 48 EN EQU P2.7
49
50 ;----------------------------------------------------
0000 51 ORG 0000H
0000 800B 52 JMP START
000B 53 ORG 0BH
000B 01CD 54 JMP T0_INT
55 ;----------------------------------------------------
000D 758160 56 START: MOV SP,#60H
0010 C2A7 57 CLR EN
0012 3159 58 CALL SET_LCD
A51 MACRO ASSEMBLER CLOCK_LCD1 08/17/2006 16:39:47 PAGE 2
0014 11AC 59 CALL INIT ;初始化變量
0016 753501 60 MOV KEY_V,#01H
0019 11C0 61 CALL INIT_TIMER ;初始化定時器
001B 5179 62 CALL MENU
001D 3124 63 LOOP: CALL CONV ;時間計數處理
001F 1132 64 CALL LOOP1
0021 117D 65 CALL SKEY ;判是否有鍵按下
0023 60F8 66 JZ LOOP ;無鍵按下轉LOOP
0025 3124 67 CALL CONV
0027 117D 68 CALL SKEY
0029 60F2 69 JZ LOOP
002B 853435 70 MOV KEY_V,KEY_S ;交換數據
002E 113A 71 CALL P_KEY
0030 80EB 72 JMP LOOP
73 ;-----------------------------------------------------
0032 20A304 74 LOOP1: JB K4,LOOP2 ;判清零鍵是否按下
0035 5111 75 CALL BZ
0037 80D4 76 JMP START
0039 22 77 LOOP2: RET
78 ;-----------------------------------------------------
003A 79 P_KEY: ;
003A E535 80 MOV A,KEY_V
003C 20E02F 81 JB ACC.0,P_KEY3
003F 0537 82 INC KEY_C
0041 E537 83 MOV A,KEY_C ;K3鍵是否第一次按下?
0043 B4010A 84 CJNE A,#01H,P_KEY1
0046 900235 85 MOV DPTR,#MADJ ;顯示執行信息
0049 7401 86 MOV A,#1 ;
004B 318E 87 CALL LCD_PRINT
004D D28C 88 SETB TR0 ;啟動中斷
004F 22 89 RET
0050 90 P_KEY1: ;K3鍵是否第二次按下?
0050 E537 91 MOV A,KEY_C
0052 B4020A 92 CJNE A,#02H,P_KEY2
0055 900246 93 MOV DPTR,#MADJ1 ;顯示執行信息
0058 7401 94 MOV A,#1
005A 318E 95 CALL LCD_PRINT
005C C28C 96 CLR TR0 ;停止中斷
005E 22 97 RET
005F 98 P_KEY2: ;K3鍵是否第三次按下?
005F E537 99 MOV A,KEY_C
0061 B4030A 100 CJNE A,#03H,P_KEY3
0064 900257 101 MOV DPTR,#MADJ2 ;顯示執行信息
0067 7401 102 MOV A,#1
0069 318E 103 CALL LCD_PRINT
006B D28C 104 SETB TR0 ;啟動中斷
006D 22 105 RET
006E 106 P_KEY3: ;K3鍵是否第四次按下?
006E E537 107 MOV A,KEY_C
0070 B40409 108 CJNE A,#04H,P_KEY4
0073 900268 109 MOV DPTR,#MADJ3 ;顯示執行信息
0076 7401 110 MOV A,#1
0078 318E 111 CALL LCD_PRINT
007A C28C 112 CLR TR0 ;啟動中斷
007C 22 113 P_KEY4: RET
114 ;-------------------------------------------------------
007D E4 115 SKEY: CLR A ;判是否有鍵按下子程序
007E F534 116 MOV KEY_S,A
0080 A2A2 117 MOV C,K3
0082 33 118 RLC A
0083 4234 119 ORL KEY_S,A
0085 E534 120 MOV A,KEY_S
0087 6535 121 XRL A,KEY_V ;有鍵按下,A 中內容不為零
0089 22 122 RET
123 ;--------------------------------------------------------
008A 20202020 124 LMESS1: DB " ",0 ;LCD 第一行顯示消息
A51 MACRO ASSEMBLER CLOCK_LCD1 08/17/2006 16:39:47 PAGE 3
008E 20202020
0092 20202020
0096 20202020
009A 00
009B 54494D45 125 LMESS2: DB "TIME ",0 ;LCD 第二行顯示消息
009F 20202020
00A3 20202020
00A7 20202020
00AB 00
126 ;--------------------------------------------------------
00AC E4 127 INIT: CLR A
00AD F537 128 MOV KEY_C,A ;初始化控制變量
00AF F533 129 MOV SEC0,A
00B1 F532 130 MOV SEC,A
00B3 F531 131 MOV MIN,A
00B5 F530 132 MOV HOUR,A
00B7 F534 133 MOV KEY_S,A
00B9 F535 134 MOV KEY_V,A
00BB D2B2 135 SETB BEEP
00BD C28C 136 CLR TR0
00BF 22 137 RET
138 ;------------------------------------------------------------
00C0 139 INIT_TIMER: ;初始化定時器接口
00C0 758901 140 MOV TMOD,#01H ;設置定時器0 工作模式為模式1
00C3 75A882 141 MOV IE, #82H ;啟用定時器0 中斷產生
00C6 758A0C 142 MOV TL0,#TLOW
00C9 758CDC 143 MOV TH0,#THIGH
00CC 22 144 RET
145 ;-------------------------------------------------------------
00CD 146 T0_INT:
00CD C0E0 147 PUSH ACC ;定時器0計時中斷程序
00CF 758A0C 148 MOV TL0,#TLOW
00D2 758CDC 149 MOV TH0,#THIGH
00D5 0533 150 INC SEC0
00D7 E533 151 MOV A,SEC0 ;10ms 計數值加1
00D9 B4642A 152 CJNE A,#100,TT
00DC 753300 153 MOV SEC0,#0
00DF 0532 154 INC SEC ;秒加1
00E1 E532 155 MOV A,SEC
00E3 B43C20 156 CJNE A,#60,TT
00E6 0531 157 INC MIN ;分加1
00E8 753200 158 MOV SEC,#0
00EB E531 159 MOV A,MIN
00ED B43C16 160 CJNE A,#60,TT
00F0 0530 161 INC HOUR ;時加1
00F2 753100 162 MOV MIN,#0
00F5 E530 163 MOV A,HOUR
00F7 B4180C 164 CJNE A,#24,TT
00FA 753300 165 MOV SEC0,#0
00FD 753200 166 MOV SEC,#0 ;秒、分、時單元清0
0100 753100 167 MOV MIN,#0
0103 753000 168 MOV HOUR,#0
0106 D0E0 169 TT: POP ACC
0108 32 170 RETI
171 ;-------------------------------------------------------
172 ; 在第二行顯示數字
173 ;-------------------------------------------------------
0109 174 SHOW_DIG2: ;在 LCD 的第二行顯示數字
0109 75F00A 175 MOV B,#10 ;設置被除數
010C 84 176 DIV AB ;結果A存商數,B存余數
010D 2430 177 ADD A,#30H ;A為十位數,轉換為字符
010F C0F0 178 PUSH B ;B放入堆棧暫存
0111 8536F0 179 MOV B,X ;設置 LCD 顯示的位置
0114 31F0 180 CALL LCDP2 ;由 LCD 顯示出來
0116 D0F0 181 POP B ;
0118 E5F0 182 MOV A,B ;B為個位數
A51 MACRO ASSEMBLER CLOCK_LCD1 08/17/2006 16:39:47 PAGE 4
011A 2430 183 ADD A,#30H ;轉換為字符
011C 0536 184 INC X ;LCD 顯示位置加1
011E 8536F0 185 MOV B,X ;設置 LCD 顯示的位置
0121 31F0 186 CALL LCDP2 ;由 LCD 顯示出來
0123 22 187 RET
188 ;-------------------------------------------
189 ;轉換為 ASCII 碼并顯示
190 ;-------------------------------------------
0124 191 CONV:
0124 E530 192 MOV A,HOUR ;加載小時數據
0126 753605 193 MOV X,#5 ;設置位置
0129 3109 194 CALL SHOW_DIG2 ;顯示數據
012B 0536 195 INC X ;
012D 743A 196 MOV A,#':' ;
012F 8536F0 197 MOV B,X ;
0132 31F0 198 CALL LCDP2 ;
0134 E531 199 MOV A,MIN ;加載分鐘數據
0136 0536 200 INC X ;設置位置
0138 3109 201 CALL SHOW_DIG2 ;顯示數據
013A 0536 202 INC X ;
013C 743A 203 MOV A,#':' ;
013E 8536F0 204 MOV B,X ;
0141 31F0 205 CALL LCDP2 ;
0143 E532 206 MOV A,SEC ;加載秒數數據
0145 0536 207 INC X ;設置位置
0147 3109 208 CALL SHOW_DIG2 ;顯示數據
0149 0536 209 INC X ;
014B 743A 210 MOV A,#':' ;
014D 8536F0 211 MOV B,X ;
0150 31F0 212 CALL LCDP2 ;
0152 E533 213 MOV A,SEC0 ;加載秒數數據
0154 0536 214 INC X ;設置位置
0156 3109 215 CALL SHOW_DIG2
0158 22 216 RET
217 ;---------------------------------------------------------
218 ; LCD CONTROL
219 ;---------------------------------------------------------
0159 220 SET_LCD: ;對 LCD 做初始化設置及測試
0159 C2A7 221 CLR EN
015B 31CC 222 CALL INIT_LCD ;初始化 LCD
015D 7D0A 223 MOV R5,#10
015F 31FD 224 CALL DELAY
0161 90008A 225 MOV DPTR,#LMESS1 ;指針指到顯示消息1
0164 7401 226 MOV A,#1 ;顯示在第一行
0166 318E 227 CALL LCD_PRINT
0168 90009B 228 MOV DPTR,#LMESS2 ;指針指到顯示消息2
016B 7402 229 MOV A,#2 ;顯示在第二行
016D 318E 230 CALL LCD_PRINT
016F 22 231 RET
232 ;----------------------------------------------------------
0170 233 INIT_LCD1: ;LCD 控制指令初始化
0170 7438 234 MOV A,#38H ;雙列顯示,字形5*7點陣
0172 31E4 235 CALL WCOM ;
0174 5108 236 call delay1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -