找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3734|回复: 1
收起左侧

STC15w单片机万年历代码 PFC8563时钟程序

[复制链接]
ID:194956 发表于 2017-7-7 16:33 | 显示全部楼层 |阅读模式
STC15w4K58s4与PFC8563时钟芯片,LCD1602做万年历,用的时I2C总线方式,用的时候,将.h文件添加到main.c下边,要正确选择添加顺序,先是main.c文件,在是I2C.h,再添加其他两个,如果报错,就把这三个换换顺序总之是没问题的,亲测通过

0.png

单片机源程序如下:
  1. #include<reg51.h>
  2. #include<I2C.h>
  3. #include<stdlib.h>
  4. #include<1602.h>
  5. #include<led1602.h>
  6. #include<intrins.h>
  7. #define  uchar  unsigned char
  8.                   
  9. sfr P0M1=0x93;
  10. sfr P0M0=0x94;
  11. sfr P2M1=0x95;
  12. sfr P2M0=0x96;        
  13. idata  uchar  rom_sed[7];                          //当前发送值
  14. idata  uchar  rom_rec[7];                          //当前接收值
  15. uchar   dis[14];         

  16. bit  flag,flag1;      
  17.                      
  18. unsigned char tstr[20],tstr1[20];
  19. /*-------------------PCF初始化子程序------------------------*/
  20. initializa()                                                
  21. {
  22. data uchar i;
  23. rom_sed[0]=0x00;        //秒:0                        
  24. rom_sed[1]=0x20;                 //分 :54        
  25. rom_sed[2]=0x15;                 //时:12        
  26. rom_sed[3]=0x07;        //日  :7  
  27. rom_sed[4]=0x05;        //星期  :5
  28. rom_sed[5]=0x07;        //月:7  
  29. rom_sed[6]=0x17;        //年:17
  30. for(i=0;i<255;i++)delay();
  31. I_start();
  32. if(~I_send(0xa2))      //PCF_write地址                  
  33. {
  34. if(~I_send(0x02))     //PCF_status寄存器地址
  35. {
  36. for(i=0;i<6;i++)
  37. {
  38. if(~I_send(rom_sed[i]));
  39. else;
  40. }
  41. I_stop();
  42. }
  43. else;
  44. }
  45. else;
  46. }


  47. /*---------------------------读PCF子程序---------------------------*/
  48. pcf8563()                                                
  49. {
  50. data uchar i;
  51. I_start();
  52. if(~I_send(0xa2))                                 
  53.           {
  54.                    if(~I_send(0x02))                        
  55.             {
  56.                     I_start();
  57. if(~I_send(0xa3))                 
  58.                 {
  59.                           for(i=0;i<7;i++)
  60.                     {
  61.                             if(i==6)flag1=1;
  62.                             else flag1=0;
  63.                             rom_rec[i]=I_receive();
  64.                             switch(i)
  65.                         {
  66.                                        case 1: rom_rec[i] = rom_rec[i]&0x7f;break;
  67.                                        case 2:
  68.                                        case 3: rom_rec[i] =rom_rec[i]&0x3f;break;
  69.                                        case 4: rom_rec[i] = rom_rec[i]&0x07;break;
  70.                                        case 5: rom_rec[i] = rom_rec[i]&0x9f;break;
  71.                     default:break;
  72.                   }
  73.                      }
  74.                      I_stop();
  75.                   }
  76.         }
  77. }
  78. }


  79. void main()
  80. {        int j=0;
  81. initializa();
  82.         for(j=0;j<1000;j++)
  83. while(1)
  84. {
  85. pcf8563();
  86.         P0M0=0;
  87.         P0M1=0;
  88.     P2M0=0;
  89.         P2M1=0;

  90.          dis[0]=rom_rec[0]&0x0f;  //秒 个位   
  91.      dis[1]=rom_rec[0]>>4;       //十位
  92.      dis[2]=rom_rec[1]&0x0f;    //分
  93.      dis[3]=rom_rec[1]>>4;
  94.          dis[4]=rom_rec[2]&0x0f;  //时   
  95.      dis[5]=rom_rec[2]>>4;      
  96.      dis[6]=rom_rec[3]&0x0f;     //日
  97.          dis[7]=rom_rec[3]>>4;
  98.          dis[8]=rom_rec[4]&0x0f;  //星期   
  99.          dis[9]=rom_rec[4]>>4;      
  100.          dis[10]=rom_rec[5]&0x0f;    //月
  101.          dis[11]=rom_rec[5]>>4;
  102.          dis[12]=rom_rec[6]&0x0f;  //年   
  103.          dis[13]=rom_rec[6]>>4;

  104.         
  105.         tstr[0]=0x32;//2
  106.         tstr[1]=0x30; //0
  107.         tstr[2]=dis[13]+0x30;//年
  108.         tstr[3]=dis[12]+0x30;
  109.     tstr[4]=0x2E;
  110.         tstr[5]=dis[11]+0x30;//月
  111.         tstr[6]=dis[10]+0x30;
  112.     tstr[7]=0x2E;                 //点
  113.         tstr[8]=dis[7]+0x30;//日
  114.         tstr[9]=dis[6]+0x30;
  115.         tstr[10]=0x20;
  116.         tstr[11]=0x77;                 //小写w
  117.         tstr[12]= 0x65;   //小写e
  118.         tstr[13]=0x65;
  119.         tstr[14]=0x6B;                //小写k
  120.         tstr[15]=dis[8]+0x30;         //星期

  121.          tstr1[0]=0x74; //t
  122.          tstr1[1]=0x69; //i
  123.          tstr1[2]=0x6D; //m
  124.          tstr1[3]=0x65; //e
  125.           tstr1[4]=0x20;
  126.          tstr1[5]=dis[5]+0x30;//时
  127.          tstr1[6]=dis[4]+0x30;
  128. ……………………

  129. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
万年历.rar (2.95 KB, 下载次数: 56)




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:103667 发表于 2017-9-6 14:41 | 显示全部楼层
感谢楼主提供分享!下来学习学习。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表