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

📄 1302.lst

📁 单片机与时钟芯片ds1302接口程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 230          void BurstW1302R(uchar *pWReg)
 231          {
 232   1          uchar i;
 233   1          W1302(0x8e,0x00);         /* 控制命令,WP=0,写操作*/
 234   1          T_RST = 0;
 235   1          T_CLK = 0;
 236   1          T_RST = 1;
 237   1          RTInputByte(0xfe);         /* 0xbe:时钟多字节写命令 */
 238   1          for (i=31; i>0; i--)       /* 31Byte 寄存器数据 */
 239   1          {
 240   2              RTInputByte(*pWReg);    /* 写1Byte数据*/
 241   2              pWReg++;
C51 COMPILER V7.50   1302                                                                  11/20/2007 23:46:12 PAGE 5   

 242   2          }
 243   1          T_CLK = 1;
 244   1          T_RST = 0;
 245   1      } 
 246          /******************************************************************** 
 247          
 248           函 数 名:BurstR1302R()
 249           功    能:读取DS1302寄存器数据
 250           说    明:先写地址,后读命令/数据(寄存器多字节方式)
 251           调    用:RTInputByte() , RTOutputByte()
 252           入口参数:pRReg: 寄存器数据地址
 253           返 回 值:无
 254           设    计:zhaojunjie           日    期:2002-03-19
 255           修    改:                     日    期: 
 256          ***********************************************************************/
 257          void BurstR1302R(uchar *pRReg)
 258          {
 259   1          uchar i;
 260   1          T_RST = 0;
 261   1          T_CLK = 0;
 262   1          T_RST = 1;
 263   1          RTInputByte(0xff);            /* 0xff:时钟多字节读命令 */
 264   1          for (i=31; i>0; i--)          /*31Byte 寄存器数据 */
 265   1          {
 266   2              *pRReg = RTOutputByte();  /* 读1Byte数据 */
 267   2              pRReg++;
 268   2          }
 269   1          T_CLK = 1;
 270   1          T_RST = 0;
 271   1      }
 272          /******************************************************************** 
 273          
 274           函 数 名:Set1302()
 275           功    能:设置初始时间
 276           说    明:先写地址,后读命令/数据(寄存器多字节方式)
 277           调    用:W1302()
 278           入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
 279                                         7Byte (BCD码)1B 1B 1B 1B 1B  1B  1B
 280           返 回 值:无
 281           设    计:zhaojunjie           日    期:2002-03-19
 282           修    改:                     日    期: 
 283          ***********************************************************************/
 284          void Set1302(uchar *pClock) 
 285          {
 286   1          uchar i;
 287   1          uchar ucAddr = 0x80; 
 288   1          W1302(0x8e,0x00);           /* 控制命令,WP=0,写操作?*/
 289   1          for(i =7; i>0; i--)
 290   1          { 
 291   2              W1302(ucAddr,*pClock);  /* 秒 分 时 日 月 星期 年 */ 
 292   2              pClock++;
 293   2              ucAddr +=2;
 294   2          }
 295   1          W1302(0x8e,0x80);           /* 控制命令,WP=1,写保护?*/
 296   1      }
 297          void delayms(int t)
 298          {
 299   1              uchar i;
 300   1              while(t--)
 301   1              {
 302   2              i=100;
 303   2              while(i--);     
C51 COMPILER V7.50   1302                                                                  11/20/2007 23:46:12 PAGE 6   

 304   2              }
 305   1      }
 306          /******************************************************************** 
 307          
 308           函 数 名:Get1302()
 309           功    能:读取DS1302当前时间
 310           说    明:
 311           调    用:R1302() 
 312           入口参数:ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年 
 313                                                  7Byte (BCD码)   1B 1B 1B 1B 1B  1B  1B
 314           返 回 值:无
 315           设    计:zhaojunjie           日    期:2002-03-19
 316           修    改:                     日    期: 
 317          ***********************************************************************/
 318          void Get1302(uchar ucCurtime[]) 
 319          {
 320   1          uchar i;
 321   1          char j;
 322   1          uchar ucAddr = 0x81;
 323   1          for (i=0; i<7; i++)
 324   1          {
 325   2              j= R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
 326   2                                      //if (j>=0)
 327   2              ucCurtime[i] =j;/*格式为: 秒 分 时 日 月 星期 年 */
 328   2              //ucCurtime[i] = R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
 329   2              ucAddr += 2;
 330   2                                      _nop_();
 331   2          }
 332   1      }
 333          /*//////////////////////////////////////////////////////////////////////*/
 334          
 335          
 336          void put_num(char cnum)
 337          {
 338   1              P0=seg[ cnum & 0x0f];
 339   1      }
 340          
 341          #define xt_mhz          11.0592                 //晶体的振荡频率
 342          //unsigned int TimeTHTL;
 343          unsigned int TimeMode1Set(float timeslot)
 344          {
 345   1              return (unsigned int)(0x10000-xt_mhz*1000000/12*timeslot);
 346   1      }
 347          idata unsigned  int TimeTick;
 348          void timer0() interrupt 1 using 3 
 349          { 
 350   1              static  char disppoint;
 351   1      //      unsigned char temp; 
 352   1              //晶振为 11.0592MHZ 时计数 9216(2400)=(0x10000-0xd800) 次为 10ms 
 353   1          //11.0592*10e6/12=每秒计数 /100=10ms应计数
 354   1              TH0=(XMS/256); 
 355   1              TL0=(XMS%256);
 356   1              TimeTick++;
 357   1      
 358   1              P2=P2|0x3f;
 359   1      
 360   1              //put_num(dispbuf[disppoint]);
 361   1              P0=seg[ dispbuf[disppoint] & 0x0f];
 362   1              if(disppoint==2)        P0&=~dot; /* 小数点*/
 363   1      
 364   1              P2=P2 & low[disppoint];
 365   1      
C51 COMPILER V7.50   1302                                                                  11/20/2007 23:46:12 PAGE 7   

 366   1              if (disppoint++>=5)     disppoint=0;
 367   1      
 368   1      } 
 369          void displed(void)
 370          {
 371   1      
 372   1      }
 373          void systemini(void)
 374          {
 375   1              P0=0xff;
 376   1              P1=0xff;
 377   1              P2=0xff;
 378   1              P3=0xff;
 379   1              TMOD=0x01;
 380   1              XMS=TimeMode1Set(0.004);
 381   1              //XMS=2000;
 382   1              //XMS=0x10000-1000;
 383   1              TH0=XMS/256;    /* 5ms */
 384   1              TL0=XMS%256;
 385   1              TR0=1;
 386   1              ET0=1;              //Enable timer 0 Interrupt
 387   1              EA=1;
 388   1      //      stop=1;
 389   1      }
 390          void main(void)
 391          {
 392   1        uchar WClock[8]={0x01,0x02,0x03};/*格式为: 秒 分 时 日 月 星期 年 */
 393   1        uchar RClock[8];
 394   1        uchar ds_hour;
 395   1        uchar ds_min;
 396   1        uchar ds_sec;
 397   1        uchar ds_day;             /*得到当前时间小时值*/
 398   1        uchar ds_month;             /*得到当前时间小时值*/
 399   1        uchar ds_year;             /*得到当前时间小时值*/
 400   1        uchar ds_year2;             /*得到当前时间小时值*/
 401   1              //systemini();
 402   1              LCD_init();
 403   1      //      Get1302(&RClock);                       /*把当前的时间值读取到数组SClock[3]中去*/
 404   1          W1302(0x8e,0x00);           /* 控制命令,WP=0,写操作?*/
 405   1              W1302(0x90,0xA5);                                       //TCS=1010:使能涓流充电 DS=01:选择一个二极管 RS=01:2K
 406   1          W1302(0x8e,0x80);           /* 控制命令,WP=1,写保护?*/
 407   1      //Set1302(WClock);              
 408   1      while(1)
 409   1              {
 410   2      int j;
 411   2          //Get1302(&RClock);                /*获取当前时间值*/
 412   2      //              displed();
 413   2                      BurstR1302T(&RClock);
 414   2      //              Get1302(&RClock);                       /*把当前的时间值读取到数组SClock[3]中去*/
 415   2      //              if (TimeTick>5)
 416   2      //              {
 417   2      //                      TimeTick=0;             
 418   2                      //  Get1302(&RClock);                   /*把当前的时间值读取到数组SClock[3]中去*/
 419   2                  ds_sec  = RClock[0];//&0x7f;        /*得到当前时间秒值*/
 420   2                  ds_min  = RClock[1];             /*得到当前时间分值*/
 421   2                  ds_hour = RClock[2];             /*得到当前时间小时值*/
 422   2                  ds_day = RClock[3];             /*得到当前时间小时值*/
 423   2                  ds_month = RClock[4];             /*得到当前时间小时值*/
 424   2                  ds_year = RClock[6];             /*得到当前时间小时值*/
 425   2                  ds_year2= RClock[7];             /*得到当前时间小时值*/
 426   2                              dispbuf[0]=ds_year2&0x0f;
 427   2                              dispbuf[1]=ds_year2>>4;
C51 COMPILER V7.50   1302                                                                  11/20/2007 23:46:12 PAGE 8   

 428   2                              dispbuf[2]=ds_year&0x0f;
 429   2                              dispbuf[3]=ds_year>>4;
 430   2                              dispbuf[4]=ds_month&0x0f;
 431   2                              dispbuf[5]=ds_month>>4;
 432   2                              dispbuf[6]=ds_day&0x0f;
 433   2                              dispbuf[7]=ds_day>>4;
 434   2                              dispbuf[8]=ds_hour>>4;
 435   2                              dispbuf[9]=ds_hour&0x0f;
 436   2                              dispbuf[10]=ds_min>>4;
 437   2                              dispbuf[11]=ds_min&0x0f;
 438   2                              dispbuf[12]=ds_sec>>4;
 439   2                              dispbuf[13]=ds_sec&0x0f;
 440   2                      for(j=0;j<14;j++)
 441   2                      {
 442   3                        LCD_write_char(0,j,ASCII[dispbuf[j]]);
 443   3      //                LCD_write_char(0,j,ASCII[dispbuf[j]]);
 444   3                      }
 445   2      //        }
 446   2                      //delayms(2000);
 447   2      //              keyproc();
 448   2                      //ledrun();
 449   2              }
 450   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    714    ----
   CONSTANT SIZE    =     41    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     26      26
   IDATA SIZE       =      2    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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