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

📄 24m点阵时钟.lst

📁 基于C51的点阵时钟显示仿真电路和源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 441   4                                              if(start_word > (sizeof(TMP_WORDS)/16 - 8))
 442   4                                                      MSG_MV = MSG_MV_R;
 443   4                                              break;
 444   4                                      case STA_gWORD:
 445   4                                              if(start_word > (sizeof(MY_WORDS)/16 - 8))
 446   4                                                      MSG_MV = MSG_MV_R;
 447   4                                      default:
 448   4                                              break;
 449   4                              }
 450   3                      if(start_word > (sizeof(TMP_WORDS)/16 - 4))
 451   3                                      MSG_MV = MSG_MV_R;
 452   3                      }
 453   2                      else if((move_times == 9) && (MSG_MV == MSG_MV_R)){
 454   3                              move_times = 1;
 455   3                              Put_Wdispram(WORDS);  // 
 456   3                              start_word-- ;
 457   3                              switch(STATE){
 458   4                                      case STA_gTEMP:
 459   4                                              Disp_Temperature();                                //
 460   4                                              Put_gTEMP();
 461   4                                                      break;
 462   4                                      default:
 463   4                                              break;
 464   4                              }
 465   3                              if(start_word < 1){
 466   4                                      MSG_MV = MSG_MV_L;
 467   4                                      return;
 468   4                              }
 469   3                      }
 470   2      //      }
 471   2                      }
 472   1      }
 473          void Show_All_Word(){
 474   1              int m,i;
 475   1              //MSG_MV = MSG_MV_L;
 476   1              for(start_word = 0;start_word < 8;start_word++){
 477   2                      for(move_times = 0; move_times < 8;move_times++){
 478   3                              for(m=0;m<4;m++){       //若要上下移动 m=16
 479   4                                      for(i=0;i<16;i++){
 480   5                                              Put_Hdispram(); //把第i行放入行缓冲
 481   5                                              RL_Move();      //是否要左右移动
 482   5                                              Show_Line();
 483   5                                      }
 484   4                              }
 485   3                      }
 486   2              }
C51 COMPILER V8.05a   24M点阵时钟                                                          09/28/2010 07:26:18 PAGE 9   

 487   1      }
 488          
 489          void delay()
 490          {
 491   1              uint i;
 492   1              for(i=0;i<40;i++);
 493   1      }                        
 494                  
 495          //------------------------------------
 496          //----------字发送子程序-----------
 497                  void SendByte(void)
 498                          {
 499   1                         uchar m;
 500   1                         for(m=0;m<8;m++)
 501   1                         {
 502   2                                      CLK = 0;
 503   2                                      Red = (SendData & 0x80);                  //红屏显示 
 504   2                          //  Greed =  (SendData & 0x80);               //绿屏显示 
 505   2                                      SendData =SendData<<1;                  
 506   2                                      CLK = 1;          //移位时钟上升沿 
 507   2                         }
 508   1                      }
 509           //-----------------------------------
 510          //----------行扫描子程序-------------
 511                     void RowsCan(void)
 512                     {
 513   1                              P2 = P2 & 0xf0;
 514   1                              P2 = P2 | hang;
 515   1                              hang++;
 516   1                              if (hang>=16) 
 517   1                              { 
 518   2                                      hang =0x00;
 519   2                              }
 520   1                      }
 521          
 522                          void initial(void)
 523                          {
 524   1                              OE = 1;
 525   1                              Red = 1;
 526   1                              Greed = 1;
 527   1                              SendData = 0x00;
 528   1                              hang = 0x00;
 529   1                                                              
 530   1                      }
 531          /*****************************************************
 532          函数功能:延时若干微秒
 533          入口参数:n
 534          ***************************************************/ 
 535          void delaynus(unsigned char n)
 536          {
 537   1       unsigned char i;
 538   1      // for(i=0;i<n;i++)
 539   1            ;
 540   1      }
*** WARNING C280 IN LINE 535 OF 24M点阵时钟.C: 'n': unreferenced local variable
*** WARNING C280 IN LINE 537 OF 24M点阵时钟.C: 'i': unreferenced local variable
 541          /*****************************************************
 542          函数功能:向1302写一个字节数据
 543          入口参数:x
 544          ***************************************************/ 
 545          void Write1302(unsigned char dat)
 546          {
C51 COMPILER V8.05a   24M点阵时钟                                                          09/28/2010 07:26:18 PAGE 10  

 547   1        unsigned char i; 
 548   1        SCLK=0;            //拉低SCLK,为脉冲上升沿写入数据做好准备
 549   1        delaynus(2);       //稍微等待,使硬件做好准备
 550   1        for(i=0;i<8;i++)      //连续写8个二进制位数据
 551   1          {
 552   2                  DATA=dat&0x01;    //取出dat的第0位数据写入1302
 553   2                      delaynus(2);       //稍微等待,使硬件做好准备
 554   2                       SCLK=1;           //上升沿写入数据
 555   2                       delaynus(2);      //稍微等待,使硬件做好准备
 556   2                       SCLK=0;           //重新拉低SCLK,形成脉冲
 557   2                       dat>>=1;          //将dat的各数据位右移1位,准备写入下一个数据位
 558   2                }
 559   1              
 560   1       }
 561          /*****************************************************
 562          函数功能:根据命令字,向1302写一个字节数据
 563          入口参数:Cmd,储存命令字;dat,储存待写的数据
 564          ***************************************************/ 
 565          void WriteSet1302(unsigned char Cmd,unsigned char dat)
 566           {
 567   1         RST=0;           //禁止数据传递
 568   1         SCLK=0;          //确保写数居前SCLK被拉低
 569   1              RST=1;           //启动数据传输
 570   1              delaynus(2);     //稍微等待,使硬件做好准备
 571   1              Write1302(Cmd);  //写入命令字
 572   1              Write1302(dat);  //写数据
 573   1              SCLK=1;          //将时钟电平置于已知状态
 574   1              RST=0;           //禁止数据传递
 575   1       }
 576          /*****************************************************
 577          函数功能:从1302读一个字节数据
 578          入口参数:x
 579          ***************************************************/ 
 580           unsigned char Read1302(void)
 581           {
 582   1         unsigned char i,dat;
 583   1              delaynus(2);       //稍微等待,使硬件做好准备
 584   1              for(i=0;i<8;i++)   //连续读8个二进制位数据
 585   1               {
 586   2                 dat>>=1;       //将dat的各数据位右移1位,因为先读出的是字节的最低位
 587   2                      if(DATA==1)    //如果读出的数据是1
 588   2                       dat|=0x80;    //将1取出,写在dat的最高位
 589   2                       SCLK=1;       //将SCLK置于高电平,为下降沿读出
 590   2                       delaynus(2);  //稍微等待
 591   2                       SCLK=0;       //拉低SCLK,形成脉冲下降沿
 592   2                       delaynus(2);  //稍微等待
 593   2                }      
 594   1        return dat;        //将读出的数据返回
 595   1      }  
 596          /*****************************************************
 597          函数功能:根据命令字,从1302读取一个字节数据
 598          入口参数:Cmd
 599          ***************************************************/ 
 600          unsigned char  ReadSet1302(unsigned char Cmd)
 601           {
 602   1        unsigned char dat;
 603   1        RST=0;                 //拉低RST
 604   1        SCLK=0;                //确保写数居前SCLK被拉低
 605   1        RST=1;                 //启动数据传输
 606   1        Write1302(Cmd);       //写入命令字
 607   1        dat=Read1302();       //读出数据
 608   1        SCLK=1;              //将时钟电平置于已知状态
C51 COMPILER V8.05a   24M点阵时钟                                                          09/28/2010 07:26:18 PAGE 11  

 609   1        RST=0;               //禁止数据传递
 610   1        return dat;          //将读出的数据返回
 611   1      }
 612          /*****************************************************
 613          函数功能: 1302进行初始化设置
 614          ***************************************************/ 
 615          void Init_DS1302(void)
 616          {       
 617   1        unsigned char flag;
 618   1         
 619   1          flag= ReadSet1302(0x81);
 620   1              if(flag&0x80)   {      //判断时钟芯片是否关闭
 621   2         WriteSet1302(0x8E,0x00);                 //根据写状态寄存器命令字,写入不保护指令 
 622   2         WriteSet1302(0x80,((0/10)<<4|(0%10)));   //根据写秒寄存器命令字,写入秒的初始值
 623   2              WriteSet1302(0x82,((18/10)<<4|(18%10)));   //根据写分寄存器命令字,写入分的初始值
 624   2              WriteSet1302(0x84,((21/10)<<4|(21%10))); //根据写小时寄存器命令字,写入小时的初始值
 625   2              WriteSet1302(0x86,((23/10)<<4|(23%10))); //根据写日寄存器命令字,写入日的初始值
 626   2              WriteSet1302(0x88,((7/10)<<4|(7%10))); //根据写月寄存器命令字,写入月的初始值
 627   2              //WriteSet1302(0x8A,2);
 628   2              WriteSet1302(0x8c,((10/10)<<4|(10%10)));   //根据写小时寄存器命令字,写入小时的初始值
 629   2                      WriteSet1302(0x90,0xa5); 
 630   2              WriteSet1302(0x8E,0x80);
 631   2        }
 632   1        //如果不想每次都初始化时间,也就是掉电后还想让时钟继续走时的话 就用上面的语句
 633   1      
 634   1      
 635   1        /*--------------------这是每次都初始化的语句-----------------*/
 636   1          /* WriteSet1302(0x8E,0x00);                 //根据写状态寄存器命令字,写入不保护指令 
 637   1         WriteSet1302(0x80,((0/10)<<4|(0%10)));   //根据写秒寄存器命令字,写入秒的初始值
 638   1              WriteSet1302(0x82,((18/10)<<4|(18%10)));   //根据写分寄存器命令字,写入分的初始值
 639   1              WriteSet1302(0x84,((21/10)<<4|(21%10))); //根据写小时寄存器命令字,写入小时的初始值
 640   1              WriteSet1302(0x86,((23/10)<<4|(23%10))); //根据写日寄存器命令字,写入日的初始值
 641   1              WriteSet1302(0x88,((7/10)<<4|(7%10))); //根据写月寄存器命令字,写入月的初始值
 642   1              //WriteSet1302(0x8A,2);
 643   1              WriteSet1302(0x8c,((10/10)<<4|(10%10)));   //根据写小时寄存器命令字,写入小时的初始值
 644   1                      WriteSet1302(0x90,0xa5); 
 645   1              WriteSet1302(0x8E,0x80);
 646   1              */
 647   1      
 648   1      
 649   1      
 650   1      }
 651          void write_time1302(){
 652   1          WriteSet1302(0x8E,0x00);                 //根据写状态寄存器命令字,写入不保护指令 
 653   1          WriteSet1302(0x80,Time.Second);   //根据写秒寄存器命令字,写入秒的初始值
 654   1              WriteSet1302(0x82,Time.Minute);   //根据写分寄存器命令字,写入分的初始值
 655   1              WriteSet1302(0x84,Time.Hour); //根据写小时寄存器命令字,写入小时的初始值
 656   1              WriteSet1302(0x86,Time.Day); //根据写日寄存器命令字,写入日的初始值
 657   1              WriteSet1302(0x88,Time.Month); //根据写月寄存器命令字,写入月的初始值
 658   1              WriteSet1302(0x8A,Time.Week);
 659   1              WriteSet1302(0x8c,Time.Year);   //根据写小时寄存器命令字,写入小时的初始值
 660   1              //      WriteSet1302(0x90,0xa5); 
 661   1              //WriteSet1302(0x8E,0x80);      
 662   1      }
 663          
 664          //读时间
 665          void Read_TIME(){ 

⌨️ 快捷键说明

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