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

📄 rtc.lst

📁 单片机与时钟芯片ds1302接口程序
💻 LST
📖 第 1 页 / 共 2 页
字号:

 180   2        }
 181   1      }
 182          /********************************************************************
 183          函 数 名:ds1302主程序
 184          功    能:读取ds1302的时间值并通过数码管进行显示
 185          说    明:
 186          调    用:
 187          入口参数:
 188          返 回 值:
 189          设    计:蓝海微芯           
 190          ***********************************************************************/
 191          void SET_RTC(void)
 192          {
 193   1        Get1302(&SClock);     /*把当前的时间值读取到数组SClock[3]中去*/
 194   1        SClock[0]|=0x80;      /*使ds1302的时间停止运行*/
 195   1        Set1302(SClock);      
 196   1      
 197   1      //  ch451_key = 0xff;
 198   1        key_flag++;
 199   1        if(key_flag==4)
 200   1        {
 201   2          key_flag = 0;
 202   2      //    ch451_write(0x600);
 203   2          SClock[0]&=0x7f;
 204   2          Set1302(SClock);
 205   2        }
 206   1        switch(key_flag)
 207   1        {
 208   2          case 1: 
 209   2          //ch451_write(0x6C0);   /*让秒显示位进行闪烁*/
 210   2          break;
 211   2          case 2: 
 212   2          //ch451_write(0x618);   /*让分显示位进行闪烁*/
 213   2          break;
 214   2          case 3: 
 215   2          //ch451_write(0x603);   /*让小时显示位进行闪烁*/
 216   2          break;
 217   2          default:break;
 218   2        }
 219   1      }
 220          /********************************************************************
 221          函 数 名:SET_TIME()
 222          功    能:根据按键值&按键被按下的次数作相应的处理
 223          说    明:
 224          调    用:
 225          入口参数:
 226          返 回 值:
 227          设    计:蓝海微芯           
 228          ***********************************************************************/
 229          void SET_TIME(void)
 230          {
 231   1        switch(key_flag)
 232   1        { 
 233   2          case 1:       
 234   2          SClock[0]&=0x7f;
 235   2      //    ch451_bcd(SClock[0]);       /*将秒显示位的十位和个位进行分离*/
 236   2          N++;                        /*秒值加一*/
 237   2          if(N==10)
 238   2          {
 239   3            N = 0;
 240   3            M++;
 241   3            if(M==6)
C51 COMPILER V7.50   RTC                                                                   06/12/2007 17:35:07 PAGE 5   

 242   3            {
 243   4              M = 0;
 244   4            }
 245   3          }
 246   2          M<<=4;
 247   2          SClock[0] = M|N|0x80;
 248   2          W1302(0x8e,0x00);           /*控制命令,wp=0,可以进行写操作*/
 249   2          W1302(0x80, SClock[0]);     /*将修改过的秒值写到ds1302中*/
 250   2      //    ch451_key=0xff;
 251   2          break;
 252   2          case 2:     
 253   2      //    ch451_bcd(SClock[1]);       /*将分显示位的十位和个位进行分离*/
 254   2          N++;                        /*分值加一*/
 255   2          if(N==10)
 256   2          {
 257   3            N = 0;
 258   3            M++;
 259   3            if(M==6)
 260   3          {
 261   4              M = 0;
 262   4            }
 263   3          }
 264   2          M<<=4;
 265   2          SClock[1] = M|N;
 266   2          W1302(0x8e,0x00);          /*控制命令,wp=0,可以进行写操作*/
 267   2          W1302(0x82, SClock[1]);    /*将修改过的分值写到ds1302中*/
 268   2      //    ch451_key=0xff;
 269   2          break;
 270   2          case 3: 
 271   2      //    ch451_bcd(SClock[2]);      /*将小时显示位的十位和个位进行分离*/
 272   2          N++;                       /*小时值加一*/
 273   2          if(N==4)
 274   2          {
 275   3            if(M==2)                 /*小时十位为2时个位最大值不能超过3*/
 276   3            {
 277   4              M = 0;
 278   4              N = 0;
 279   4            }
 280   3          }
 281   2          if(N==10)
 282   2          {
 283   3            N = 0;
 284   3            M++;
 285   3          }
 286   2          M<<=4;
 287   2          SClock[2] = M|N;
 288   2          W1302(0x8e,0x00);           /*控制命令,wp=0,可以进行写操作*/ 
 289   2          W1302(0x84,SClock[2]);      /*将修改过的分值写到ds1302中*/
 290   2      //    ch451_key=0xff;
 291   2          break;
 292   2          default:break;
 293   2        }
 294   1      //  ch451_key = 0xff;
 295   1      }
 296          /********************************************************************
 297          函 数 名:ds1302主程序
 298          功    能:读取ds1302的时间值并通过数码管进行显示
 299          说    明:
 300          调    用:
 301          设    计:蓝海微芯           
 302          ***********************************************************************/          
 303          main()
C51 COMPILER V7.50   RTC                                                                   06/12/2007 17:35:07 PAGE 6   

 304          {
 305   1        uchar WClock[3]={0x00,0x01,0x02};
 306   1        uchar RClock[3];
 307   1        uchar ds_hour;
 308   1        uchar ds_min;
 309   1        uchar ds_sec;
 310   1      
 311   1        P1_3 = 1;
 312   1        P1_5 = 1;
 313   1        Set1302(WClock);                  /*对ds1302显示的时间初值进行设定*/
 314   1      //  ch451_init();                     /*对ch451进行初始化*/
 315   1      //  ch451_write(0x403);               /*关看门狗开键盘显示*/
 316   1      //  ch451_write(0x580);               /*以译码方式进行显示*/
 317   1      //  ch451_write(CH451_DIG5|0x12);     /*数码管的第2位显示"-"*/
 318   1      //  ch451_write(CH451_DIG2|0x12);     /*数码管的第7位显示"-"*/
 319   1      //  ch451_key = 0xff;
 320   1        key_flag  = 0;
 321   1        EA  = 1;
 322   1        EX1  =1;
 323   1            
 324   1        while(1)
 325   1        {
 326   2      //    if(ch451_key==0x5A)             /*判断设置按键是否按下*/
 327   2      //    {
 328   2      //      SET_RTC();
 329   2      //    }
 330   2      //    if((key_flag!=0)&&(ch451_key==0x59))/*判断修改时间键是否被按下*/
 331   2      //    {
 332   2      //      SET_TIME();
 333   2      //    }
 334   2          Get1302(&RClock);                /*获取当前时间值*/
 335   2          ds_sec  = RClock[0]&0x7f;        /*得到当前时间秒值*/
 336   2          ds_min  = RClock[1];             /*得到当前时间分值*/
 337   2          ds_hour = RClock[2];             /*得到当前时间小时值*/
 338   2          
 339   2      //    ch451_bcd(ds_hour);              /*对小时值进行转化*/
 340   2      //    ch451_write(CH451_DIG0|M);       /*写小时高位*/
 341   2      //    ch451_write(CH451_DIG1|N);       /*写小时低位*/
 342   2      
 343   2      //    ch451_bcd(ds_min);               /*对分钟值进行转化*/
 344   2      //    ch451_write(CH451_DIG3|M);       /*写分钟高位*/
 345   2      //    ch451_write(CH451_DIG4|N);       /*写分钟低位*/
 346   2      
 347   2      //    ch451_bcd(ds_sec);               /*对秒值进行转化*/
 348   2      //    ch451_write(CH451_DIG6|M);       /*写秒值高位*/
 349   2      //    ch451_write(CH451_DIG7|N);       /*写秒值低位*/
 350   2        }
 351   1      }
 352          /*********************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    396    ----
   CONSTANT SIZE    =      3    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6      13
   IDATA SIZE       =   ----    ----
   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 + -