在使用蓝桥杯单片机中官方给出的Ds1302的驱动时需要做出的修改
- 需要把使用中的值从十进制转换到十六进制,否则显示乱码
解决方法有两步:
1、Ds1302_Single_Byte_Write()中的Write_Ds1302_Byte(dat)写成
Write_Ds1302_Byte((dat/10<<4)|(dat%10));
2、Ds1302_Single_Byte_Read()中新增dat1和dat2,
dat1 = temp/16;
dat2 = temp%6;
temp = dat1*10+dat2;
return temp;
- 需补全官方给出的代码
修改项:
官方DS1302示例代码中,DS1302_Single_Byte_Read(unsigned char addr)
RST_CLR;后面遗漏SDA_CLR;//电平置低
- Ds1302初始化时间和获取时间所使用的函数是
shijian[]={ 00, 30, 8, 0, 0, 0, 0};
初始化时间函数
void Init_Time()
{
unsigned i;
unsigned char temp = 0x80;
Ds1302_Single_Byte_Write(0x8e,0x00);//closs write protect
for( i = 0;i < 7;i++)
{
Ds1302_Single_Byte_Write(temp,Time[i]);
temp = temp+2;
}
Ds1302_Single_Byte_Write(0x8e,0x81);//open write protect
}
获取时间函数
void Get_Time()
{
unsigned i;
unsigned char temp = 0x81;
for( i = 0;i < 7;i++)
{
Time[i] = Ds1302_Single_Byte_Read(temp);
temp = temp + 2;
}
}