蓝桥杯学习总结——DS1302

 DS1302

 基础知识

DS1302是一款数字时钟芯片,通常用于电子设备中,例如数字时钟、计时器、温度计等。它具有实时时钟(RTC)功能,可以提供年、月、日、时、分、秒的时间信息,并能够自动调整闰年。DS1302还具有存储器功能,可以存储一些关键的配置信息,例如时钟校准参数等。

DS1302用SPI协议与51单片机通信。

DS1302编程

在比赛中,关于DS1302的函数是DS1302时间的设置,这个函数都是基于SPI底层文件中修改添加。

1)设置时间流程及代码

  • 关闭写入保护
  • 写入时钟数据(写入时分秒寄存器地址为偶数
  • 打开写入保护

(时分秒对应的寄存器位置)

void Clock_Set(u8 hour, u8 minuite, u8 second)
{
	Write_Ds1302_Byte(0x8e,0x00);                //关闭写保护
	Write_Ds1302_Byte(0x80,DecToBCD(second));    //写入秒钟数据
	Write_Ds1302_Byte(0x82,DecToBCD(minuite));   //写入分钟数据
	Write_Ds1302_Byte(0x84,DecToBCD(hour));      //写入时间数据
	Write_Ds1302_Byte(0x8e,0x80);                //打开写保护
}

2)读取时间流程及代码

直接调用读取DS1302函数(寄存器地址为奇数,并且要记得把BCD转换成十进制

BCD(Binary-Coded Decimal)码:用4位二进制数来表示1位十进制数中的0~9这10个数码—— 用十六进制表示十进制,例如0x25代表十进制的25

十进制转BCD码宏定义:
#define DecToBcD(dec)(dec/10*16)+(dec%10)

(dec / 10 * 16)将十进制的十位数转换为BCD码的高四位,然后(dec % 10)将十进制的个位数转换为BCD码的低四位,最后这两部分通过加法组合成最终的BCD码。


BCD码转十进制宏定义:
#define BCDToDec(bcd)(bcd/16*10)+(bcd%16)

(bcd / 16 * 10)将BCD码的高四位转换为十进制的十位数,然后(bcd % 16)将BCD码的低四位转换为十进制的个位数,最后这两部分通过加法组合成最终的十进制数。

3)在mian中调用函数

//将DS1302的时间初值设置为23:59:55,然后读取DS1302的时间,并显示在数码管上

//DS1302时间读取
u8 hour,minute,second;
void vDS1302_Process()
{
	second = BCDToDec(Read_Ds1302_Byte(0x81));
	minute = BCDToDec(Read_Ds1302_Byte(0x83));
	hour = BCDToDec(Read_Ds1302_Byte(0x85));
}


//数码管操作函数
void vSMG_Process()
{
	smg_buf[0]=smg_code[hour/10];			//旋转电位器的电压值
	smg_buf[1]=smg_code[hour%10];	
	smg_buf[2]=0x00;
	smg_buf[3]=smg_code[minute/10];
	smg_buf[4]=smg_code[minute%10];
	smg_buf[5]=0x00;		
	smg_buf[6]=smg_code[second/10];
	smg_buf[7]=smg_code[second%10];
}

void main(void)
{
	vSystem_Init();
	vClock_Set(23,59,55);
	vTimer2_Init();
	while(1)
	{
		vSMG_Process();
		vDS1302_Process();
	}
}


//中断服务程序
void vTimer2_ISR() interrupt 12     	//中断入口
{
	vSMG_Display();
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值