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

📄 ds1302.lst

📁 51单片机开发与应用技术详解(珍藏版)PPT及源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 152   1      }
 153          
 154          
 155          void WriteRamByte() 
 156          {
 157   1      uchar Address;
 158   1      uchar Data;
 159   1      
 160   1              printf("\nWrite RAM Function:");  
 161   1              printf("\nWrite Ram ADDRESS (HEX):");
 162   1              scanf("%bx", &Address);                                         //获取RAM地址
 163   1              printf("\nWrite Ram DATA (HEX):");
 164   1              scanf("%bx", &Data);                                            //获取RAM数据
 165   1      
 166   1              Address = ((Address * 2) | 0xC0);                               //RAM数据写入命令
 167   1              ResetDS1302();                                                  //复位DS1302
 168   1              WriteByteDS1302(Address);                                       //写RAM地址
 169   1              WriteByteDS1302(Data);                                          //写RAM数据
 170   1              ResetDS1302();                                                  //复位DS1302
 171   1      }
 172          
 173          
 174          void Display(uchar loop) 
 175          {
 176   1      uchar lsec = 99, sec, min, hrs, dte, mon, day, yr;
 177   1      
 178   1      do                                                                              //主循环
 179   1      { 
C51 COMPILER V8.08   DS1302                                                                04/19/2008 21:34:32 PAGE 4   

 180   2                      ResetDS1302();
 181   2                      WriteByteDS1302(0xBF);                                  //以多字节方式读取时钟寄存器数据
 182   2                      sec = ReadByteDS1302();                                 //读取秒
 183   2                      min = ReadByteDS1302();                         //读取分
 184   2                      hrs = ReadByteDS1302();                                 //读取小时
 185   2                      dte = ReadByteDS1302();                                 //读取日期
 186   2                      mon = ReadByteDS1302();                         //读取月份
 187   2                      day = ReadByteDS1302();                         //读取星期
 188   2                      yr  = ReadByteDS1302();                                 //读取年
 189   2                      ResetDS1302();                                          //复位DS1302
 190   2                      if(sec != lsec || !loop)                                                //每秒显示一次
 191   2       {                                                                      //输出结果
 192   3                              printf("\nYr   Day  Mon  Dte  Hrs  Min  Sec");
 193   3                              printf("\n%2.bX   %2.bX   %2.bX   %2.bX", yr, day, mon, dte);
 194   3                              printf("   %2.bX   %2.bX   %2.bX", hrs, min, sec);
 195   3                              lsec = sec;
 196   3                      }
 197   2                      if(!loop)       break;
 198   2              }while(!RI);
 199   1              if(loop)   _getkey();
 200   1      }
 201          
 202          
 203          
 204          void BurstReadRAM() 
 205          {
 206   1      uchar DS1302RAM[31];                                                    //RAM数组
 207   1      uchar i;
 208   1      
 209   1              ResetDS1302();                                                  //复位DS1302
 210   1              WriteByteDS1302(0xFF);                                          //多字节方式读取RAM
 211   1              for (i=0; i<31; ++i) 
 212   1              {
 213   2                      DS1302RAM[i] = ReadByteDS1302();                //保存数据到RAM数组
 214   2              }
 215   1              ResetDS1302();                                                  //复位DS1302
 216   1      
 217   1              printf("\nDS1302 RAM Data;");                          //输出片内RAM的数据
 218   1      
 219   1              printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",
 220   1                                                      DS1302RAM[0], DS1302RAM[1], DS1302RAM[2], DS1302RAM[3], 
 221   1                                                      DS1302RAM[4], DS1302RAM[5], DS1302RAM[6], DS1302RAM[7]);
 222   1              printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",
 223   1                                                      DS1302RAM[8], DS1302RAM[9], DS1302RAM[10], DS1302RAM[11],
 224   1                                                      DS1302RAM[12], DS1302RAM[13], DS1302RAM[14], DS1302RAM[15]);
 225   1              printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",
 226   1                                                      DS1302RAM[16], DS1302RAM[17], DS1302RAM[18], DS1302RAM[19],
 227   1                                                      DS1302RAM[20], DS1302RAM[21], DS1302RAM[22], DS1302RAM[23]);
 228   1              printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",
 229   1                                                      DS1302RAM[24], DS1302RAM[25], DS1302RAM[26], DS1302RAM[27], 
 230   1                                                      DS1302RAM[28], DS1302RAM[29], DS1302RAM[30]);
 231   1      
 232   1              printf("\nEND RAM Data;");
 233   1      }
 234          
 235          
 236          void BurstWriteRAM() 
 237          {
 238   1      uchar Data;
 239   1      uchar   i;
 240   1      
 241   1              printf("\nWrite Ram DATA (HEX):");
C51 COMPILER V8.08   DS1302                                                                04/19/2008 21:34:32 PAGE 5   

 242   1              scanf("%bx", &Data);                                                    //获取RAM数据
 243   1      
 244   1              ResetDS1302();                                                  //复位DS1302
 245   1              WriteByteDS1302(0xfe);                                          //多字节方式写入RAM 
 246   1              for (i=0; i<31; ++i)                                                    //循环写入
 247   1      {
 248   2                      WriteByteDS1302(Data);
 249   2              }
 250   1              ResetDS1302();                                                  //复位DS1302
 251   1      }
 252          
 253          
 254          void InitDS1302() 
 255          {
 256   1      uchar   year, month, date, day, hour, minute, second;
 257   1      
 258   1              printf("\nEnter the Clock information: ");
 259   1              printf("\nPlease Enter the year (0-99): ");                     //输入年
 260   1              scanf("%bx", &year);
 261   1              printf("\n Please Enter the month (1-12): ");           //输入月
 262   1              scanf("%bx", &month);
 263   1              printf("\n Please Enter the date (1-31): ");                    //输入日
 264   1              scanf("%bx", &date);    
 265   1              printf("\n Please Enter the day (1-7): ");                      //输入星期
 266   1              scanf("%bx", &day);
 267   1              printf("\n Please Enter the hour (1-24): ");                    //输入小时
 268   1              scanf("%bx", &hour);
 269   1              hour =hour & 0x3f;                                                      //设置时钟为24小时方式
 270   1              printf("\n Please Enter the minute (0-59): ");          //输入分钟
 271   1              scanf("%bx", &minute);
 272   1              printf("\n Please Enter the second (0-59): ");          //输入秒
 273   1              scanf("%bx", &second);
 274   1      
 275   1              ResetDS1302();                                                  //复位DS1302
 276   1              WriteByteDS1302(0x8e);                                          //写保护控制寄存器
 277   1              WriteByteDS1302(0);                                             //允许写入
 278   1      
 279   1              ResetDS1302();                                                  //复位DS1302
 280   1              WriteByteDS1302(0x90);                                          //涓流充电寄存器
 281   1              WriteByteDS1302(0xab);                                          //允许充电
 282   1      
 283   1              ResetDS1302();                                                  //复位DS1302
 284   1              WriteByteDS1302(0xbe);                                          //以多字节突发方式写入8个字节时钟数据
 285   1              WriteByteDS1302(second);                                        //写入秒
 286   1              WriteByteDS1302(minute);                                        //写入分钟
 287   1              WriteByteDS1302(hour);                                          //写入小时
 288   1              WriteByteDS1302(date);                                          //写入星期
 289   1              WriteByteDS1302(month);                                 //写入月
 290   1              WriteByteDS1302(day);                                           //写入日
 291   1              WriteByteDS1302(year);                                          //写入年
 292   1              WriteByteDS1302(0);                                             //对写保护控制寄存器写入0
 293   1              ResetDS1302();                                                  //复位DS1302
 294   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1067    ----
   CONSTANT SIZE    =    862    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      51
   IDATA SIZE       =   ----    ----
C51 COMPILER V8.08   DS1302                                                                04/19/2008 21:34:32 PAGE 6   

   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 + -