液晶显示电子时钟1.lst
来自「一个使用单片机设计的简单电子钟显示,使用C写的,可用于课程设计」· LST 代码 · 共 592 行 · 第 1/2 页
LST
592 行
280 1 DisplayListChar(0,1,str2);
281 1
282 1 DisplayOneChar(10,1,sminite/10+0x30);
283 1 DisplayOneChar(11,1,sminite%10+0x30);
284 1
285 1 DisplayOneChar(13,1,second/10+0x30);
286 1 DisplayOneChar(14,1,second%10+0x30);
287 1
288 1 WriteCommandLCM(0x0f,1); //显示屏打开,光标显示,闪烁,检测忙信号
289 1 DisplayOneChar(7,1,shour/10+0x30);
290 1 DisplayOneChar(8,1,shour%10+0x30);
291 1 }
292
293
294
295 /**************键盘扫描子函数******************/
296
297 void keyscan(void)
298 {
299 1 uchar temp; //局部变量
300 1 P1=0xff;
301 1 p1_6=0;
302 1 //unsigned char temp;
303 1 temp=P1;
C51 COMPILER V7.20 液___允_电子时钟1 10/09/2008 18:51:13 PAGE 6
304 1 temp&=0x0F;
305 1 if(temp!=0x0F)
306 1 {
307 2 delay_LCM(150);
308 2 temp=P1;
309 2 temp&=0x0F;
310 2 if(temp!=0x0F)
311 2 {
312 3 temp=P1;
313 3 temp&=0x0F;
314 3 switch(temp) // 根据按键状态,调用不同的子函数
315 3 {
316 4 case 0x0E:inc_clock();
317 4 break;
318 4 case 0x0D:dec_clock();
319 4 break;
320 4 case 0x07:set_sure();
321 4 break;
322 4 default:
323 4 break;
324 4 }
325 3 }
326 2 }
327 1 P1=0xff;
328 1 p1_7=0;
329 1 //unsigned char temp;
330 1 temp=P1;
331 1 temp&=0x0F;
332 1 if(temp!=0x0F)
333 1 {
334 2 delay_LCM(150);
335 2 temp=P1;
336 2 temp&=0x0F;
337 2 if(temp!=0x0F)
338 2 {
339 3 temp=P1;
340 3 temp&=0x0F;
341 3 switch(temp) // 根据按键状态,调用不同的子函数
342 3 {
343 4 case 0x0E:set_adj();
344 4 break;
345 4 case 0x0D:inc_key();
346 4 break;
347 4 case 0x0B:dec_key();
348 4 break;
349 4 case 0x07:sounder=0;
350 4 default:
351 4 break;
352 4 }
353 3 }
354 2 }
355 1
356 1 }
357
358
359 /**************设定工作模式子函数****************/
360
361 void set_adj(void)
362 {
363 1 delay_LCM(100);
364 1 set++;
365 1 if(set>5)
C51 COMPILER V7.20 液___允_电子时钟1 10/09/2008 18:51:13 PAGE 7
366 1 set=0;
367 1 }
368
369 /*************确认键函数************************/
370 void set_sure(void)
371 {
372 1 delay_LCM(100);
373 1 set=0;
374 1 }
375
376 /****************按键加法子函数******************/
377
378 void inc_key(void)
379 {
380 1 delay_LCM(150);
381 1 if(set==1)
382 1 {
383 2 hour++;
384 2 if(hour>23)
385 2 hour=0;
386 2 }
387 1 else
388 1 if(set==2)
389 1 {
390 2 minite++;
391 2 if(minite>59)
392 2 minite=0;
393 2
394 2 }
395 1 else
396 1 displayfun1();
397 1 }
398
399 /****************按键减法子函数*****************/
400
401 void dec_key(void)
402 {
403 1 delay_LCM(150);
404 1 if(set==1)
405 1 {
406 2 hour--;
407 2 if(hour<=0)
408 2 hour=23;
409 2 }
410 1 else
411 1 if(set==2)
412 1 {
413 2 minite--;
414 2 if(minite<=0)
415 2 minite=59;
416 2 }
417 1 else
418 1 displayfun1();
419 1 }
420 /****************闹钟按键加法子函数******************/
421
422 void inc_clock(void)
423 {
424 1 delay_LCM(150);
425 1 if(set==5)
426 1 {
427 2 shour++;
C51 COMPILER V7.20 液___允_电子时钟1 10/09/2008 18:51:13 PAGE 8
428 2 if(shour>23)
429 2 shour=0;
430 2 }
431 1 else
432 1 if(set==4)
433 1 {
434 2 sminite++;
435 2 if(sminite>59)
436 2 sminite=0;
437 2
438 2 }
439 1 else
440 1 displayfun1();
441 1 }
442
443 /****************闹钟按键减法子函数*****************/
444
445 void dec_clock(void)
446 {
447 1 delay_LCM(150);
448 1 if(set==5)
449 1 {
450 2
451 2 if(shour<=0)
452 2 shour=23;
453 2 else shour--;
454 2 }
455 1 else
456 1 if(set==4)
457 1 {
458 2
459 2 if(sminite<=0)
460 2 sminite=59;
461 2 else sminite--;
462 2 }
463 1 else
464 1 displayfun1();
465 1 }
466
467 /***************定时器t0初始化*******************/
468
469 void init_timer0(void)
470 {
471 1 TMOD=0x01; //time0为定时器,方式1
472 1 TH0=0x3c; //预置计数初值
473 1 TL0=0xb0;
474 1 EA=1;
475 1 ET0=1;
476 1 TR0=1;
477 1 }
478
479 /***********定时器t0中断子函数**************/
480
481 void timer0(void) interrupt 1 using 0 //定时器0方式1,50ms中断一次
482 {
483 1 TH0=0x3c;
484 1 TL0=0xb0;
485 1 mstcnt++;
486 1 if(mstcnt>=20 )
487 1 {
488 2 second++;
489 2 mstcnt=0;
C51 COMPILER V7.20 液___允_电子时钟1 10/09/2008 18:51:13 PAGE 9
490 2 }
491 1 if(second>=60)
492 1 {
493 2 minite++;
494 2 second=0;
495 2 }
496 1 if(minite>=60)
497 1 {
498 2 hour++;
499 2 minite=0;
500 2 // light=0;
501 2 delay_LCM(200);
502 2 //light=1;
503 2 }
504 1 if(hour>=24)
505 1 {
506 2 hour=0;
507 2 }
508 1 keyscan( ); //按键扫描
509 1 }
510
511 /***********the main funtion*************/
512
513 void main(void)
514 {
515 1 //shour=12;
516 1 //sminite=0;
517 1 P1=0xff;
518 1 sounder=0; //初始化p1口,全设为1
519 1 delay_LCM(500); //延时500ms启动
520 1 initLCM( ); //LCD初始化
521 1 init_timer0( ); //时钟定时器0初始化
522 1 DisplayListChar(0,0,str0);
523 1 DisplayListChar(0,1,str1);
524 1
525 1 while (1)
526 1 {
527 2 keyscan(); //按键扫描
528 2 if(hour==shour&&minite==sminite&&second==0)
529 2 sounder=1;
530 2 switch(set) //LCD根据工作模式显示
531 2 {
532 3 case 0:displayfun1();delay_LCM(1000); //正常工作显示
533 3 break;
534 3 case 1:displayfun3();delay_LCM(1000); //调整分显示
535 3 break;
536 3 case 2:displayfun2();delay_LCM(1000); //调整时显示
537 3 break;
538 3 case 3:displayfun4();delay_LCM(1000); //正常显示闹钟时间
539 3 break;
540 3 case 4:displayfun5();delay_LCM(1000); //调整闹钟时显示
541 3 break;
542 3 case 5:displayfun6();delay_LCM(1000); //调整闹钟分显示
543 3 break;
544 3 default:
545 3 break;
546 3 }
547 2
548 2 }
549 1
550 1 }
C51 COMPILER V7.20 液___允_电子时钟1 10/09/2008 18:51:13 PAGE 10
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1516 ----
CONSTANT SIZE = 51 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 9
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?