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

📄 66.lst

📁 IIC单片机时钟
💻 LST
📖 第 1 页 / 共 2 页
字号:
 243          
 244          /******************************************************************
 245           - 功能描述:将BCD码转换为十进制的数值
 246           - 隶属模块:PCF8563驱动模块
 247           - 函数属性:内部
 248           - 参数说明:x:待转换的BCD码字节          
 249           - 返回说明:转换后的值
 250           - 注:将BCD格式数据转为实际的值,如29的BCD格式为0x29,实际值为0x1d
 251           ******************************************************************/
 252          
 253          unsigned char BCD2Val(unsigned char x)
 254          {
 255   1       return (x>>4)*10+(x&0x0f); //高4位乘以10,再加上低4位,即得到数值
 256   1      }
 257          
 258          /******************************************************************
 259           - 功能描述:将十进制的数值转换为BCD码
 260           - 隶属模块:PCF8563驱动模块
 261           - 函数属性:内部
 262           - 参数说明:x:待转换的数值         
 263           - 返回说明:转换后的值
 264           - 注:将值转为BCD格式,如 23转为BCD格式为 0x23
 265           ******************************************************************/
 266          
 267          unsigned char Val2BCD(unsigned char x)
 268          {
 269   1       return (x/10)*16+(x%10); //将十进制的数值十位乘以16,再加上个位,即得到BCD码
 270   1      } 
 271          
 272          /******************************************************************
 273           - 功能描述:读取时间
 274           - 隶属模块:PCF8563驱动模块
 275           - 函数属性:外部,供用户使用
 276           - 参数说明:无        
 277           - 返回说明:操作结果,0表示成功,1表示失败
 278           - 注:从PCF8563中读到的时间值,被装载到全局的外部结构体变量time中
 279           ******************************************************************/
 280          
 281          unsigned char P8563_Read_Time()
 282          { 
 283   1       unsigned char temp[7];
 284   1       if(!PCF8563_Read_Bytes(0x02,7,temp)) //读取时间,即读取PCF8563的时间寄存器,地址从0x02开始
 285   1       {
 286   2        //以下对读取到temp数组中的时间数据进行截取
 287   2        //并转换为十进制数值写入到time中去
 288   2        time.second=BCD2Val(temp[0]&0x7f); //秒
 289   2        time.minute=BCD2Val(temp[1]&0x7f); //分
 290   2        time.hour  =BCD2Val(temp[2]&0x3f); //小时
 291   2        time.day   =BCD2Val(temp[3]&0x3f); //日
 292   2        time.week  =BCD2Val(temp[4]&0x07); //星期
 293   2        time.month =BCD2Val(temp[5]&0x1f); //月
 294   2        time.year  =BCD2Val(temp[6]     ); //年
 295   2        return 0;
 296   2       }
 297   1       else
 298   1       return 1;
 299   1      }
 300          
 301          /******************************************************************
 302           - 功能描述:设置时间
C51 COMPILER V8.05a   66                                                                   03/06/2012 21:09:20 PAGE 6   

 303           - 隶属模块:PCF8563驱动模块
 304           - 函数属性:外部,供用户使用
 305           - 参数说明:无        
 306           - 返回说明:操作结果,0表示成功,1表示失败
 307           - 注:在设置时间前先将时间数据填充到time中去,随后调用此函数,时间
 308                 数据即被写入到PCF8563中,并以新设置的时间继续走时
 309           ******************************************************************/
 310          
 311          unsigned char P8563_Set_Time() 
 312          {
 313   1       unsigned char temp[7];
 314   1       unsigned char i;
 315   1       for(i=0;i<7;i++)
 316   1       {
 317   2        temp[i]=Val2BCD(((unsigned char *)(&time))[i]);//将time中的时间数据转换为BCD格式,并写入到temp数组中
 318   2       }
 319   1       return PCF8563_Write_Bytes(0x02,7,temp); //将temp数组的数据写入到PCF8563中
 320   1      }
 321          
 322          /******************************************************************
 323           - 功能描述:设置倒计时寄存器
 324           - 隶属模块:PCF8563驱动模块
 325           - 函数属性:外部,供用户使用
 326           - 参数说明:无        
 327           - 返回说明:操作结果,0表示成功,1表示失败
 328           - 注:先将要写入到倒计时寄存器的数据装入全局外部结构体变量dcounter中
 329                 随后调动此函数将数据写入
 330           ******************************************************************/
 331          
 332          
 333          /******************************************************************
 334           - 功能描述:读取倒计时寄存器
 335           - 隶属模块:PCF8563驱动模块
 336           - 函数属性:外部,供用户使用
 337           - 参数说明:无        
 338           - 返回说明:操作结果,0表示成功,1表示失败
 339           - 注:将倒计时寄存器的值读回到dcounter中
 340           ******************************************************************/
 341          
 342          
 343          /******************************************************************
 344           - 功能描述:将一个字符串转为32位的变量,比如"1234"转为1234
 345           - 隶属模块:公开函数模块
 346           - 函数属性:外部,用户可调用
 347           - 参数说明:str:指向待转换的字符串           
 348           - 返回说明:转换后的数值
 349           ******************************************************************/
 350          
 351          unsigned long strtou32(char *str) 
 352          {
 353   1       unsigned long temp=0;
 354   1       unsigned long fact=1;
 355   1       unsigned char len=strlen(str);
 356   1       unsigned char i;
 357   1       for(i=len;i>0;i--)
 358   1       {
 359   2        temp+=((str[i-1]-0x30)*fact);
 360   2        fact*=10;
 361   2       }
 362   1       return temp;
 363   1      }
 364          
C51 COMPILER V8.05a   66                                                                   03/06/2012 21:09:20 PAGE 7   

 365          
 366          void xianshi()
 367          {
 368   1       P0=0xfe;
 369   1       P3=0xff;
 370   1       P2=table[time.month/10];
 371   1       delay1(12);
 372   1       P2=0xff;
 373   1       delay1(2);
 374   1      
 375   1       P0=0xfd;
 376   1       P3=0xff;
 377   1       P2=table[time.month%10];
 378   1       delay1(12);
 379   1       P2=0xff;
 380   1       delay1(2);
 381   1      
 382   1       P0=0xfb;
 383   1       P3=0xff;
 384   1       P2=table[time.day/10];
 385   1       delay1(12);
 386   1       P2=0xff;
 387   1       delay1(2);
 388   1      
 389   1       P0=0xf7;
 390   1       P3=0xff;
 391   1       P2=table[time.day%10];
 392   1       delay1(12); 
 393   1       P2=0xff;
 394   1       delay1(2);
 395   1      
 396   1       P0=0xef;
 397   1       P3=0xff;
 398   1       P2=table[0];
 399   1       delay1(12);
 400   1       P2=0xff;
 401   1       delay1(2);
 402   1      
 403   1       P0=0xdf;
 404   1       P3=0xff;
 405   1       P2=table[time.week%10];
 406   1       delay1(12); 
 407   1       P2=0xff;
 408   1       delay1(2);
 409   1      
 410   1       P0=0xbf;
 411   1       P3=0xff;
 412   1       P2=table[time.second/10];
 413   1       delay1(15);
 414   1       P2=0xff;
 415   1       delay1(2);
 416   1      
 417   1       P0=0x7f;
 418   1       P3=0xff;
 419   1       P2=table[time.second%10];
 420   1       delay1(12);
 421   1       P2=0xff;
 422   1       
 423   1       P3=0x7f;
 424   1       P0=0xff;
 425   1       P2=table[time.hour/10];
 426   1       delay1(12);
C51 COMPILER V8.05a   66                                                                   03/06/2012 21:09:20 PAGE 8   

 427   1       P2=0xff;
 428   1       delay(2);
 429   1      
 430   1       P3=0xbf;
 431   1       P0=0xff;
 432   1       P2=table[time.hour%10];
 433   1       delay1(12);
 434   1       P2=0xff;
 435   1       delay1(2);
 436   1      
 437   1       P3=0xdf;
 438   1       P0=0xff;
 439   1       P2=table[time.minute/10];
 440   1       delay1(12);
 441   1       P2=0xff;
 442   1       delay1(2);
 443   1      
 444   1       P3=0xf7;
 445   1       P0=0xff;
 446   1       P2=table[time.minute%10];
 447   1       delay1(12);
 448   1       P2=0xff;
 449   1       delay1(2);
 450   1      
 451   1       P3=0xc7;
 452   1       P0=0xff;
 453   1       P2=0x7f;
 454   1       delay1(12);
 455   1       P2=0xff;  
 456   1      } 
 457          
 458          
 459          
 460          void main()
 461          {
 462   1       /*time.year  =12; //向time中装入要设置的时间数据
 463   1       time.month = 3;
 464   1       time.day   =6;
 465   1       time.hour  =21;
 466   1       time.minute=7;
 467   1       time.second=30;
 468   1       time.week  = 2;
 469   1       P8563_Set_Time(); //设置时间,即将time中的时间数据写入PCF8563 */
 470   1         
 471   1       while(1) //循环
 472   1       {
 473   2       P8563_Read_Time(); //读取时间
 474   2      
 475   2       xianshi();
 476   2       
 477   2       }
 478   1        while(1);
 479   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    964    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     17      39
   IDATA SIZE       =   ----    ----
C51 COMPILER V8.05a   66                                                                   03/06/2012 21:09:20 PAGE 9   

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