main.lst

来自「51单片机项目集」· LST 代码 · 共 586 行 · 第 1/2 页

LST
586
字号
 273          void GUI_Init()
 274          {
 275   1          uint i,j;
 276   1          ////////进入界面///////////
 277   1          LCD12864_init();
 278   1          ClearLCD();
 279   1          LCD_ShowTemp();     //在显示图片之前启动温度转换
 280   1          img12864_disp(uBmp);   //显示图片
 281   1          
 282   1          for(i=0;i<10;i++)
 283   1          for(j=0;j<32767;j++);
 284   1                               
 285   1          ClearLCD();
 286   1      
 287   1          /////////描绘框架//////////
 288   1          Rect(0,0,127,63,1);
 289   1          Line(62,0,62,62,1);
 290   1          Line(0,48,127,48,1);
 291   1          Line(0,15,127,15,1);
 292   1          Line(24,15,24,48,1);
 293   1      
 294   1          Line(63,32,128,32,1);
 295   1          Line(97,0,97,15,1);
 296   1          //Line(24,15,24,48,1);
 297   1      
 298   1          ////////时间初始化//////////
 299   1          SetTime(sys);             //设置时间
C51 COMPILER V8.02   MAIN                                                                  11/03/2010 22:45:22 PAGE 6   

 300   1          GetTime(&sys);               //获得时间
 301   1          
 302   1          Show_YMD();
 303   1      
 304   1          LCD_ShowTime(sys.cSec,6,111,Sec_Flag,UpLine,UnderLine);
 305   1          en_disp(6,103,1,Asc,":",1,UpLine,UnderLine);
 306   1          LCD_ShowTime(sys.cMin,6,87,Min_Flag,UpLine,UnderLine); 
 307   1          en_disp(6,79,1,Asc,":",1,UpLine,UnderLine);  
 308   1           LCD_ShowTime(sys.cHour,6,63,Hour_Flag,UpLine,UnderLine);
 309   1      
 310   1          hz_disp(2,64,1,ucLunar[11],1,NoUpLine,NoUnderLine);     //"农"
 311   1          hz_disp(2,80,1,ucLunar[12],1,NoUpLine,NoUnderLine);     //"历"
 312   1          hz_disp(4,79,1,uMod[1],1,UpLine,NoUnderLine);           //"月"
 313   1          ////////显示初始化温度//////
 314   1          en_disp(0,65,2,Asc,dispBuf,1,UpLine,UnderLine); 
 315   1          hz_disp(0,81,1,ucLunar[18],1,UpLine,UnderLine); 
 316   1      }
 317          
 318          
 319          /***********************************************************
 320          // 函数名:      DecToBCD()
 321          // 入口参数:    void 
 322          // 出口参数:  void 
 323          // 功能:        把时间由10进制转为BCD
 324          // 说明:        DS1302以BCD存储
 325          
 326          ***********************************************************/
 327          void DecToBCD()
 328          {
 329   1         sys.cHour=(((sys.cHour)/10)<<4)+((sys.cHour)%10);
 330   1         sys.cMin=(((sys.cMin)/10)<<4)+((sys.cMin)%10);
 331   1         sys.cSec=((sys.cSec/10)<<4)+((sys.cSec)%10);
 332   1         sys.cYear=((sys.cYear/10)<<4)+((sys.cYear)%10);
 333   1         sys.cMon=((sys.cMon/10)<<4)+((sys.cMon)%10);
 334   1         sys.cDay=((sys.cDay/10)<<4)+((sys.cDay)%10);
 335   1      }
 336          
 337          /***********************************************************
 338          // 函数名:      Time_Set()
 339          // 入口参数:    void 
 340          // 出口参数:  void 
 341          // 功能:        时间设置
 342          // 说明:        具体的时间设置
 343          
 344          ***********************************************************/
 345          void Time_Set()
 346          {
 347   1            
 348   1         if(State_Flag)             //设置键按下
 349   1         {
 350   2            State_Flag=FALSE;
 351   2            State_Set++;
 352   2            //State_Set%=7;
 353   2            if(State_Set==8) State_Set=0;
 354   2         }
 355   1      
 356   1         Hour_Flag=TRUE;Min_Flag=TRUE;Sec_Flag=TRUE;
 357   1          Year_Flag=TRUE;Mon_Flag=TRUE;Day_Flag=TRUE;
 358   1      
 359   1         switch(State_Set)               //设置类型
 360   1         {
 361   2               case 0:                 //无设置
C51 COMPILER V8.02   MAIN                                                                  11/03/2010 22:45:22 PAGE 7   

 362   2               
 363   2               break;
 364   2                
 365   2               case 1:              //设置时
 366   2               Hour_Flag=FALSE;
 367   2               break;
 368   2      
 369   2               case 2:                 //设置分
 370   2               Min_Flag=FALSE;
 371   2               break;
 372   2         
 373   2         
 374   2               case 3:               //设置秒
 375   2               Sec_Flag=FALSE;
 376   2               break;
 377   2         
 378   2               case 4:               //设置天
 379   2                Day_Flag=FALSE;
 380   2               break;
 381   2         
 382   2               case 5:
 383   2                Mon_Flag=FALSE;         //设置月
 384   2               break;
 385   2         
 386   2               case 6:
 387   2                Year_Flag=FALSE;     //设置年
 388   2                break;
 389   2      
 390   2               case 7:               //无动作,设置此值为让"年"的反白消失。
 391   2      
 392   2               break;
 393   2           }      
 394   1           
 395   1         if(Inc_Flag)                 //加键被按下
 396   1         {   
 397   2            Inc_Flag=FALSE;
 398   2            switch(State_Set)
 399   2            {
 400   3               case 0:
 401   3               
 402   3               break;
 403   3         
 404   3               case 1:                  //小时加
 405   3               sys.cHour++;
 406   3               (sys.cHour)%=24;
 407   3               break;
 408   3         
 409   3               case 2:                  //分加
 410   3               sys.cMin++;
 411   3               sys.cMin%=60;
 412   3               break;
 413   3         
 414   3               case 3:               //秒加
 415   3                sys.cSec++;
 416   3               sys.cSec%=60;
 417   3               break;
 418   3         
 419   3               case 4:               //天加
 420   3               (sys.cDay)=(sys.cDay%Mon2[YearFlag(sys.cYear)][sys.cMon])+1;         
 421   3               break;
 422   3         
 423   3               case 5:               //月加
C51 COMPILER V8.02   MAIN                                                                  11/03/2010 22:45:22 PAGE 8   

 424   3               sys.cMon=(sys.cMon%12)+1;
 425   3               break;
 426   3         
 427   3               case 6:
 428   3               sys.cYear++;          //年加
 429   3               sys.cYear=sys.cYear%100;
 430   3               break;
 431   3              }   
 432   2            sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);    //算出星期
 433   2            DecToBCD();       //转为BCD
 434   2            SetTime(sys);      //存入DS1302
 435   2         }
 436   1      
 437   1         if(Dec_Flag)                //减键按下
 438   1         {   
 439   2            Dec_Flag=FALSE;
 440   2            switch(State_Set)
 441   2            {
 442   3               case 0:
 443   3               
 444   3               break;
 445   3         
 446   3               case 1:     
 447   3               sys.cHour=(sys.cHour+23)%24;           //时减
 448   3               break;
 449   3         
 450   3               case 2:                           //分减
 451   3               sys.cMin=(sys.cMin+59)%60;
 452   3               break;
 453   3         
 454   3               case 3:                          //秒减
 455   3               sys.cSec=(sys.cSec+59)%60;
 456   3               break;
 457   3         
 458   3               case 4:                          //天减
 459   3               sys.cDay=((sys.cDay+Mon2[YearFlag(sys.cYear)][sys.cMon]-1)%Mon2[YearFlag(sys.cYear)][sys.cMon]);         
 460   3               if(sys.cDay==0) sys.cDay=Mon2[YearFlag(sys.cYear)][sys.cMon];
 461   3               break;
 462   3         
 463   3               case 5:                          //月减
 464   3               sys.cMon=(sys.cMon+11)%12;
 465   3               if(sys.cMon==0) sys.cMon=12;
 466   3               break;
 467   3         
 468   3               case 6:                          //年减
 469   3               sys.cYear=(sys.cYear+99)%100;
 470   3               break;
 471   3              }   
 472   2            sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);        
 473   2            DecToBCD();
 474   2            SetTime(sys);  
 475   2         }
 476   1      
 477   1      
 478   1      
 479   1      }
 480          void  main()
 481          {
 482   1          SFR_Init();
 483   1          CAL_Init();
 484   1          GUI_Init();
 485   1          TR0=1;
C51 COMPILER V8.02   MAIN                                                                  11/03/2010 22:45:22 PAGE 9   

 486   1          TR1=1;
 487   1          while(1)    
 488   1          {
 489   2            GetTime(&sys);    //获得时间
 490   2            LCD_ShowTemp();      //显示温度
 491   2            LCD_ShowWNL();    //显示万年历
 492   2            Time_Set();         //时间设置
 493   2          } 
 494   1      }
 495          
 496          void timer0() interrupt  1     //控制温度采集
 497          {
 498   1         TH0= (-50000)/256;
 499   1         TL0= (-50000)%256;
 500   1         T0_Count++;
 501   1         if(T0_Count==20)
 502   1         {  
 503   2            Tmp_Count++;
 504   2            T0_Count=0;
 505   2         }
 506   1      
 507   1         if(Tmp_Count==33)
 508   1         {
 509   2            Tmp_Count=0;
 510   2            Tmp_Flag=TRUE;
 511   2         }
 512   1      }
 513          
 514          
 515          void timer1() interrupt  3     //按键扫描
 516          {
 517   1         TH1= (-10000)/256;
 518   1         TL1= (-10000)%256;
 519   1         keyinput();                // 设置
 520   1         if (keyvalue&0x10)
 521   1         {  
 522   2            State_Flag=TRUE;
 523   2            keyvalue &= 0xef;    //清键值,保证一直按下只执行一次按键动作。
 524   2         }  
 525   1      //精度键检测  //080616
 526   1         
 527   1         if (keyvalue&0x20 )           //加
 528   1         {  
 529   2            Inc_Flag=TRUE;
 530   2            keyvalue &= 0xdf;    //清键值,保证一直按下只执行一次按键动作。
 531   2         }  
 532   1         
 533   1      //蜂鸣器键检测  //080616
 534   1         if (keyvalue&0x40)            //减
 535   1         {  
 536   2            Dec_Flag=TRUE;
 537   2            keyvalue &= 0xbf;    //清键值,保证一直按下只执行一次按键动作。
 538   2         }
 539   1         
 540   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   5280    ----
   CONSTANT SIZE    =   4276    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V8.02   MAIN                                                                  11/03/2010 22:45:22 PAGE 10  

   DATA SIZE        =     30      46
   IDATA SIZE       =   ----    ----
   BIT SIZE         =     12      14
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  4 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?