液晶显示电子时钟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 + -
显示快捷键?