标题: DS3231时钟串口打印STM32程序源码 [打印本页]

作者: sangxin    时间: 2018-3-28 12:55
标题: DS3231时钟串口打印STM32程序源码
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, 下载次数: 281)



作者: kabala56    时间: 2018-5-15 10:38
非常感谢,一直没调通,试试这个。
作者: zb12138    时间: 2018-7-10 01:04
好用,感谢
作者: cooleaf    时间: 2018-12-26 16:26
非常感谢,试试这个。
作者: cooleaf    时间: 2018-12-26 16:27
非常感谢,试试这个。
作者: Lxuezhangya    时间: 2019-1-18 09:55
感谢楼主……
作者: baibaoyu    时间: 2019-4-4 10:24

DS3231时钟带闹钟程序
作者: Damaoagou    时间: 2019-11-4 20:08
感谢楼主
作者: 仰望星臣    时间: 2020-4-6 00:41
感谢楼主
作者: unibugs    时间: 2020-4-26 23:26
谢谢分享谢谢分享哦
作者: 曾现路    时间: 2021-5-23 20:48
找了好久才找到这个,下载试试,感谢楼主
作者: yuazhang    时间: 2021-8-3 15:31
是模拟I2
作者: yuazhang    时间: 2021-8-3 15:32
是模拟I2C接口,没有使用stm32的i2c接口,比较遗憾。
作者: jiangge156    时间: 2023-7-11 16:41
非常感谢,试试这个。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1