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

📄 wnl.lst

📁 51单片机做的万年历
💻 LST
📖 第 1 页 / 共 2 页
字号:
 163                       real_time[2] = ':';
 164                       real_time[3] = ClkMin / 10 + '0';
 165                       real_time[4] = ClkMin % 10 + '0';
 166                       real_time[5] = ':';
 167                       real_time[6] = ClkSec / 10 + '0';
 168                       real_time[7] = ClkSec % 10 + '0';
 169                       real_time[8] = '-';
 170                       real_time[9] = '-';
 171                       break;
 172                case 1:                                 // 12小时制显示
 173                       real_time[8] = (ClkHr >= 12) ? 'P' : 'A';       //24转12小时                   
C51 COMPILER V8.08   WNL                                                                   05/22/2007 10:32:24 PAGE 4   

 174                       if (ClkHr > 12) 
 175                         {                                    
 176                           hr   = ClkHr - 12;
 177                         } 
 178                       else
 179                         {
 180                           hr = ClkHr;
 181                         }
 182                       real_time[0] = hr     / 10 + '0';           
 183                       real_time[1] = hr     % 10 + '0';
 184                       real_time[2] = ':';
 185                       real_time[3] = ClkMin / 10 + '0';
 186                       real_time[4] = ClkMin % 10 + '0';
 187                       real_time[5] = ':';
 188                       real_time[6] = ClkSec / 10 + '0';
 189                       real_time[7] = ClkSec % 10 + '0';
 190                       real_time[9] = 'M';
 191                       break;
 192              }
 193          }
 194          
 195          
 196          uchar  ClkUpdateTime (void)                   //时钟子程序
 197          {
 198              uchar newday;
 199              newday = FALSE;                           // 保证不会增加日期    
 200              if (ClkSec >= 59)
 201               {                                        
 202                    ClkSec = 0;                         //每分钟60秒
 203                    if (ClkMin >= 59)
 204                      {                                
 205                        ClkMin = 0;                     //每小时60分钟
 206                        if (ClkHr >= 23) 
 207                         {                              
 208                           ClkHr = 0;                   //每天24小时
 209                           newday    = TRUE;            //日期可以增加了
 210                         } 
 211                        else
 212                         {
 213                          ClkHr++;                      //小时自加
 214                         }
 215                      }
 216                    else
 217                     {
 218                      ClkMin++;                         //分钟自加
 219                     }
 220               } 
 221              else
 222               {
 223                  ClkSec++;                             //秒自加
 224               }
 225              return (newday);
 226          }
 227          
 228          uchar  ClkIsLeapYear(UINT year)               //闰年检查子程序
 229          {
 230              if (!(year % 4) && (year % 100) || !(year % 400))           
 231               {
 232                  return (TRUE);                        //可以被4整除为闰年
 233               } 
 234              else 
 235               {
C51 COMPILER V8.08   WNL                                                                   05/22/2007 10:32:24 PAGE 5   

 236                  return (FALSE);
 237               }
 238          }
 239          
 240          void  Clk_set_time (UCHAR hr, UCHAR min, UCHAR sec)       //设置时间子程序
 241          {
 242              EA=0;                                
 243              ClkHr  = hr;
 244              ClkMin = min;
 245              ClkSec = sec;
 246              EA=1;                                       
 247          }
 248          
 249          void  Clk_set_date ( uchar year,UCHAR month, UCHAR day)      //设置日期子程序
 250          {
 251              EA=0;                         
 252              ClkYear  = year;
 253              ClkMonth = month;
 254              ClkDay   = day;
 255              ClkUpdateDOW();                             
 256              EA=1;                         
 257          }
 258          
 259          void Clk_set_naozhong (uchar hr,uchar min)
 260          {
 261            EA = 0;
 262            Naozhong_Hr = hr;           //闹钟的小时
 263            Naozhong_Min = min;         //闹钟的分钟
 264            EA = 1;
 265          }
 266          
 267          void  ClkUpdateDate (void)
 268          {
 269              uchar newmonth; 
 270              if (ClkDay >= ClkMonthTbl[ClkMonth].MonthDays)     //检查是否每月的最后一日
 271              {  
 272                  if (ClkMonth == 2)                             //检查是否是二月
 273                  {                         
 274                      if (ClkIsLeapYear(ClkYear) == TRUE)        //检查是否闰年
 275                      {    
 276                          if (ClkDay >= 29)                      //检查是否二月最后一日
 277                          {                   
 278                              ClkDay = 1;
 279                              newmonth = TRUE;                   //日期变为三月的第一日 
 280                          } 
 281                          else 
 282                          {
 283                              ClkDay++;
 284                              newmonth = FALSE;
 285                          }
 286                      } 
 287                      else 
 288                      {
 289                          ClkDay = 1;
 290                          newmonth = TRUE;
 291                      }
 292                  } 
 293                  else 
 294                  {
 295                      ClkDay = 1;
 296                      newmonth = TRUE;
 297                  }
C51 COMPILER V8.08   WNL                                                                   05/22/2007 10:32:24 PAGE 6   

 298              } 
 299              else 
 300              {
 301                  ClkDay++;
 302                  newmonth = FALSE;
 303              }
 304              if (newmonth == TRUE)                            //是否新的一个月
 305              {                                                
 306                  if (ClkMonth >= 12)                          //是否十二月
 307                  {                    
 308                      ClkMonth = 1;                            //十二月
 309                      ClkYear++;                               //年份加1
 310                  } 
 311                  else 
 312                  {
 313                      ClkMonth++;                              //非十二月,月份加1
 314                  }
 315              }
 316              ClkUpdateDOW();                                  //计算星期
 317          }
 318          
 319          void  ClkUpdateDOW (void)
 320          {
 321              UINT dow;
 322              dow = ClkDay + ClkMonthTbl[ClkMonth].MonthVal;
 323              if (ClkMonth < 3)
 324              {
 325                  if (ClkIsLeapYear(ClkYear)) 
 326                  {
 327                      dow--;
 328                  }
 329              }
 330              dow    += ClkYear + (ClkYear / 4);
 331              dow    += (ClkYear / 400) - (ClkYear / 100);
 332              dow    %= 7;
 333              ClkDOW  = dow;
 334          }

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

⌨️ 快捷键说明

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