📄 main.lst
字号:
262 4 break;
263 4 case 6: write_1602com(yh+0x08);//yue
264 4 //write_1602com(0x0f);
265 4 break;
266 4 case 7: write_1602com(yh+0x05);//nian
267 4 //write_1602com(0x0f);
268 4 break;
269 4 case 8:
270 4 write_1602com(0x0c);//设置光标不闪烁
271 4 TR0=1;//打开定时器
272 4 temp=(miao)/10*16+(miao)%10;
273 4 write_1302(0x8e,0x00);
274 4 write_1302(0x80,0x00|temp);//miao
275 4 write_1302(0x8e,0x80);
276 4 break;
277 4
278 4
279 4
280 4
281 4 }
282 3
283 3
284 3
285 3 }
286 2
287 2 }
288 1 if(key1n!=0)//当key1按下以下。再按以下键才有效
289 1 {
290 2
291 2 if(key2==0) //上调键
292 2 {
293 3 delay(5);
294 3 if(key2==0)
295 3 {
296 4 while(!key2);
297 4 switch(key1n)
298 4 {
299 5 case 1:miao++;
300 5 if(miao==60)
301 5 miao=0;
302 5 write_sfm(0x0a,miao);//写入新的秒数
303 5 temp=(miao)/10*16+(miao)%10;
C51 COMPILER V8.06 MAIN 12/02/2011 18:40:18 PAGE 6
304 5 write_1302(0x8e,0x00);
305 5 write_1302(0x80,0x80|temp);
306 5 write_1302(0x8e,0x80);
307 5 write_1602com(er+0x0b);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置
308 5 //write_1602com(0x0b);
309 5 break;
310 5 case 2:fen++;
311 5 if(fen==60)
312 5 fen=0;
313 5 write_sfm(0x07,fen);
314 5 temp=(fen)/10*16+(fen)%10;
315 5 write_1302(0x8e,0x00);
316 5 write_1302(0x82,temp);
317 5 write_1302(0x8e,0x80);
318 5 write_1602com(er+8);
319 5 break;
320 5 case 3:shi++;
321 5 if(shi==24)
322 5 shi=0;
323 5 write_sfm(4,shi);
324 5 temp=(shi)/10*16+(shi)%10;
325 5 write_1302(0x8e,0x00);
326 5 write_1302(0x84,temp);
327 5 write_1302(0x8e,0x80);
328 5 write_1602com(er+5);
329 5 break;
330 5 case 4:week++;
331 5 if(week==8)
332 5 week=0;
333 5 write_week(week);
334 5
335 5 write_1602com(yh+0x0f);
336 5 break;
337 5 case 5:ri++;
338 5 if(ri==31)
339 5 ri=0;
340 5 write_nyr(10,ri);
341 5 temp=(ri)/10*16+(ri)%10;
342 5 write_1302(0x8e,0x00);
343 5 write_1302(0x86,temp);
344 5 write_1302(0x8e,0x80);
345 5 write_1602com(yh+11);
346 5 break;
347 5 case 6:yue++;
348 5 if(yue==13)
349 5 yue=0;
350 5 write_nyr(7,yue);
351 5 temp=(yue)/10*16+(yue)%10;
352 5 write_1302(0x8e,0x00);
353 5 write_1302(0x88,temp);
354 5 write_1302(0x8e,0x80);
355 5 write_1602com(yh+8);
356 5 break;
357 5 case 7:nian++;
358 5 if(nian==100)
359 5 nian=0;
360 5 write_nyr(4,nian);
361 5 write_1602com(yh+5);
362 5 break;
363 5
364 5
365 5 }
C51 COMPILER V8.06 MAIN 12/02/2011 18:40:18 PAGE 7
366 4
367 4 }
368 3
369 3 }
370 2 if(key3==0)
371 2 {
372 3 delay(5);
373 3 if(key3==0)
374 3 {
375 4 while(!key3);
376 4 switch(key1n)
377 4 {
378 5 case 1:miao--;
379 5 if(miao==-1)
380 5 miao=59;
381 5 write_sfm(0x0a,miao);//写入新的秒数
382 5 write_1602com(er+0x0b);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置
383 5 //write_1602com(0x0b);
384 5 break;
385 5 case 2:fen--;
386 5 if(fen==-1)
387 5 fen=59;
388 5 write_sfm(7,fen);
389 5 temp=(fen)/10*16+(fen)%10;
390 5 write_1302(0x8e,0x00);
391 5 write_1302(0x82,temp);
392 5 write_1302(0x8e,0x80);
393 5 write_1602com(er+8);
394 5 break;
395 5
396 5 case 3:shi--;
397 5 if(shi==-1)
398 5 shi=23;
399 5 write_sfm(4,shi);
400 5 temp=(shi)/10*16+(shi)%10;
401 5 write_1302(0x8e,0x00);
402 5 write_1302(0x84,temp);
403 5 write_1302(0x8e,0x80);
404 5 write_1602com(er+5);
405 5 break;
406 5 case 4:week--;
407 5 if(week==-1)
408 5 week=7;
409 5 write_week(week);
410 5 write_1602com(yh+0x0f);
411 5 break;
412 5 case 5:ri--;
413 5 if(ri==-1)
414 5 ri=30;
415 5 write_nyr(10,ri);
416 5 temp=(ri)/10*16+(ri)%10;
417 5 write_1302(0x8e,0x00);
418 5 write_1302(0x86,temp);
419 5 write_1302(0x8e,0x80);
420 5 write_1602com(yh+11);
421 5 break;
422 5 case 6:yue--;
423 5 if(yue==-1)
424 5 yue=12;
425 5 write_nyr(7,yue);
426 5 temp=(yue)/10*16+(yue)%10;
427 5 write_1302(0x8e,0x00);
C51 COMPILER V8.06 MAIN 12/02/2011 18:40:18 PAGE 8
428 5 write_1302(0x88,temp);
429 5 write_1302(0x8e,0x80);
430 5 write_1602com(yh+8);
431 5 break;
432 5 case 7:nian--;
433 5 if(nian==-1)
434 5 nian=99;
435 5 write_nyr(4,nian);
436 5 write_1602com(yh+5);
437 5 break;
438 5
439 5
440 5 }
441 4
442 4 }
443 3
444 3 }
445 2
446 2 }
447 1
448 1
449 1
450 1 }
451 void init()
452 {
453 1 TMOD=0x11;
454 1 TH0=0;
455 1 TL0=0;
456 1 EA=1;
457 1 ET0=1;
458 1 TR0=1;
459 1
460 1
461 1
462 1 }
463
464 void cmg(void)//数码管锁存函数
465 {
466 1 dula=1;
467 1 P0=0x00;
468 1 dula=0;
469 1 wela=1;
470 1 P0=0x00;
471 1 wela=0;
472 1 }
473 void main()
474 {
475 1
476 1 cmg();//数码管锁存
477 1 lcd_init();
478 1 ds1302_init();
479 1 init();
480 1 while(1)
481 1 {
482 2 //TH0=(65536-60000)/256;
483 2 //TL0=(65536-60000)%256;
484 2
485 2
486 2
487 2 keyscan();
488 2
489 2
C51 COMPILER V8.06 MAIN 12/02/2011 18:40:18 PAGE 9
490 2 }
491 1 }
492 void timer0() interrupt 1
493 {
494 1 miao = BCD_Decimal(read_1302(0x81));
495 1 fen = BCD_Decimal(read_1302(0x83));
496 1 shi = BCD_Decimal(read_1302(0x85));
497 1 ri = BCD_Decimal(read_1302(0x87));
498 1 yue = BCD_Decimal(read_1302(0x89));
499 1 nian=BCD_Decimal(read_1302(0x8d));
500 1 week=BCD_Decimal(read_1302(0x8b));
501 1 //keyscan();
502 1 write_sfm(10,miao);
503 1 //write_1602com(er+0x0a);
504 1 //write_1602dat(':');
505 1 write_sfm(7,fen);
506 1 //write_1602com(er+0x07);
507 1 //write_1602dat(':');
508 1 write_sfm(4,shi);
509 1
510 1 //write_nyr(4,nian);
511 1 write_nyr(10,ri);
512 1 write_nyr(7,yue);
513 1 //write_week(week);
514 1 }
515
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1491 ----
CONSTANT SIZE = 24 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -