找回密码
 立即注册

QQ登录

只需一步,快速开始

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

DS3231时钟串口打印STM32程序源码

  [复制链接]
跳转到指定楼层
楼主
ID:283453 发表于 2018-3-28 12:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DS3231时钟串口 STM32单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "DS3231.h"

  6. //使用的时钟模块为DS3221, 采用模拟IIC驱动  
  7. //时钟模块引脚接线  SCL-> PB10
  8. //                 SDA-> PB11
  9. //32K和SQW引脚悬空,什么都不接。

  10. int main(void)
  11. {       


  12.         u8  t=0;       
  13.         delay_init();                     //延时函数初始化       
  14.         NVIC_Configuration();// 设置中断优先级分组
  15.         uart_init(9600);         //串口初始化为9600
  16.         LED_Init();                           //初始化与LED连接的硬件接口
  17.          
  18.         DS3231_Init();
  19.          
  20. //        DS3231_Set(16,11,27,21,03,30);  首次设置时间,设置完成后注释掉,重新下载一次程序即可掉电保存
  21.              //年,月,日,时,分,秒
  22.         while(1)
  23.         {
  24.                
  25.                                 get_show_time();

  26.                         if(t!=calendar.sec)
  27.                 {
  28.                         t=calendar.sec;
  29.                         printf("年月日:");
  30.                         printf("%ld,%d,%d\r\n",calendar.w_year+2000,calendar.w_month,calendar.w_date);
  31.                         printf("时分秒:");
  32.                         printf("%d,%d,%d\r\n",calendar.hour,calendar.min,calendar.sec);
  33.                         LED0=!LED0;
  34.                 }
  35.                
  36.         }         
  37. }


复制代码
  1. #include "DS3231.h"
  2. #include "myiic.h"
  3. #include "delay.h"   
  4. #include "sys.h"  
  5.      
  6. _calendar_obj calendar;

  7. #define DS3231_WriteAddress 0xD0   
  8. #define DS3231_ReadAddress  0xD1

  9. u8 BCD2HEX(u8 val)
  10. {
  11.     u8 i;
  12.     i= val&0x0f;
  13.     val >>= 4;
  14.     val &= 0x0f;
  15.     val *= 10;
  16.     i += val;
  17.    
  18.     return i;
  19. }

  20. u16 B_BCD(u8 val)
  21. {
  22.   u8 i,j,k;
  23.   i=val/10;
  24.   j=val%10;
  25.   k=j+(i<<4);
  26.   return k;
  27. }


  28. void I2cByteWrite(u8 addr,u8 bytedata)
  29. {
  30.   IIC_Start();
  31.   delay_us(5);
  32.   IIC_Send_Byte(DS3231_WriteAddress);
  33.   IIC_Wait_Ack();
  34.   delay_us(5);
  35.   IIC_Send_Byte(addr);
  36.   IIC_Wait_Ack();
  37.   delay_us(5);
  38.   IIC_Send_Byte(bytedata);
  39.   IIC_Wait_Ack();
  40.   delay_us(5);
  41.   IIC_Stop();
  42. }       


  43. u8 I2cByteRead(u8 addr)
  44. {
  45.   u8 Dat=0;
  46.   
  47.   IIC_Start();
  48.   IIC_Send_Byte(DS3231_WriteAddress);
  49.   IIC_Wait_Ack();
  50.   delay_us(5);
  51.   IIC_Send_Byte(addr);
  52.   IIC_Wait_Ack();
  53.   delay_us(5);
  54.   IIC_Start();
  55.   IIC_Send_Byte(DS3231_ReadAddress);
  56.   IIC_Wait_Ack();
  57.   delay_us(5);
  58.   Dat=IIC_Read_Byte(1);
  59.   IIC_Stop();
  60.   return Dat;
  61. }



  62. void DS3231_Init(void)
  63. {
  64.         IIC_Init();
  65.         I2cByteWrite(0x0e,0);
  66.         delay_ms(2);
  67.     I2cByteWrite(0x0f,0x0);
  68.         delay_ms(2);
  69. }
  70. void DS3231_Get(void)
  71. {
  72.   calendar.w_year=I2cByteRead(0x06);  
  73.   calendar.w_month=I2cByteRead(0x05);  
  74.   calendar.w_date=I2cByteRead(0x04);
  75.   calendar.hour=I2cByteRead(0x02);  
  76.   calendar.min=I2cByteRead(0x01);
  77.   calendar.sec=I2cByteRead(0x00);
  78. }

  79. void DS3231_Set(u8 yea,u8 mon,u8 da,u8 hou,u8 min,u8 sec)
  80. {
  81.   u8 temp=0;
  82.   
  83.   temp=B_BCD(yea);
  84.   I2cByteWrite(0x06,temp);
  85.   
  86.   temp=B_BCD(mon);
  87.   I2cByteWrite(0x05,temp);
  88.    
  89.   temp=B_BCD(da);
  90.   I2cByteWrite(0x04,temp);
  91.   
  92.   temp=B_BCD(hou);
  93.   I2cByteWrite(0x02,temp);
  94.   
  95.   temp=B_BCD(min);
  96.   I2cByteWrite(0x01,temp);
  97.   
  98.   temp=B_BCD(sec);
  99.   I2cByteWrite(0x00,temp);
  100. }


  101. void get_show_time(void)
  102. {


  103. calendar.w_year=I2cByteRead(0x06);  
  104. calendar.w_year=BCD2HEX(calendar.w_year);


  105. calendar.w_month=I2cByteRead(0x05);
  106. calendar.w_month=BCD2HEX(calendar.w_month);


  107. calendar.w_date=I2cByteRead(0x04);  
  108. calendar.w_date=BCD2HEX(calendar.w_date);


  109. calendar.hour=I2cByteRead(0x02);
  110. calendar.hour&=0x3f;                  
  111. calendar.hour=BCD2HEX(calendar.hour);


  112. calendar.min=I2cByteRead(0x01);
  113. calendar.min=BCD2HEX(calendar.min);
  114.   
  115.   
  116. calendar.sec=I2cByteRead(0x00);
  117. calendar.sec=BCD2HEX(calendar.sec);
  118. }


复制代码


所有资料51hei提供下载:
DS3231时钟串口打印.rar (293.73 KB, 下载次数: 277)


评分

参与人数 1黑币 +10 收起 理由
zb12138 + 10

查看全部评分

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

使用道具 举报

沙发
ID:310439 发表于 2018-5-15 10:38 | 只看该作者
非常感谢,一直没调通,试试这个。
回复

使用道具 举报

板凳
ID:189601 发表于 2018-7-10 01:04 | 只看该作者
好用,感谢
回复

使用道具 举报

地板
ID:430492 发表于 2018-12-26 16:26 | 只看该作者
非常感谢,试试这个。
回复

使用道具 举报

5#
ID:430492 发表于 2018-12-26 16:27 | 只看该作者
非常感谢,试试这个。
回复

使用道具 举报

6#
ID:470005 发表于 2019-1-18 09:55 | 只看该作者
感谢楼主……
回复

使用道具 举报

7#
ID:333807 发表于 2019-4-4 10:24 | 只看该作者

DS3231时钟带闹钟程序
回复

使用道具 举报

8#
ID:394770 发表于 2019-11-4 20:08 | 只看该作者
感谢楼主
回复

使用道具 举报

9#
ID:615301 发表于 2020-4-6 00:41 | 只看该作者
感谢楼主
回复

使用道具 举报

10#
ID:489687 发表于 2020-4-26 23:26 | 只看该作者
谢谢分享谢谢分享哦
回复

使用道具 举报

11#
ID:422924 发表于 2021-5-23 20:48 | 只看该作者
找了好久才找到这个,下载试试,感谢楼主
回复

使用道具 举报

12#
ID:702641 发表于 2021-8-3 15:31 | 只看该作者
是模拟I2
回复

使用道具 举报

13#
ID:702641 发表于 2021-8-3 15:32 | 只看该作者
是模拟I2C接口,没有使用stm32的i2c接口,比较遗憾。
回复

使用道具 举报

14#
ID:1088106 发表于 2023-7-11 16:41 | 只看该作者
非常感谢,试试这个。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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