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

📄 ds1302.lst

📁 proteus 数字时钟 ds1302
💻 LST
📖 第 1 页 / 共 2 页
字号:
 134   1          return ucData;
 135   1      }
 136          
 137          //*************************************************************************************************
 138          //*                                                                                                                                                                                               *
 139          //*                      ******************************是否写保护*******************************                          *
 140          //*                                                                                                                                                                                               *
 141          //*************************************************************************************************
 142          void vDSSetProtect(bit bFlag)       
 143          {
 144   1              if(bFlag)
 145   1                      vDSWriteDirect(0x8E,0x10);
 146   1              else
 147   1                      vDSWriteDirect(0x8E,0x00);
 148   1      }
 149          
 150          
 151          
 152          //*************************************************************************************************
 153          //*                                                                                                                                                                                               *
 154          //*                      ******************************设置实时时钟时间**************************                         *
 155          //*                                                                                                                                                                                               *
 156          //*************************************************************************************************
 157          void vDSSetTime(unsigned char ucAddress, unsigned char ucValue)
 158          {
 159   1              vDSSetProtect(0);                                                                                        //取消保护。
 160   1      
 161   1              vDSWriteDirect(ucAddress, ((ucValue/10)<<4 | (ucValue%10))); //吧ucValue转换成BCD码,然后写入。
 162   1      }
 163          
 164          
 165          
 166          //*************************************************************************************************
 167          //*                                                                                                                                                                                               *
 168          //*                      ******************************读取实时时钟时间**************************                         *
 169          //*                                                                                                                                                                                               *
 170          //*************************************************************************************************
 171          void vDSGetTime(TIME *stTime)                     //把读取的BCD码转换成2进制数然后存入时间数组。
 172          {
 173   1              unsigned char ucReadValue;
 174   1      
 175   1              ucReadValue = vDSReadDirect(DS_SECOND);                                            //秒
 176   1              stTime->ucSecond=((ucReadValue&0x70)>>4)*10+(ucReadValue&0x0F);
 177   1      
C51 COMPILER V8.05a   DS1302                                                               08/07/2007 23:36:32 PAGE 4   

 178   1              ucReadValue = vDSReadDirect(DS_MINUTE);                                            //分
 179   1              stTime->ucMinute=((ucReadValue&0x70)>>4)*10+(ucReadValue&0x0F);
 180   1      
 181   1              ucReadValue = vDSReadDirect(DS_HOUR);                                              //小时
 182   1              stTime->ucHour =((ucReadValue&0x70)>>4)*10+(ucReadValue&0x0F);
 183   1      
 184   1              ucReadValue = vDSReadDirect(DS_DAY);                                               //天
 185   1              stTime->ucDay =((ucReadValue&0x70)>>4)*10+(ucReadValue&0x0F);
 186   1                      
 187   1              ucReadValue = vDSReadDirect(DS_WEEK);                                              //星期
 188   1              stTime->ucWeek=((ucReadValue&0x70)>>4)*10+(ucReadValue&0x0F);
 189   1      
 190   1              ucReadValue =vDSReadDirect(DS_MONTH);                                              //月
 191   1              stTime->ucMonth=((ucReadValue&0x70)>>4)*10+(ucReadValue&0x0F);
 192   1      
 193   1              ucReadValue =vDSReadDirect(DS_YEAR);                                               //年
 194   1              stTime->ucYear=((ucReadValue&0x70)>>4)*10+(ucReadValue&0x0F);   
 195   1      }
 196          
 197          
 198          
 199          //*************************************************************************************************
 200          //*                                                                                                                                                                                               *
 201          //*                      ******************************实时时钟日期字符串**************************                       *
 202          //*                                                                                                                                                                                               *
 203          //*************************************************************************************************
 204          void vDateString(TIME *stTime)             //把日期数据转换成日期字符串,便于显示。
 205          {
 206   1              stTime->ucaDateString[0] = stTime->ucYear/10 + '0';
 207   1              stTime->ucaDateString[1] = stTime->ucYear%10 + '0';
 208   1      
 209   1              stTime->ucaDateString[2] = '-';
 210   1      
 211   1              stTime->ucaDateString[3] = stTime->ucMonth/10 + '0';
 212   1              stTime->ucaDateString[4] = stTime->ucMonth%10 + '0';
 213   1      
 214   1              stTime->ucaDateString[5] = '-';
 215   1      
 216   1              stTime->ucaDateString[6] = stTime->ucDay/10 + '0';
 217   1              stTime->ucaDateString[7] = stTime->ucDay%10 + '0';
 218   1      
 219   1              stTime->ucaDateString[8] = '\0';
 220   1      }
 221          
 222          
 223          
 224          //*************************************************************************************************
 225          //*                                                                                                                                                                                               *
 226          //*                      ******************************实时时钟时间字符串**************************                       *
 227          //*                                                                                                                                                                                               *
 228          //*************************************************************************************************
 229          void vTimeString(TIME *stTime)           //把时间数据转换成时间字符串,便于显示。
 230          {
 231   1              stTime->ucaTimeString[0] = stTime->ucHour/10 + '0';
 232   1              stTime->ucaTimeString[1] = stTime->ucHour%10 + '0';
 233   1      
 234   1              stTime->ucaTimeString[2] = ':';
 235   1      
 236   1              stTime->ucaTimeString[3] = stTime->ucMinute/10 + '0';
 237   1              stTime->ucaTimeString[4] = stTime->ucMinute%10 + '0';
 238   1      
 239   1              stTime->ucaTimeString[5] = ':';
C51 COMPILER V8.05a   DS1302                                                               08/07/2007 23:36:32 PAGE 5   

 240   1      
 241   1              stTime->ucaTimeString[6] = stTime->ucSecond/10 + '0';
 242   1              stTime->ucaTimeString[7] = stTime->ucSecond%10 + '0';
 243   1      
 244   1              stTime->ucaDateString[8] = '\0';
 245   1      }
 246          
 247          
 248          
 249          //*************************************************************************************************
 250          //*                                                                                                                                                                                               *
 251          //*                              ******************************初始化时钟**************************                               *
 252          //*                                                                                                                                                                                               *
 253          //*************************************************************************************************
 254          void vDSInitialize()
 255          {
 256   1              unsigned char ucSecond=vDSReadDirect(DS_SECOND);
 257   1      
 258   1              if(ucSecond&0x80)                 
 259   1                      vDSSetTime(DS_SECOND,0);
 260   1      }
 261          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    584    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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