标题:
DS3231时钟串口打印STM32程序源码
[打印本页]
作者:
sangxin
时间:
2018-3-28 12:55
标题:
DS3231时钟串口打印STM32程序源码
DS3231时钟串口 STM32单片机源程序如下:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "DS3231.h"
//使用的时钟模块为DS3221, 采用模拟IIC驱动
//时钟模块引脚接线 SCL-> PB10
// SDA-> PB11
//32K和SQW引脚悬空,什么都不接。
int main(void)
{
u8 t=0;
delay_init(); //延时函数初始化
NVIC_Configuration();// 设置中断优先级分组
uart_init(9600); //串口初始化为9600
LED_Init(); //初始化与LED连接的硬件接口
DS3231_Init();
// DS3231_Set(16,11,27,21,03,30); 首次设置时间,设置完成后注释掉,重新下载一次程序即可掉电保存
//年,月,日,时,分,秒
while(1)
{
get_show_time();
if(t!=calendar.sec)
{
t=calendar.sec;
printf("年月日:");
printf("%ld,%d,%d\r\n",calendar.w_year+2000,calendar.w_month,calendar.w_date);
printf("时分秒:");
printf("%d,%d,%d\r\n",calendar.hour,calendar.min,calendar.sec);
LED0=!LED0;
}
}
}
复制代码
#include "DS3231.h"
#include "myiic.h"
#include "delay.h"
#include "sys.h"
_calendar_obj calendar;
#define DS3231_WriteAddress 0xD0
#define DS3231_ReadAddress 0xD1
u8 BCD2HEX(u8 val)
{
u8 i;
i= val&0x0f;
val >>= 4;
val &= 0x0f;
val *= 10;
i += val;
return i;
}
u16 B_BCD(u8 val)
{
u8 i,j,k;
i=val/10;
j=val%10;
k=j+(i<<4);
return k;
}
void I2cByteWrite(u8 addr,u8 bytedata)
{
IIC_Start();
delay_us(5);
IIC_Send_Byte(DS3231_WriteAddress);
IIC_Wait_Ack();
delay_us(5);
IIC_Send_Byte(addr);
IIC_Wait_Ack();
delay_us(5);
IIC_Send_Byte(bytedata);
IIC_Wait_Ack();
delay_us(5);
IIC_Stop();
}
u8 I2cByteRead(u8 addr)
{
u8 Dat=0;
IIC_Start();
IIC_Send_Byte(DS3231_WriteAddress);
IIC_Wait_Ack();
delay_us(5);
IIC_Send_Byte(addr);
IIC_Wait_Ack();
delay_us(5);
IIC_Start();
IIC_Send_Byte(DS3231_ReadAddress);
IIC_Wait_Ack();
delay_us(5);
Dat=IIC_Read_Byte(1);
IIC_Stop();
return Dat;
}
void DS3231_Init(void)
{
IIC_Init();
I2cByteWrite(0x0e,0);
delay_ms(2);
I2cByteWrite(0x0f,0x0);
delay_ms(2);
}
void DS3231_Get(void)
{
calendar.w_year=I2cByteRead(0x06);
calendar.w_month=I2cByteRead(0x05);
calendar.w_date=I2cByteRead(0x04);
calendar.hour=I2cByteRead(0x02);
calendar.min=I2cByteRead(0x01);
calendar.sec=I2cByteRead(0x00);
}
void DS3231_Set(u8 yea,u8 mon,u8 da,u8 hou,u8 min,u8 sec)
{
u8 temp=0;
temp=B_BCD(yea);
I2cByteWrite(0x06,temp);
temp=B_BCD(mon);
I2cByteWrite(0x05,temp);
temp=B_BCD(da);
I2cByteWrite(0x04,temp);
temp=B_BCD(hou);
I2cByteWrite(0x02,temp);
temp=B_BCD(min);
I2cByteWrite(0x01,temp);
temp=B_BCD(sec);
I2cByteWrite(0x00,temp);
}
void get_show_time(void)
{
calendar.w_year=I2cByteRead(0x06);
calendar.w_year=BCD2HEX(calendar.w_year);
calendar.w_month=I2cByteRead(0x05);
calendar.w_month=BCD2HEX(calendar.w_month);
calendar.w_date=I2cByteRead(0x04);
calendar.w_date=BCD2HEX(calendar.w_date);
calendar.hour=I2cByteRead(0x02);
calendar.hour&=0x3f;
calendar.hour=BCD2HEX(calendar.hour);
calendar.min=I2cByteRead(0x01);
calendar.min=BCD2HEX(calendar.min);
calendar.sec=I2cByteRead(0x00);
calendar.sec=BCD2HEX(calendar.sec);
}
复制代码
所有资料51hei提供下载:
DS3231时钟串口打印.rar
(293.73 KB, 下载次数: 281)
2018-3-28 17:17 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
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