⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 智能打铃系统(MCU)端程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 402   2                      if (0xff-key)
 403   2                      {
 404   3                              key_flag=1;
 405   3                              KeyT=0;
 406   3                      }
 407   2                              ReadTime();
 408   2                              LCD_write_string(0,0,str_date);
 409   2                              LCD_write_string(3,1,str_day);
 410   2                              LCD_write_string(2,2,str_time);
 411   2                      if(flag)
 412   2                      {
 413   3                              flag=0;
 414   3                              LCD_Convert(Pdat[P],Pdat[P+7],Pdat[P+14],1);
 415   3                      }
 416   2      
 417   2                      if      ((key==KEY_UP)&&(P>0))  
 418   2                      {
 419   3                              LCD_Convert(Pdat[P],Pdat[P+7],Pdat[P+14],0);
 420   3                              P--;
 421   3                              LCD_Convert(Pdat[P],Pdat[P+7],Pdat[P+14],1);
 422   3                      }
 423   2                      else if ((key==KEY_DOWN)&&(P<6))        
 424   2                      {
 425   3                              LCD_Convert(Pdat[P],Pdat[P+7],Pdat[P+14],0);
 426   3                              P++;
 427   3                              LCD_Convert(Pdat[P],Pdat[P+7],Pdat[P+14],1);
C51 COMPILER V7.06   MAIN                                                                  12/17/2006 14:56:13 PAGE 8   

 428   3                      }
 429   2                      else if (key<10)        
 430   2                      {
 431   3                              if(P==0)
 432   3                              {
 433   4                                      temp=DS1307_Read(Yearh);
 434   4                                      temp<<=4;
 435   4                                      temp2=DS1307_Read(Year);
 436   4                                      temp2>>=4;
 437   4                                      temp=temp|temp2;
 438   4                                      DS1307_Write(Yearh,temp);
 439   4                                      temp=DS1307_Read(Year);
 440   4                                      temp<<=4;
 441   4                                      temp+=key;
 442   4                                      DS1307_Write(Year,temp);
 443   4                                      flag=1;
 444   4                              }
 445   3                              else if(P==3)
 446   3                              {
 447   4                                      if (key>0&&key<8) DS1307_Write(Day,key);
 448   4                                      flag=1;
 449   4                              }
 450   3                              else 
 451   3                              {
 452   4                                      temp=DS1307_Read(6-P);
 453   4                                      temp<<=4;                               
 454   4                                      temp+=key;
 455   4                                      if (temp>Max[6-P]) temp &= 0x0f;
 456   4                                      if (temp==0&&P<3) temp+=1;
 457   4                                      DS1307_Write(6-P,temp);
 458   4                                      flag=1;
 459   4                              }
 460   3                      }
 461   2                      else if((key==KEY_ENT)||(key==KEY_ESC)) quit=0; 
 462   2      //              delay_ms(45);
 463   2              }
 464   1              Set_NextRT(1);
 465   1      }
 466          
 467          
 468          
 469          unsigned char menu(unsigned char MenuNum)                                                       //主菜单,返回所选择的菜单号
 470          {
 471   1              uchar i,rt;
 472   1              uchar quit;
 473   1              uchar   Line=1;
 474   1              LCD_write(0x01,COMM);           //清屏,字符缓冲区
 475   1              delay_ms(3);
 476   1              LCD_clr_pic();                                  //清屏,图形缓冲区
 477   1              
 478   1              for(i=0;i<MenuCount[MenuNum];i++)                                                       //显示菜单项
 479   1                      LCD_write_string(0,i,str_Menu[MenuNum][i]);
 480   1      
 481   1              quit=1;
 482   1              while (quit)
 483   1              {
 484   2                      LCD_Convert(0,Line,16,1);               //反白选中行            
 485   2                      
 486   2                      key=0xff;
 487   2                      while(key==0xff)        key=ScanKey();
 488   2      
 489   2                              key_flag=1;
C51 COMPILER V7.06   MAIN                                                                  12/17/2006 14:56:13 PAGE 9   

 490   2                              KeyT=0;
 491   2      
 492   2                      LCD_Convert(0,Line,16,0);               //取消反白      
 493   2      
 494   2                      if      ((key==KEY_DOWN)&&(Line<MenuCount[MenuNum]-1)) 
 495   2                      {       
 496   3                              Line ++;                        
 497   3                      }
 498   2                      else if ((key==KEY_UP)&&(Line>1)) 
 499   2                      {                               
 500   3                              Line --;                        
 501   3                      }
 502   2                      else if (key==KEY_ENT)
 503   2                      {
 504   3                              rt=Line;
 505   3                              quit=0;
 506   3                      }
 507   2                      else if(key>0 && key<MenuCount[MenuNum])
 508   2                              {rt=key;        quit=0;}
 509   2                      else if (key==KEY_ESC)  
 510   2                              {rt= 0;quit=0;}
 511   2              }
 512   1              LCD_write(0x01,COMM);           //清屏,字符缓冲区
 513   1              delay_ms(3);
 514   1              LCD_clr_pic();                                  //清屏,图形缓冲区
 515   1              return (rt);
 516   1      }
 517          
 518          void Set_NextRT(unsigned mode)                          //mode=1 从头开始查找时间表,mode=0 继续查询
 519          {
 520   1              unsigned char nh,nm,rc,rh,rm,rt,i;
 521   1                      nh=BCD2HEX(DS1307_Read(Hours));
 522   1                      nm=BCD2HEX(DS1307_Read(Minute));
 523   1                      rc=Mem_Read(0);
 524   1                      if (mode) i=0;
 525   1                      else 
 526   1                      {
 527   2                                      i=NextRingNum-1;
 528   2                      }
 529   1      
 530   1                      for (;i<rc;i++)
 531   1                      {
 532   2                              NextRingNum=i+1;
 533   2                              Read_RingTime(NextRingNum,NextRingTime);
 534   2                              rh=BCD2HEX(NextRingTime[0]);
 535   2                              rm=BCD2HEX(NextRingTime[1]);
 536   2                              rt=BCD2HEX(NextRingTime[2]);
 537   2              
 538   2                              if (rt)                         //上课铃
 539   2                              {
 540   3                                      if (rm<3)               //计算打预备铃的时间
 541   3                                      {
 542   4                                              rm+=57;
 543   4                                              rh--;
 544   4                                      }
 545   3                                      else
 546   3                                      {
 547   4                                              rm-=3;
 548   4                                      }
 549   3      
 550   3                                      if ((nh<rh)||((nh==rh)&&(nm<rm))) 
 551   3                                      {
C51 COMPILER V7.06   MAIN                                                                  12/17/2006 14:56:13 PAGE 10  

 552   4                                              NextRingTime[0]=HEX2BCD(rh);
 553   4                                              NextRingTime[1]=HEX2BCD(rm);
 554   4                                              break;
 555   4                                      }
 556   3                                      else
 557   3                                      {
 558   4                                              rh=BCD2HEX(NextRingTime[0]);                    //计算打上课铃的时间
 559   4                                              rm=BCD2HEX(NextRingTime[1]);
 560   4      
 561   4                                              if ((nh<rh)||((nh==rh)&&(nm<rm)))
 562   4                                              {
 563   5                                                      NextRingTime[0]=HEX2BCD(rh);
 564   5                                                      NextRingTime[1]=HEX2BCD(rm);
 565   5                                                      break;
 566   5                                              }
 567   4                                              else
 568   4                                              {
 569   5                                                      if (rm+rt>59)                                                   //计算打下课铃的时间
 570   5                                                      {
 571   6                                                              rh++;
 572   6                                                              rm=rm+rt-60;
 573   6                                                      }
 574   5                                                      else
 575   5                                                      {
 576   6                                                              rm=rm+rt;
 577   6                                                      }
 578   5      
 579   5                                                      if ((nh<rh)||((nh==rh)&&(nm<rm))) 
 580   5                                                      {
 581   6                                                              NextRingTime[0]=HEX2BCD(rh);
 582   6                                                              NextRingTime[1]=HEX2BCD(rm);
 583   6                                                              NextRingNum++;
 584   6                                                              break;
 585   6                                                      }
 586   5                                                      else
 587   5                                                              continue;
 588   5                                              }
 589   4                                      }
 590   3                              }
 591   2                              else                                    //普通铃
 592   2                              {
 593   3                                      if (nh>rh)      continue;
 594   3                                      if ((nh==rh)&&(nm>rm))  continue;
 595   3                                      NextRingNum++;
 596   3                                      break;
 597   3                              }
 598   2                      }
 599   1      }
 600          
 601          void DoCom()
 602          {
 603   1              In_flag=0;
 604   1              if (Com_flag==2)                                        //串口状态为二,接收数据
 605   1              {
 606   2                      if (Com_buff[Com_count]==0xff)                            //如果为停止标志,则停止接收,置串口状态标志为4,传输结束,准备存储

⌨️ 快捷键说明

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