找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1913|回复: 2
打印 上一主题 下一主题
收起左侧

STC12C5A60S2 DS18B20+DS1302

[复制链接]
跳转到指定楼层
楼主
DS18B20+DS1302
万年历 + 温度显示



  1. #include "config.h"
  2. #include "USART1.h"
  3. #include "DS1302.h"
  4. #include "delay.h"
  5. #include "timer.h"

  6. /***************************3õê¼ê±¼ä¶¨òå**********************************/

  7. u8 time_buf[8] = {0x20,0x18,0x01,0x21,0x20,0x30,0x30,0x07};  // 3õê¼ê±¼ä
  8. u8 readtime[20];                                             // μ±Ç°ê±¼ä
  9. u8 sec_buf = 0;                                              // Ãë»o′æ
  10. u8 sec_flag = 0;                                             // Ãë±ê־λ

  11. u8 buf[100];
  12. u16 nian = 0,yue = 0,ri = 0;
  13. u16 shi = 0,fen = 0,miao = 0;
  14. u16 xingqi = 0;

  15. void ds1302_init(void)
  16. {
  17.         RST = 0;                                                                                       // RST½ÅÖÃμí
  18.         SCK = 0;                                                                                      // SCK½ÅÖÃμí
  19. }

  20. void ds1302_write_byte(u8 addr, u8 d)
  21. {
  22.         u8 i;
  23.         RST=1;                                                        // Æô¶ˉDS1302×üÏß      
  24.                                                                             // D′èëÄ¿±êμØÖ·£oaddr
  25.         addr = addr & 0xFE;                    // ×îμíλÖÃá㣬¼Ä′æÆ÷0λÎa0ê±D′£¬Îa1걶á
  26.         for (i = 0; i < 8; i ++)
  27.         {
  28.                 if (addr & 0x01) {IO = 1;}
  29.                 else {IO = 0;}
  30.                 SCK = 1;                                  // 2úéúê±Öó
  31.                 SCK = 0;
  32.                 addr = addr >> 1;
  33.         }      
  34.                                                                             // D′èëêy¾Y£od
  35.         for (i = 0; i < 8; i ++)
  36.         {
  37.                 if (d & 0x01) {IO = 1;}
  38.                 else {IO = 0;}
  39.                 SCK = 1;                                        // 2úéúê±Öó
  40.                 SCK = 0;
  41.                 d = d >> 1;
  42.         }
  43.         RST = 0;                                                      // í£Ö1DS1302×üÏß
  44. }

  45. u8 ds1302_read_byte(u8 addr)
  46. {
  47.         u8 i,temp;      
  48.         RST=1;                                                      // Æô¶ˉDS1302×üÏß
  49.                                                                           // D′èëÄ¿±êμØÖ·£oaddr
  50.         addr = addr | 0x01;     // ×îμíλÖøߣ¬¼Ä′æÆ÷0λÎa0ê±D′£¬Îa1걶á
  51.         for (i = 0; i < 8; i ++)
  52.         {
  53.                 if (addr & 0x01) {IO = 1;}
  54.                 else {IO = 0;}
  55.                 SCK = 1;
  56.                 SCK = 0;
  57.                 addr = addr >> 1;
  58.         }      
  59.                                                                           // êä3öêy¾Y£otemp
  60.         for (i = 0; i < 8; i ++)
  61.         {
  62.                 temp = temp >> 1;
  63.                 if (IO){temp |= 0x80;}
  64.                 else{temp &= 0x7F;}
  65.                 SCK = 1;
  66.                 SCK = 0;
  67.         }      
  68.         RST = 0;                                                    // í£Ö1DS1302×üÏß
  69.         return temp;
  70. }

  71. void ds1302_write_time(void)
  72. {
  73.         ds1302_write_byte(ds1302_control_add,0x00);                          // 1رÕD′±£»¤
  74.         ds1302_write_byte(ds1302_sec_add,0x80);                                    // ÔYí£ê±Öó
  75.         //ds1302_write_byte(ds1302_charger_add,0xa9);            // ä¸á÷3äμç
  76.         ds1302_write_byte(ds1302_year_add,time_buf[1]);                // Äê
  77.         ds1302_write_byte(ds1302_month_add,time_buf[2]);        // ÔÂ
  78.         ds1302_write_byte(ds1302_date_add,time_buf[3]);                // èÕ
  79.         ds1302_write_byte(ds1302_hr_add,time_buf[4]);                  // ê±
  80.         ds1302_write_byte(ds1302_min_add,time_buf[5]);                // ·Ö
  81.         ds1302_write_byte(ds1302_sec_add,time_buf[6]);                // Ãë
  82.         ds1302_write_byte(ds1302_day_add,time_buf[7]);                // Öü
  83.         ds1302_write_byte(ds1302_control_add,0x80);                          // ′ò¿aD′±£»¤     
  84. }

  85. void ds1302_read_time(void)  
  86. {
  87.         time_buf[1]=ds1302_read_byte(ds1302_year_add);                      // Äê
  88.         time_buf[2]=ds1302_read_byte(ds1302_month_add);                      // ÔÂ
  89.         time_buf[3]=ds1302_read_byte(ds1302_date_add);                      // èÕ
  90.         time_buf[4]=ds1302_read_byte(ds1302_hr_add);                        // ê±
  91.         time_buf[5]=ds1302_read_byte(ds1302_min_add);                        // ·Ö
  92.         time_buf[6]=(ds1302_read_byte(ds1302_sec_add))&0x7f;    // Ã룬Æá±ÎÃëμÄμú7룬±üÃa3¬3ö59
  93.         time_buf[7]=ds1302_read_byte(ds1302_day_add);                        // Öü        
  94. }

  95. void display()
  96. {
  97.         sprintf(buf,"DS16(85,50,'%4d Äê %02d ÔÂ %02d èÕ',15);\r\n",(int)nian,(int)yue,(int)ri);PrintString1(buf);delay_ms(10);
  98.         if (xingqi == 1){sprintf(buf,"DS16(130,100,' Monday    ',15);\r\n");PrintString1(buf);delay_ms(10);}
  99.         if (xingqi == 2){sprintf(buf,"DS16(130,100,' Tuesday   ',15);\r\n");PrintString1(buf);delay_ms(10);}
  100.         if (xingqi == 3){sprintf(buf,"DS16(130,100,' Wednesday ',15);\r\n");PrintString1(buf);delay_ms(10);}
  101.         if (xingqi == 4){sprintf(buf,"DS16(130,100,' Thursdy   ',15);\r\n");PrintString1(buf);delay_ms(10);}
  102.         if (xingqi == 5){sprintf(buf,"DS16(130,100,' Friday    ',15);\r\n");PrintString1(buf);delay_ms(10);}
  103.         if (xingqi == 6){sprintf(buf,"DS16(130,100,' Saturday  ',15);\r\n");PrintString1(buf);delay_ms(10);}
  104.         if (xingqi == 7){sprintf(buf,"DS16(130,100,' Sunday    ',15);\r\n");PrintString1(buf);delay_ms(10);}
  105.         sprintf(buf,"DS16(115,150,'%02d : %02d : %02d ',15);\r\n",(int)shi,(int)fen,(int)miao);PrintString1(buf);delay_ms(10);
  106. }

  107. void sys_init()
  108. {                 
  109.          delay_ms(255);
  110.          PrintString1("CLS(0);");
  111.          PrintString1("CLS(0);");
  112.          PrintString1("\r\n");
  113.          delay_ms(255);
  114. }


复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:402815 发表于 2018-9-26 19:20 | 只看该作者
本帖最后由 asjcoi 于 2018-9-26 19:21 编辑

基于 STC12C5A60S2的
回复

使用道具 举报

板凳
ID:1 发表于 2018-9-26 20:28 | 只看该作者
楼主能分享一下源码工程包吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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