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

📄 main.lst

📁 本程序是一个液晶时钟程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 372   1        if(read_clock(0x8b) != xq)
 373   1              {
 374   2              xq = read_clock(0x8b);          //读取星期
 375   2              sel = (read_clock(0x8b))%16; //字节低4位的BCD码放入sel
 376   2              if(sel==7)  {lcdword(1,6,1,"周日");}    //
 377   2              if(sel==6)  {lcdword(1,6,1,"周六");}    //
 378   2              if(sel==5)  {lcdword(1,6,1,"周五");}    //
 379   2              if(sel==4)  {lcdword(1,6,1,"周四");}    //
 380   2              if(sel==3)  {lcdword(1,6,1,"周");lcdWriteData(0xc8);lcdWriteData(0xfd);}
 381   2              if(sel==2)  {lcdword(1,6,1,"周二");}    //
 382   2              if(sel==1)  {lcdword(1,6,1,"周一");}    //星期一
 383   2          }   
 384   1      }
 385          /***************************************************************/
 386          //向LCD中填写小时数据
 387          void lcm_w_hh(void)
 388          {
 389   1        if(read_clock(0x85) != hh)
 390   1        {
 391   2        hh = read_clock(0x85);  // 读取小时
 392   2        if (hh>0x07&&hh<0x22&&setting==0)
 393   2         { beepBl(); }   //整点报时音
 394   2        }
 395   1              lcdWriteCommand(0x9c);
 396   1              lcdWriteData((hh/16)+0x30);
 397   1              lcdWriteData(hh%16+0x30);     //显示小时位                              
 398   1      }
 399          /***************************************************************/
 400          //功能:向LCD中填写分钟
 401          void lcm_w_mm(void)
 402          {
 403   1              if(read_clock(0x83) != mm)
 404   1              {mm=read_clock(0x83);}
 405   1              if(setting==0)Festival();//节日显示                             
 406   1              lcdWriteCommand(0x9d);  
 407   1              lcdWriteData(0x3a);            //显示":"
 408   1              lcdWriteData((mm/16)+0x30);
 409   1              lcdWriteData(mm%16+0x30);   //显示分钟
 410   1              lcdWriteData(0x3a);            //":"    
 411   1      }
 412          /***************************************************************/
 413          //功能:刷新年月日星期时分
 414          void Refresh(void)
 415          {
 416   1                      lcm_w_mm();   //刷新 分 
 417   1                      lcm_w_hh();   //刷新 小时 
 418   1                      lcm_w_dd();   //刷新 日
 419   1                      lcm_w_xq();   //更新星期值      
 420   1                      lcm_w_mo();   //刷新 月
 421   1                      lcm_w_yy();   //刷新 年
 422   1      }
 423          /***************************************************************/
 424          //功能:实时更新LCD界面的各个数据
 425          void lcd_Interface(void)
 426          {       uchar *p;
 427   1              uint i=0;
C51 COMPILER V8.05a   MAIN                                                                 12/17/2007 10:55:25 PAGE 8   

 428   1              uchar a=0,b=0,c=0;
 429   1              if(read_clock(0x81) != ss)
 430   1              {       //判断是否需要更新
 431   2                      ss = read_clock(0x81);      //更新数据
 432   2                      lcdWriteCommand(0x9f);              //秒值在LCD上的写入位置
 433   2                      lcdWriteData((ss/16)+0x30);     //写十位                
 434   2                      lcdWriteData(ss%16+0x30);           //写个位
 435   2                      led_secd=~led_secd;                 //LED闪烁
 436   2                      Refresh();                      //刷新日期的其他数据
 437   2      
 438   2                      /**lcdWriteCommand(0x85);                   //温度在LCM上的写入位置
 439   2                      lcdWriteData(0x20);                             //显示符号'|'
 440   2                      i=ReadTemperature();        //读温度并送显
 441   2                      a=i/100;
 442   2                      lcdWriteData(a+0x30);           //显示温度十位
 443   2                      b=i/10-a*10;
 444   2                      lcdWriteData(b+0x30);           //显示个位
 445   2                      lcdWriteData(0x2e);                 //显示"."
 446   2                      c=i-a*100-b*10;
 447   2                      lcdWriteData(c+0x30);            //显示小数位   
 448   2                      lcdWriteData(0x43);                 //显示度C
 449   2                      ****/
 450   2              GetChinaCalendarStr(yy,mo,dd,p);
 451   2              lcdword(2,0,1,p);          //界面上更新农历
 452   2                      //if(JieQiStr_2word(yy,mo,dd,q)==1)
 453   2                      //lcdword(2,6,1,q);                     //界面上更新节气
 454   2           }
 455   1       }
 456          /***************************************************************/
 457          void mode_one(void)
 458          {   setting=1;
 459   1          lcdClear();
 460   1              lcdword(0, 0, 1, "    重设密码");
 461   1              lcdword(1, 0, 1, "    设置时间");
 462   1              lcdword(2, 0, 1, "    设置闹钟");
 463   1              lcdword(3, 0, 1, "    查看农历");
 464   1              switch(cishu)
 465   1              {       case 0: convertChar(0, 2, 8);break;
 466   2                  case 1: convertChar(1, 2, 8);break;
 467   2                      case 2: convertChar(2, 2, 8);break;
 468   2                      case 3: convertChar(3, 2, 8);break;
 469   2                      case 4: lcdword(0, 0, 1, "    设置时间");
 470   2                          lcdword(1, 0, 1, "    设置闹钟");
 471   2                          lcdword(2, 0, 1, "    查看农历");
 472   2                                      lcdword(3, 0, 1, "    查看阳历");
 473   2                                      convertChar(3, 2, 8);break;     
 474   2              }
 475   1              cishu++;
 476   1              if(cishu==5)cishu=0;
 477   1      }
 478          /***************************************************************/
 479          //功能:根据获得的键值和当前的状态来确定下一步执行模块的次态
 480          void view_state(void)
 481          { 
 482   1        uchar i,x,*p;
 483   1         switch(state)
 484   1         {case 0: p=&fun_zero[0];break;
 485   2              default: break;
 486   2              }
 487   1        for(i=1;i<+4;i++)
 488   1        { if(keys==*p)             //表中的是不是和读取的键码一致
 489   2         {++p;state=*p;                    //存放读取的状态
C51 COMPILER V8.05a   MAIN                                                                 12/17/2007 10:55:25 PAGE 9   

 490   3          ++p;x=*p;                        //附读取的执行模块的代码
 491   3          switch(x)
 492   3          {case 0: mode_one();i=4;break;
 493   4           //ase 2: in_min();i=4;break;
 494   4          // case 3: mode23_ret1();i=4;break;
 495   4          // case 4: add_one();i=4;break;
 496   4           //case 5: set_done_ret23();i=4;break;
 497   4          default: break;
 498   4          }
 499   3         }
 500   2              else if(0==*p)i=4;
 501   2              p=p+3;
 502   2        }
 503   1      }
 504          /***************************************************************/
 505          //读取键盘
 506          void read_key(void)
 507          { 
 508   1        P1|=0x0f;keys=P1; //先保护P3口 
 509   1        keys|=0xf0;     //屏蔽其他位
 510   1        if((~keys)!=0)                 //有效按键
 511   1         {delayMs(50);         //消抖动
 512   2          keys=P1; keys|=0xf0;
 513   2              if((~keys)==0) keys=0;
 514   2          switch(keys)
 515   2              { case 0xfe:keys=1;break;
 516   3                case 0xfd:keys=2;break;
 517   3                case 0xfb:keys=3;break;
 518   3                case 0xf7:keys=4;break;
 519   3                default: break;               
 520   3              }
 521   2         }
 522   1         else keys=0;  
 523   1      }
 524          /***************************************************************/
 525          //主程序开始
 526          void main (void)
 527          { uchar InitLine,i;
 528   1        state=0;
 529   1        cishu=0;
 530   1       Init_1302();
 531   1       lcdInit ();
 532   1       lcdClear();
 533   1       lcdword(0, 0, 20, "  多功能液晶时钟");
 534   1       lcdword(1, 0, 20, "设计者: 电容器");
 535   1       lcdword(2, 0, 20, "仪表技术科陈志伟");
 536   1       lcdword(3, 0, 20, "交流QQ:287458808");
 537   1       delaySec(8);
 538   1       lcdClear();
 539   1       lcdword(0, 1, 20, "请稍等::::::::::");
 540   1       convertChar(0, 1, 8);
 541   1       lcdword(2, 0, 20, "系统初始化::::::");
 542   1       for (InitLine=0; InitLine<17; InitLine++)
 543   1        { convertChar(2, 0, InitLine);
 544   2              delaySec(2);
 545   2        }
 546   1       lcdClear();
 547   1       while(1)
 548   1       {if(setting==0) //正在设置则不刷新
 549   2        lcd_Interface(); //刷新主界面
 550   2         read_key();    //读取键盘
 551   2         if(keys!=0) view_state(); //根据键值执行相应的操作
C51 COMPILER V8.05a   MAIN                                                                 12/17/2007 10:55:25 PAGE 10  

 552   2         for(i=1;i<=25;i++)
 553   2         delayMs(30);
 554   2         }
 555   1      }
*** ERROR C249 IN LINE 555 OF MAIN.C: 'DATA': SEGMENT TOO LARGE

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

⌨️ 快捷键说明

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