打印

帮忙看一下程序 芯片是DS1302

[复制链接]
2385|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
21ID|  楼主 | 2009-11-3 09:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 21ID 于 2009-11-3 13:01 编辑

void DS1302_GetTime(SYSTEMTIME *Time)
{
unsigned char ReadValue;
ReadValue = Read1302(DS1302_SECOND);
Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_MINUTE);
Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_HOUR);
Time->Hour = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_DAY);
Time->Day = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_WEEK);
Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_MONTH);
Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_YEAR);
Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
}

void DateToStr(SYSTEMTIME *Time)
{
Time->DateString[0] = Time->Year/10 + '0';
Time->DateString[1] = Time->Year%10 + '0';
Time->DateString[2] = '-';
Time->DateString[3] = Time->Month/10 + '0';
Time->DateString[4] = Time->Month%10 + '0';
Time->DateString[5] = '-';
Time->DateString[6] = Time->Day/10 + '0';
Time->DateString[7] = Time->Day%10 + '0';
Time->DateString[8] = '\0';
}

相关帖子

沙发
红金龙吸味| | 2009-11-3 10:08 | 只看该作者
没见过DS1302这种单片机
DS1302时钟芯片倒见过。问题说清楚撒,上面一个函数是获取时间,下面一个是把时钟数据转换成可以再1602或者是12864上显示的ASCII码。

使用特权

评论回复
板凳
ppsen| | 2009-11-3 10:16 | 只看该作者
说清楚,再请人看

使用特权

评论回复
地板
21ID|  楼主 | 2009-11-3 13:02 | 只看该作者
Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
获取时间为什么这么写?

使用特权

评论回复
5
328500920| | 2009-11-3 13:25 | 只看该作者
要把 所以的程序都上传 ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);

使用特权

评论回复
6
0500820118| | 2009-11-3 14:01 | 只看该作者
DS1302时钟芯片:lol

使用特权

评论回复
7
0500820118| | 2009-11-3 14:03 | 只看该作者
你写得是有点乱了的,网上代码一大堆

使用特权

评论回复
8
new1988| | 2009-11-3 23:02 | 只看该作者
本帖最后由 new1988 于 2009-11-3 23:05 编辑
要把 所以的程序都上传 ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
328500920 发表于 2009-11-3 13:25

这样写是因为DS1302中数据存储的方式是BCD码存储的,要进行数制的转换。

使用特权

评论回复
9
21ID|  楼主 | 2009-11-4 09:18 | 只看该作者
这样写是因为DS1302中数据存储的方式是BCD码存储的,要进行数制的转换。
new1988 发表于 2009-11-3 23:02
那么BCD码的数制转换都可以用这个公式吗?

使用特权

评论回复
10
leotanchao| | 2009-11-4 12:18 | 只看该作者
我也写了1302的程序,
我是这么转化的 比如说一个数是n=29  公式就是 temp=(n/10<<4)|(n%10);
或者temp=n/10*16+n%10;
第二个公式可以更好的解释1302读取和输出数的形式。但是貌似前者运算速度更快

使用特权

评论回复
11
wzh80114| | 2009-11-4 16:06 | 只看该作者
易帆电子-------电子元器件零售批发,工厂配单服务。并提供全方位的技术支持!淘宝网店http://shop36043416.taobao.com/

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

157

主题

912

帖子

5

粉丝