久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
stm32f103單片機(jī)使用DS1307源程序 測(cè)試成功
[打印本頁]
作者:
wxs732
時(shí)間:
2023-3-31 19:14
標(biāo)題:
stm32f103單片機(jī)使用DS1307源程序 測(cè)試成功
看到很多小伙伴在測(cè)試這款模塊
就測(cè)試了一下
我用的stm32 f103系列單片機(jī)
模塊就是套包買的
#include "ds1307.h"
#include "sys.h"
#define uchar unsigned char
int year;
u8 month,day,hour,minutes,seconds;
//產(chǎn)生IIC 起始信號(hào)
void IIC_Start()
{
SDA_OUT();
IIC_SDA =1;
IIC_SCL = 1;
delay_us(4);
IIC_SDA = 0;
delay_us(4);
IIC_SCL = 0;
}
//產(chǎn)生IIC 停止信號(hào)
void IIC_Stop()
{
SDA_OUT();
IIC_SCL = 0;
IIC_SDA = 0;
delay_us(4);
IIC_SCL = 1;
delay_us(4);
IIC_SDA = 1;
}
//等待應(yīng)答信號(hào)
//1 接收失敗 0 接收成功
u8 IIC_Wait_Ack()
{
u8 ucErrTime = 0;
SDA_IN();
IIC_SDA = 1;
delay_us(1);
IIC_SCL = 1;
delay_us(1);
while(READ_SDA)
{
ucErrTime ++;
if(ucErrTime>250)
{
IIC_Stop();
return 1;
}
}
IIC_SCL = 0;
return 0;
}
void IIC_Ack()
{
IIC_SCL = 0;
SDA_OUT();
IIC_SDA = 0;
delay_us(2);
IIC_SCL =1;
delay_us(2);
IIC_SCL = 0;
}
void IIC_NAck()
{
IIC_SCL = 0;
SDA_OUT();
IIC_SDA =1;
delay_us(2);
IIC_SCL =1;
delay_us(2);
IIC_SCL = 0;
}
u8 IIC_Send_Byte(u8 txd)
{
u8 t;
SDA_OUT();
IIC_SCL = 0; //時(shí)鐘信號(hào)拉低 開始數(shù)據(jù)傳輸
for(t=0;t<8;t++)
{
IIC_SDA = (txd&0x80)>>7;
txd<<=1; delay_us(2);
IIC_SCL = 1;delay_us(2);
IIC_SCL = 0;delay_us(2);
}
}
u8 IIC_Read_Byte(unsigned char ack)
{
u8 i,receive = 0;
SDA_IN();
for(i=0;i<8;i++)
{
IIC_SCL = 0;
delay_us(2);
IIC_SCL = 1;
receive<<=1;
if(READ_SDA)
receive++;
delay_us(1);
}
if(!ack)
IIC_NAck();
else
IIC_Ack();
return receive;
}
unsigned char DS1307_WriteOneByte(u8 addr,u8 data)
{
u8 temp;
//temp = (data/10*16)+(data%10);
temp = data/10;
temp<<=4;
temp = data%10+temp;
IIC_Start();
IIC_Send_Byte(0xd0);
IIC_Wait_Ack();
IIC_Send_Byte(addr);
IIC_Wait_Ack();
IIC_Send_Byte(temp);
IIC_Stop();
return 0;
}
u8 DS1307_ReadOneByte(u8 addr)
{
u8 temp,dat;
IIC_Start(); //IIC 硬件 線路準(zhǔn)備
IIC_Send_Byte(0xd0); //發(fā)送設(shè)備地址 寫命令
IIC_Wait_Ack(); //問答
IIC_Send_Byte(addr); //發(fā)送期間地址
IIC_Wait_Ack();
IIC_Stop();
IIC_Start();
IIC_Send_Byte(0xd1);
IIC_Wait_Ack();
dat = IIC_Read_Byte(addr);
IIC_NAck();
IIC_Stop();
//temp = dat/16;
//dat = dat%16;
//dat = dat+temp*10;
dat = (dat/16)*10+dat%16;
return (dat);
}
void shizhong_WriteOneByte(u8 addr,u8 data)
{
u8 temp;
temp = (data/10*16)+(data%10);
IIC_Start();
IIC_Send_Byte(0XD0);
IIC_Wait_Ack();
IIC_Send_Byte(addr);
IIC_Wait_Ack();
IIC_Send_Byte(temp);
IIC_Stop();
delay_ms(10);
}
u8 shizhong_ReadOneByte(u8 addr)
{
u8 temp,dat;
IIC_Start();
IIC_Send_Byte(0xd0);
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0xd1);
IIC_Wait_Ack();
//temp = IIC_Read_Byte(addr);
temp = IIC_Read_Byte(0);
IIC_NAck();
IIC_Stop();
dat = (temp/16*10)+(temp%16);
return dat;
}
void DS1307_NOW_TIME()
{
seconds = DS1307_ReadOneByte(0x00);
minutes = DS1307_ReadOneByte(0x01);
hour = DS1307_ReadOneByte(0x02);
day = DS1307_ReadOneByte(0x04);
month = DS1307_ReadOneByte(0x05);
year = DS1307_ReadOneByte(0x06);
printf("%d:%d:%d %d-%d-%d\r\n",year, month, day, hour, minutes, seconds);
}
void DS1307_Read()
{
seconds = DS1307_ReadOneByte(0X00); //秒
minutes = DS1307_ReadOneByte(0X01); //分
hour = DS1307_ReadOneByte(0X02); //時(shí)
day = DS1307_ReadOneByte(0X04); //日期
month = DS1307_ReadOneByte(0X05); //月
year = DS1307_ReadOneByte(0X06)+2000; //年
printf("%d:%d:%d %d-%d-%d\r\n",year, month, day, hour, minutes, seconds);
}
void DS1307_GPIO_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2; //PB1 PB2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_2);
//DS1307_WriteOneByte(u8 addr,u8 data)
// DS1307_WriteOneByte(0x00,0x1e); //
// DS1307_WriteOneByte(0x01,0x1f);
// DS1307_WriteOneByte(0x02,0x12);
// //DS1307_WriteOneByte(0x03,0x00);
// DS1307_WriteOneByte(0x04,0x1f);
// DS1307_WriteOneByte(0x05,0x03);
// DS1307_WriteOneByte(0x06,0x17);
shizhong_WriteOneByte(0x00,0x00);
shizhong_WriteOneByte(0x00,0x1e); //
shizhong_WriteOneByte(0x01,0x38);
shizhong_WriteOneByte(0x02,0x12);
shizhong_WriteOneByte(0x04,0x1f);
shizhong_WriteOneByte(0x05,0x03);
shizhong_WriteOneByte(0x06,0x17);
}
這是 C 文件 ,下面是 H 文件
#ifndef __DS1307_H
#define __DS1307_H
#include "sys.h"
#include "delay.h"
#include "usart.h"
//#define SDA(x) x?GPIO_ResetBits(GPIOB,GPIO_Pin_1): GPIO_SetBits(GPIOB,GPIO_Pin_1) //根據(jù)x,來讓管腳B-8,輸出0或者1
//#define SCL(x) x?GPIO_ResetBits(GPIOB,GPIO_Pin_2): GPIO_SetBits(GPIOB,GPIO_Pin_2) //根據(jù)x,來讓管腳B-5,輸出0或者1
//#define SDA_IN() {GPIOB->CRL &=0xffffff0f;GPIOB->CRL |=8<<4;}
//#define SDA_OUT() {GPIOB->CRL &=0xffffff0f;GPIOB->CRL |=3<<4;}
#define IIC_SCL PBout(2)
#define IIC_SDA PBout(1)
#define READ_SDA PBin(1)
//SDA PB1
//SCL PB2
void DS1307_GPIO_Init();
void DS1307_Read();
#define IIC_SDA_PORT GPIOB
#define IIC_SDA_IO GPIO_Pin_1
#define IIC_SDA_RCC RCC_APB2Periph_GPIOB
#define SDA_IN() {GPIOB->CRL &=0xffffff0f;GPIOB->CRL |=0x00000080;}
#define SDA_OUT() {GPIOB->CRL &=0xffffff0f;GPIOB->CRL |=0x00000030;}
extern int year;
extern u8 month,day,hour,minutes,seconds;
#endif
作者:
isyido
時(shí)間:
2024-1-7 10:54
嚴(yán)謹(jǐn)?shù)娜耍『茇?fù)責(zé)任的Wait_Ack。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产亚洲一区二区三区
|
99热视
|
午夜成人免费视频
|
日本不卡一区二区三区在线观看
|
精品视频亚洲
|
九九九视频精品
|
亚洲成人av在线播放
|
精品福利在线
|
成人久久18免费网站
|
四虎成人精品永久免费av九九
|
国产成人网
|
国产国产精品
|
精品久久久久久
|
奇米四色影视
|
久久久久久久久国产精品
|
欧美精品一区二区三区视频
|
最新国产精品
|
在线一区二区三区
|
国产一区亚洲
|
国产免费拔擦拔擦8x高清
|
午夜亚洲
|
精品国产一区二区三区性色av
|
国产在线视频在线观看
|
粉嫩av
|
少妇一级淫片免费放播放
|
亚洲精品视频在线观看免费
|
射久久
|
在线看亚洲
|
亚洲视频在线观看一区二区三区
|
精品成人av
|
日韩高清一区
|
午夜激情视频
|
亚洲人成人一区二区在线观看
|
久久麻豆精品
|
av大全在线
|
日本天堂一区二区
|
老司机成人在线
|
欧美日本韩国一区二区
|
国内精品免费久久久久软件老师
|
看av电影
|
中文字幕在线看第二
|