久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
stm32f103單片機使用DS1307源程序 測試成功
[打印本頁]
作者:
wxs732
時間:
2023-3-31 19:14
標題:
stm32f103單片機使用DS1307源程序 測試成功
看到很多小伙伴在測試這款模塊
就測試了一下
我用的stm32 f103系列單片機
模塊就是套包買的
#include "ds1307.h"
#include "sys.h"
#define uchar unsigned char
int year;
u8 month,day,hour,minutes,seconds;
//產生IIC 起始信號
void IIC_Start()
{
SDA_OUT();
IIC_SDA =1;
IIC_SCL = 1;
delay_us(4);
IIC_SDA = 0;
delay_us(4);
IIC_SCL = 0;
}
//產生IIC 停止信號
void IIC_Stop()
{
SDA_OUT();
IIC_SCL = 0;
IIC_SDA = 0;
delay_us(4);
IIC_SCL = 1;
delay_us(4);
IIC_SDA = 1;
}
//等待應答信號
//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; //時鐘信號拉低 開始數據傳輸
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 硬件 線路準備
IIC_Send_Byte(0xd0); //發送設備地址 寫命令
IIC_Wait_Ack(); //問答
IIC_Send_Byte(addr); //發送期間地址
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); //時
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) //根據x,來讓管腳B-8,輸出0或者1
//#define SCL(x) x?GPIO_ResetBits(GPIOB,GPIO_Pin_2): GPIO_SetBits(GPIOB,GPIO_Pin_2) //根據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
時間:
2024-1-7 10:54
嚴謹的人!很負責任的Wait_Ack。
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产欧美精品一区二区
|
99久久婷婷国产综合精品首页
|
久久精品
|
日韩精品在线播放
|
国产精品欧美一区二区三区不卡
|
国产亚洲精品久久久久久豆腐
|
99久久精品国产一区二区三区
|
日本特黄a级高清免费大片 特黄色一级毛片
|
日韩一区二区三区av
|
亚洲精品国产一区
|
www.色53色.com
|
欧美视频在线播放
|
午夜在线影院
|
精品一区二区免费视频
|
97久久精品午夜一区二区
|
91视频电影
|
久久国产精品免费视频
|
日韩亚洲一区二区
|
久热9
|
特黄色一级毛片
|
特级丰满少妇一级aaaa爱毛片
|
免费电影av
|
欧美激情国产精品
|
亚洲一区二区三区国产
|
国产婷婷
|
黄色网址大全在线观看
|
日本精品一区
|
日韩小视频在线
|
午夜爱爱网
|
欧美日韩在线免费
|
国产精品久久国产精品久久
|
欧美一区二区
|
国产精品久久精品
|
国产精品久久久久无码av
|
日日操av
|
伊人欧美视频
|
五月婷婷婷
|
亚洲一区中文字幕
|
中文字幕在线网
|
国产精品无码久久久久
|
国产极品粉嫩美女呻吟在线看人
|