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

📄 ds1302.lst

📁 零基础单片机C语言设计全套教程
💻 LST
📖 第 1 页 / 共 3 页
字号:
 298          
 299          void InitDS1302() 
 300          {
 301   1      uchar   year, month, date, day, hour, minute, second;
 302   1      
 303   1              printf("\nEnter the Clock information: ");
C51 COMPILER V8.08   DS1302                                                                08/29/2008 18:01:54 PAGE 6   

 304   1              printf("\nPlease Enter the year (0-99): ");                     //输入年
 305   1              scanf("%bx", &year);
 306   1              printf("\n Please Enter the month (1-12): ");           //输入月
 307   1              scanf("%bx", &month);
 308   1              printf("\n Please Enter the date (1-31): ");                    //输入日
 309   1              scanf("%bx", &date);    
 310   1              printf("\n Please Enter the day (1-7): ");                      //输入星期
 311   1              scanf("%bx", &day);
 312   1              printf("\n Please Enter the hour (1-24): ");                    //输入小时
 313   1              scanf("%bx", &hour);
 314   1              hour =hour & 0x3f;                                                      //设置时钟为24小时方式
 315   1              printf("\n Please Enter the minute (0-59): ");          //输入分钟
 316   1              scanf("%bx", &minute);
 317   1              printf("\n Please Enter the second (0-59): ");          //输入秒
 318   1              scanf("%bx", &second);
 319   1      
 320   1              EnableWrite ();                                                         //写允许子函数
 321   1              Charge ();                                                                      //允许充电
 322   1      
 323   1              ResetDS1302();                                                  //复位DS1302
 324   1              WriteByteDS1302(0xbe);                                          //以多字节突发方式写入8个字节时钟数据
 325   1              WriteByteDS1302(second);                                        //写入秒
 326   1              WriteByteDS1302(minute);                                        //写入分钟
 327   1              WriteByteDS1302(hour);                                          //写入小时
 328   1              WriteByteDS1302(date);                                          //写入日
 329   1              WriteByteDS1302(month);                                 //写入月
 330   1              WriteByteDS1302(day);                                           //写入星期
 331   1              WriteByteDS1302(year);                                          //写入年
 332   1              WriteByteDS1302(0);                                             //对写保护控制寄存器写入0
 333   1              ResetDS1302();                                                  //复位DS1302
 334   1      }
 335          
 336          void WriteRamByte() 
 337          {
 338   1      uchar Address;
 339   1      uchar Data;
 340   1      
 341   1              printf("\nWrite RAM Function:");  
 342   1              printf("\nWrite Ram ADDRESS (HEX):");
 343   1              scanf("%bx", &Address);                                         //获取RAM地址
 344   1              printf("\nWrite Ram DATA (HEX):");
 345   1              scanf("%bx", &Data);                                            //获取RAM数据
 346   1      
 347   1              Address = ((Address * 2) | 0xC0);                               //RAM数据写入命令
 348   1              ResetDS1302();                                                  //复位DS1302
 349   1              WriteByteDS1302(Address);                                       //写RAM地址
 350   1              WriteByteDS1302(Data);                                          //写RAM数据
 351   1              ResetDS1302();                                                  //复位DS1302
 352   1      }
 353          
 354          void Display(uchar loop) 
 355          {
 356   1      uchar lsec = 99, sec, min, hrs, dte, mon, day, yr;
 357   1      
 358   1      do                                                                              //主循环
 359   1      { 
 360   2                      ResetDS1302();
 361   2                      WriteByteDS1302(0xBF);                                  //以多字节方式读取时钟寄存器数据
 362   2                      sec = ReadByteDS1302();                                 //读取秒
 363   2                      min = ReadByteDS1302();                         //读取分
 364   2                      hrs = ReadByteDS1302();                                 //读取小时
 365   2                      dte = ReadByteDS1302();                                 //读取日期
C51 COMPILER V8.08   DS1302                                                                08/29/2008 18:01:54 PAGE 7   

 366   2                      mon = ReadByteDS1302();                         //读取月份
 367   2                      day = ReadByteDS1302();                         //读取星期
 368   2                      yr  = ReadByteDS1302();                                 //读取年
 369   2                      ResetDS1302();                                          //复位DS1302
 370   2      
 371   2                      if(sec != lsec || !loop)                                                //每秒显示一次
 372   2       {                                                                      //输出结果
 373   3                              printf("\nYr   Day  Mon  Dte  Hrs  Min  Sec");
 374   3                              printf("\n%2.bX   %2.bX   %2.bX   %2.bX", yr, day, mon, dte);
 375   3                              printf("   %2.bX   %2.bX   %2.bX", hrs, min, sec);
 376   3                              lsec = sec;
 377   3                      }
 378   2                      if(!loop)       break;
 379   2              }while(!RI);
 380   1              if(loop)   _getkey();
 381   1      }
 382          
 383          void BurstReadRAM() 
 384          {
 385   1      uchar DS1302RAM[31];                                                    //RAM数组
 386   1      uchar i;
 387   1      
 388   1              ResetDS1302();                                                  //复位DS1302
 389   1              WriteByteDS1302(0xFF);                                          //多字节方式读取RAM
 390   1              for (i=0; i<31; ++i) 
 391   1              {
 392   2                      DS1302RAM[i] = ReadByteDS1302();                //保存数据到RAM数组
 393   2              }
 394   1              ResetDS1302();                                                  //复位DS1302
 395   1      
 396   1              printf("\nDS1302 RAM Data;");                          //输出片内RAM的数据
 397   1      
 398   1              printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",
 399   1                                                      DS1302RAM[0], DS1302RAM[1], DS1302RAM[2], DS1302RAM[3], 
 400   1                                                      DS1302RAM[4], DS1302RAM[5], DS1302RAM[6], DS1302RAM[7]);
 401   1              printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",
 402   1                                                      DS1302RAM[8], DS1302RAM[9], DS1302RAM[10], DS1302RAM[11],
 403   1                                                      DS1302RAM[12], DS1302RAM[13], DS1302RAM[14], DS1302RAM[15]);
 404   1              printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",
 405   1                                                      DS1302RAM[16], DS1302RAM[17], DS1302RAM[18], DS1302RAM[19],
 406   1                                                      DS1302RAM[20], DS1302RAM[21], DS1302RAM[22], DS1302RAM[23]);
 407   1              printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",
 408   1                                                      DS1302RAM[24], DS1302RAM[25], DS1302RAM[26], DS1302RAM[27], 
 409   1                                                      DS1302RAM[28], DS1302RAM[29], DS1302RAM[30]);
 410   1      
 411   1              printf("\nEND RAM Data;");
 412   1      }
 413          
 414          void BurstWriteRAM() 
 415          {
 416   1      uchar Data[31];
 417   1      uchar   i;
 418   1      
 419   1              for(i=0;i<31;i++)
 420   1              {
 421   2                      printf("\nWrite Ram DATA (HEX):");
 422   2                      scanf("%bx", &Data[i]);                                 //获取RAM数据
 423   2              }
 424   1      
 425   1              ResetDS1302();                                                  //复位DS1302
 426   1              WriteByteDS1302(0xfe);                                          //多字节方式写入RAM 
 427   1              for (i=0; i<31; i++)                                                    //循环写入
C51 COMPILER V8.08   DS1302                                                                08/29/2008 18:01:54 PAGE 8   

 428   1      {
 429   2                      WriteByteDS1302(Data[i]);
 430   2              }
 431   1              ResetDS1302();                                                  //复位DS1302
 432   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1574    ----
   CONSTANT SIZE    =   1191    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      87
   IDATA SIZE       =   ----    ----
   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 + -