📄 timer.lst
字号:
199 017D 759030 WAIT2: MOV DATE1,#30H
200 0180 759130 MOV DATE2,#30H
201 0183 759487 MOV DATE3,#87H
202 0186 5153 ACALL Display_Time1
203 0188 5196 ACALL DELAY
204 018A 20B1F0 JB P3.1,WAIT2 ;P3.1=0则执行以下程序
205 018D 5196 KEY2: ACALL DELAY
206 018F D2B1 SETB P3.1
207 0191 30B1F9 JNB P3.1,KEY2 ;键是否释放
208 0194 E591 LOOP1: MOV A,DATE2
209 0196 B43911 CJNE A,#39H,NO9
210 0199 759130 MOV DATE2,#30H
211 019C E590 MOV A,DATE1
212 019E B43505 CJNE A,#35H,NO5
213 01A1 759030 MOV DATE1,#30H
214 01A4 1590 DEC DATE1
215 01A6 0590 NO5: INC DATE1
216 01A8 1591 DEC DATE2
217 01AA 0591 NO9: INC DATE2
218 01AC 5196 ACALL DELAY
219 01AE WAIT3:
220 01AE 759487 MOV DATE3,#87H
221 01B1 5153 ACALL Display_Time1
222 01B3 5196 ACALL DELAY
223 01B5 30B00E JNB P3.0,JUMP
224 01B8 5196 ACALL DELAY
225 01BA 20B1F1 JB P3.1,WAIT3
226 01BD 5196 KEY22: ACALL DELAY
227 01BF D2B1 SETB P3.1
228 01C1 30B1F9 JNB P3.1,KEY22
8051 Assembler Version 1.00 04/15/107 21:49:41 Page 5
G:\sheji2\1\timer.asm
229 01C4 2194 AJMP LOOP1
230 01C6 00 JUMP: NOP
231 01C7 5196 KEY1_T: ACALL DELAY
232 01C9 D2B0 SETB P3.0
233 01CB 30B0F9 JNB P3.0,KEY1_T
234 01CE 22 RET
235 01CF
236 01CF Adjust_Hour:
237 01CF 759030 WAIT4: MOV DATE1,#30H
238 01D2 759130 MOV DATE2,#30H
239 01D5 759484 MOV DATE3,#84H
240 01D8 5153 ACALL Display_Time1
241 01DA 5196 ACALL DELAY
242 01DC 20B1F0 JB P3.1,WAIT4 ;P3.1=0则执行以下程序
243 01DF 5196 KEY222: ACALL DELAY
244 01E1 D2B1 SETB P3.1
245 01E3 30B1F9 JNB P3.1,KEY222 ;键是否释放
246 01E6
247 01E6 E590 LOOP2: MOV A,DATE1
248 01E8 B43211 CJNE A,#32H,NO2
249 01EB E591 MOV A,DATE2
250 01ED B43308 CJNE A,#33H,NO3
251 01F0 759030 MOV DATE1,#30H
252 01F3 759130 MOV DATE2,#30H
253 01F6 1591 DEC DATE2
254 01F8 0591 NO3: INC DATE2
255 01FA 410A AJMP Equal_2
256 01FC
257 01FC E591 NO2: MOV A,DATE2
258 01FE B43907 CJNE A,#39H,NO99
259 0201 759130 MOV DATE2,#30H
260 0204 0590 INC DATE1
261 0206 1591 DEC DATE2
262 0208 0591 NO99: INC DATE2
263 020A Equal_2:
264 020A 5196 ACALL DELAY
265 020C 759484 WAIT5: MOV DATE3,#84H
266 020F 5153 ACALL Display_Time1
267 0211 5196 ACALL DELAY
268 0213 30B00E JNB P3.0,JUMP1
269 0216 5196 ACALL DELAY
270 0218 20B1F1 JB P3.1,WAIT5
271 021B 5196 KEY2222: ACALL DELAY
272 021D D2B1 SETB P3.1
273 021F 30B1F9 JNB P3.1,KEY2222
274 0222 21E6 AJMP LOOP2
275 0224 JUMP1:
276 0224 5196 KEY1_Fo: ACALL DELAY
277 0226 D2B0 SETB P3.0
278 0228 30B0F9 JNB P3.0,KEY1_Fo
279 022B 22 RET
280 022C
281 022C
282 022C ;显示字符:程序
283 022C 7B89 Display_Spot: MOV R3,#89H
284 022E 5176 ACALL WRLCD
285 0230 75923A MOV DATE,#3AH
8051 Assembler Version 1.00 04/15/107 21:49:41 Page 6
G:\sheji2\1\timer.asm
286 0233 519F ACALL WRDATE
287 0235 7B86 MOV R3,#86H
288 0237 5176 ACALL WRLCD
289 0239 75923A MOV DATE,#3AH
290 023C 519F ACALL WRDATE
291 023E 22 RET
292 023F
293 023F ;显示秒分时程序
294 023F 7159 Display_Time: ACALL Deal_SMH
295 0241 AB94 MOV R3,DATE3
296 0243 5176 ACALL WRLCD
297 0245 859092 MOV DATE,DATE1
298 0248 519F ACALL WRDATE
299 024A 0B INC R3
300 024B 5176 ACALL WRLCD
301 024D 859192 MOV DATE,DATE2
302 0250 519F ACALL WRDATE
303 0252 22 RET
304 0253 ;按下KEY后显示等待程序
305 0253 AB94 Display_Time1: MOV R3,DATE3
306 0255 5176 ACALL WRLCD
307 0257 859092 MOV DATE,DATE1
308 025A 519F ACALL WRDATE
309 025C 0B INC R3
310 025D 5176 ACALL WRLCD
311 025F 859192 MOV DATE,DATE2
312 0262 519F ACALL WRDATE
313 0264 22 RET
314 0265
315 0265
316 0265 ;the programme of the initialization of lcd016l(load the command code to R3)
317 0265 7B01 LCDINT: MOV R3,#01H ;清屏
318 0267 5176 ACALL WRLCD ;写入指令
319 0269 7B3C MOV R3,#3CH ;功能设定:8位字符,2行,5X10点阵
320 026B 5176 ACALL WRLCD
321 026D 7B06 MOV R3,#06H ;I/D=1,AC自动+1,S=0整体显示不移动
322 026F 5176 ACALL WRLCD
323 0271 7B0C MOV R3,#0CH ;D=1开显示,C=0关光标,B=0字符不闪耀
324 0273 5176 ACALL WRLCD
325 0275 22 RET
326 0276
327 0276 ;写命令子程序,R3中存放要写入的命令
328 0276 5186 WRLCD: ACALL BUSY
329 0278 EB MOV A,R3
330 0279 C2A0 CLR RS
331 027B C2A1 CLR RW
332 027D F580 MOV P0,A
333 027F C2A2 CLR E
334 0281 5196 ACALL DELAY
335 0283 D2A2 SETB E
336 0285 22 RET
337 0286
338 0286 ;查询“忙碌”(BF)子程序
339 0286 C2A0 BUSY: CLR RS
340 0288 D2A1 SETB RW
341 028A E580 MOV A,P0
342 028C C2A2 CLR E
8051 Assembler Version 1.00 04/15/107 21:49:41 Page 7
G:\sheji2\1\timer.asm
343 028E 5196 ACALL DELAY
344 0290 D2A2 SETB E
345 0292 20E7F1 JB ACC.7,BUSY ;F=1忙碌
346 0295 22 RET
347 0296
348 0296 ;延时子程序
349 0296 7E05 DELAY: MOV R6,#5
350 0298 7D19 D1: MOV R5,#25
351 029A DDFE DJNZ R5,$
352 029C DEFA DJNZ R6,D1
353 029E 22 RET
354 029F
355 029F ;写一位字符数据子程序,DATE中存放要写入的数据
356 029F 5186 WRDATE: ACALL BUSY
357 02A1 D2A0 SETB RS ;RS=1,RW=0,可以显示各字符
358 02A3 C2A1 CLR RW
359 02A5 859280 MOV P0,DATE
360 02A8 C2A2 CLR E ;读写使能(下降沿使能)
361 02AA 5196 ACALL DELAY ;让一个字节的数据顺利写入LCD
362 02AC D2A2 SETB E
363 02AE 22 RET
364 02AF ;时钟允许运行程序
365 02AF 753280 Clock_Enable: MOV COMMAND,#80H;命令字节为80H
366 02B2 753101 MOV BYTECNT,#1 ;单字节传送模式
367 02B5 755000 MOV SENDATA,#00H;数据内容为0,振荡器工作允许,时钟运行开始
368 02B8 7120 ACALL Send_Data ;调用写入DS1302数据程序
369 02BA 22 RET
370 02BB ;时钟停止程序
371 02BB 753280 Clock_Unable: MOV COMMAND,#80H
372 02BE 753101 MOV BYTECNT,#1
373 02C1 755080 MOV SENDATA,#80H
374 02C4 7120 ACALL Send_Data
375 02C6 22 RET
376 02C7
377 02C7
378 02C7 ;从DS1302的秒,分,时register 中读出数据程序(采用单字节模式)
379 02C7 753281 Read_Sec: MOV COMMAND,#81H ;命令字节为81H
380 02CA 753101 MOV BYTECNT,#1 ;单字节读出模式
381 02CD 713C ACALL Rec_Data ;调用读出DS1302数据程序
382 02CF 22 RET
383 02D0 753283 Read_Min: MOV COMMAND,#83H
384 02D3 753101 MOV BYTECNT,#1
385 02D6 713C ACALL Rec_Data
386 02D8 22 RET
387 02D9 753285 Read_Hour: MOV COMMAND,#85H
388 02DC 753101 MOV BYTECNT,#1
389 02DF 713C ACALL Rec_Data
390 02E1 22 RET
391 02E2
392 02E2 ;将分,时数据写入DS1302相应register程序
393 02E2 753282 Send_Min: MOV COMMAND,#82H
394 02E5 753101 MOV BYTECNT,#1
395 02E8 F550 MOV SENDATA,A
396 02EA 7120 ACALL Send_Data
397 02EC 22 RET
398 02ED 753284 Send_Hour: MOV COMMAND,#84H
399 02F0 753101 MOV BYTECNT,#1
8051 Assembler Version 1.00 04/15/107 21:49:41 Page 8
G:\sheji2\1\timer.asm
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -