首页 > 其他分享 >蓝桥杯—DS1302

蓝桥杯—DS1302

时间:2024-04-07 23:33:39浏览次数:28  
标签:char DS1302 Ds1302 unsigned 蓝桥 Write Byte nop

目录

1.管脚

2.时序&官方提供的读写函数

3.如何使用读写函数

4.如何在数码管中显示在DS1302中读取出的数据?


1.管脚

2.时序&官方提供的读写函数

/*	# 	DS1302代码片段说明
	1. 	本文件夹中提供的驱动代码供参赛选手完成程序设计参考。
	2. 	参赛选手可以自行编写相关代码或以该代码为基础,根据所选单片机类型、运行速度和试题
		中对单片机时钟频率的要求,进行代码调试和修改。
*/								

//
void Write_Ds1302(unsigned  char temp) 
{
	unsigned char i;
	for (i=0;i<8;i++)     	
	{ 
		SCK = 0;
		SDA = temp&0x01;
		temp>>=1; 
		SCK=1;
	}
}   

//
void Write_Ds1302_Byte( unsigned char address,unsigned char dat )     
{
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
 	RST=1; 	_nop_();  
 	Write_Ds1302(address);	
 	Write_Ds1302(dat);		
 	RST=0; 
}

//
unsigned char Read_Ds1302_Byte ( unsigned char address )
{
 	unsigned char i,temp=0x00;
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
 	RST=1;	_nop_();
 	Write_Ds1302(address);
 	for (i=0;i<8;i++) 	
 	{		
		SCK=0;
		temp>>=1;	
 		if(SDA)
 		temp|=0x80;	
 		SCK=1;
	} 
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
	SCK=1;	_nop_();
	SDA=0;	_nop_();
	SDA=1;	_nop_();
	return (temp);			
}

3.如何使用读写函数

以时分秒为例

在写中

void Set_Rtc(unsigned char* ucRtc)
{
    Write_Ds1302_Byte(0x8e,0x00);
    Write_Ds1302_Byte(0x84,ucRtc[0]);
    Write_Ds1302_Byte(0x82,ucRtc[1]);
    Write_Ds1302_Byte(0x80,ucRtc[2]);
    Write_Ds1302_Byte(0x8e,0x80);
}

void Read_Rtc(unsigned char)
{
    unsigned char i;
    for(i=0;i<3;i++)
        ucRtc[i] = Read_Ds1302_Byte(0x85-2*i);
}

记得加入DS1302的驱动中声明函数,并在变量声明中定义数组

unsigned char ucRtc[3] = {0x23,0x59,0x55}  //上电显示默认时间   23 59 55

需要在初始化区域中调用Set_Rtc();函数,参数写ucRtc

在信息读取区域中调用Read_Rtc();函数,参数写ucRtc

4.如何在数码管中显示在DS1302中读取出的数据?

因为在DS1302中使用的是BCD码,需要进行处理

需要对十位和个位进行相除和取余,11则是横杠的显示 在共阳极数码管中为

1011 1111,0xbf,在数码管数组中放入第11位

仿真显示效果

在DS1302中均是先写地址,再写数据,先打开保护再对需要操作的RTC进行操作然后再关闭保护保证数据的稳定性(保护只有写的时候需要) 

标签:char,DS1302,Ds1302,unsigned,蓝桥,Write,Byte,nop
From: https://blog.csdn.net/m0_73890636/article/details/137300710

相关文章

  • 螺旋矩阵(蓝桥杯-Python)
    importosimportsys#请在此输入您的代码n,m=input().split()n=int(n)m=int(m)arr=[[0forjinrange(m)]foriinrange(n)]r,c=input().split()r=int(r)c=int(c)defdo_l():globaln,m,r,c,arr#四个方向#右下左上......
  • FQQQ的蓝桥杯
    蓝桥杯15届备战Day213届蓝桥杯省赛文章目录蓝桥杯15届备战Day2前言主观题程序设计1.CUBEMAX配置2.代码部分(分享思路和简单实现任务)总结前言备战蓝桥杯嵌入式,刷题第二天,对象为13届蓝桥杯省赛题工程代码在此网盘提取码:xrpg提示:以下是本篇文章正文内容,下面案......
  • 【51单片机入门记录】RTC(实时时钟)-DS1302应用
    目录一、DS1302相关写函数(1)Write_Ds1302(2)Write_Ds1302_Byte二、DS130相关数据操作流程及相关代码(1)DS1302初始化数据操作流程及相关代码(shijian[i]/10<<4)|(shijian[i]%10)的作用:将十进制转换为BCD码。代码呈现(2)DS1302获取数据操作流程及相关代码代码呈现三、应用举例-......
  • 【每周例题】蓝桥杯 C++ 鸡哥的蛋糕大作战
    鸡哥的蛋糕大作战题目鸡哥的蛋糕大作战 题目分析1.使用一个for循环遍历全数,寻找最大洞的数2.使用一个while进行数位拆分,寻找洞的数量3.使用if从两个条件寻找最大洞的最小数符合最大洞的数洞数相同中的最小数代码#include<iostream>#include<bits/stdc++.h>using......
  • 【每周例题】蓝桥杯 C++ 鸡哥的奇特密码
    鸡哥的奇特密码题目鸡哥的奇特密码 题目分析 1.首先,我们需要想到用一个for循环去遍历整个数组,用if寻找出需要我们处理的部分2.如何处理:将重复的L丢出数组,可以运用pop_back()函数3.为了避免越界,我们可以从后往前遍历代码#include<iostream>#include<bits/stdc++.h>u......
  • 第十四届蓝桥杯省赛A组
    目录试题A:特殊日期题解试题B:分糖果试题C:三国游戏试题D:平均试题E:翻转试题F:子矩阵题解:暴力试题G:阶乘的和题解试题H:奇怪的数试题A:特殊日期题解mon=[0,31,28,31,30,31,30,31,31,30,31,30,31]defrun(x):#判断是否为闰年ifx%400==0or(x%4==0andx%100!=0):r......
  • Acwing2024蓝桥杯递归
    模板:欧几里得算法//若a,b互质则返回1,否则返回0intgcd(inta,intb){returnb?gcd(b,a%b):a;}题目:AcWing1360.有序分数暴力模拟法(AC):#include<iostream>#include<algorithm>#definexfirst#defineysecondusingnamespacestd;intn;typed......
  • 第十四届蓝桥杯省赛大学B组填空题(c++)
    日期统计:暴力枚举+set(自带排序加去重)#include<iostream>#include<set>usingnamespacestd;set<int>ans;inta[100]={5,6,8,6,9,1,6,1,2,4,9,1,9,8,2,3,6,4,7,7,5,9,5,0,3,8,7,5,8,1,5,8,6,1,8,3,0,3,7,9,2,7,0,5,8,......
  • P8600 [蓝桥杯 2013 省 B] 连号区间数 and CF526F
    问题转化很容易就能把原问题转化成:求满足Max-Min=r-l的区间个数暴力解法根据上面得到的性质,我们可以暴力枚举区间,来判断当前区间是否满足性质#include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<cmath>#include<string.h>#def......
  • 蓝桥杯 历届真题 杨辉三角形【第十二届】【省赛】【C组】
    资源限制内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s思路:    由于我第一写没考虑到大数据的原因,直接判断导致只得了40分,下面是我的代码:#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN......