OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4968|回复: 8

DS1302输出为什么都是零

[复制链接]

6

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-4-30
在线时间
1 小时
发表于 2015-5-22 14:48:17 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]#include "stm32f10x.h" #include "bsp_led.h" #define DS1302_SCLK_HIGH LED3_OFF ; //?????????? 1 #define DS1302_SCLK_LOW LED3_ON ; //?????????? 0 #define DS1302_IO_HIGH LED4_OFF ; #define DS1302_IO_LOW LED4_ON ; #define DS1302_RST_HIGH LED5_OFF; #define DS1302_RST_LOW LED5_ON ; typedef struct __SYSTEMTIME__ { u8 Second; u8 Minute; u8 Hour; u8 Week; u8 Day; u8 Month; u8 Year; u8 DateString[9]; u8 TimeString[9]; }SYSTEMTIME; //time mode #define AM(X) X #define PM(X) (X+12) //24 hour #define DS1302_SECOND 0x80 #define DS1302_MINUTE 0x82 #define DS1302_HOUR 0x84 #define DS1302_WEEK 0x8A #define DS1302_DAY 0x86 #define DS1302_MONTH 0x88 #define DS1302_YEAR 0x8C #define DS1302_RAM(X) (0xC0+(X)*2) void DS1302InputByte(u8 d) { u8 i,ReadValue ; for(i=8;i > 0 ; i-- ) { if(d & 0x01 ) { DS1302_IO_HIGH } else { DS1302_IO_LOW } d>>= 1 ; DS1302_SCLK_HIGH DS1302_SCLK_LOW } } u8 DS1302OutputByte(void) { u8 i, ReadValue ; DS1302_IO_HIGH for( i = 8 ; i > 0 ; i-- ) { ReadValue >>= 1 ; if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_12)==1) //io high { ReadValue |= DS1302_SECOND ; } else { ReadValue &= 0x7f ; } DS1302_SCLK_HIGH DS1302_SCLK_LOW } return ReadValue ; } void Write1302(u8 a, u8 d) { DS1302_RST_LOW DS1302_SCLK_LOW DS1302_RST_HIGH DS1302InputByte( a ) ; DS1302InputByte(d) ; DS1302_RST_LOW DS1302_SCLK_HIGH } u8 Read1302(u8 a) { u8 ReadValue ; DS1302_RST_LOW DS1302_SCLK_LOW DS1302_RST_HIGH DS1302InputByte(a ) ; ReadValue = DS1302OutputByte() ; DS1302_RST_LOW DS1302_SCLK_HIGH return ReadValue ; } void DS1302_SetProtect(c) { if(c) Write1302(0x8E,0x10); else Write1302(0x8E,0x00); } void DS1302_SetTime(unsigned char Address, unsigned char Value) { DS1302_SetProtect(0); Write1302(Address, ((Value/10)<<4 | (Value%10))); } void DS1302_GetTime(SYSTEMTIME *Time) //8--10 { 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 ; Time->DateString[2] = '-'; Time->DateString[3] = Time->Month; Time->DateString[5] = '-'; Time->DateString[6] = Time->Day ; Time->DateString[8] = '\0'; } void TimeToStr(SYSTEMTIME *Time) { Time->TimeString[0] = Time->Hour ; Time->TimeString[2] = ':'; Time->TimeString[3] = Time->Minute; Time->TimeString[5] = ':'; Time->TimeString[6] = Time->Second; Time->DateString[8] = '\0'; } void Initial_DS1302(void) { unsigned char Second=Read1302(DS1302_SECOND); if(Second&0x80) DS1302_SetTime(DS1302_SECOND,0); } int main() { u8 t0,t1,t2; SYSTEMTIME CurrentTime; Initial_DS1302(); DS1302_SetTime(DS1302_HOUR,10); DS1302_SetTime(DS1302_MINUTE,54); DS1302_SetTime(DS1302_SECOND,30); uart_init(115200); while(1) { SYSTEMTIME CurrentTime; DS1302_GetTime(&CurrentTime); DateToStr(&CurrentTime); TimeToStr(&CurrentTime); t0=CurrentTime.TimeString[0]; t1=CurrentTime.TimeString[3]; t2=CurrentTime.TimeString[6]; printf("t0??%d\nt1??%d\nt2??%d\n",t0,t1,t2); } }[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

http://www.openedv.com/posts/list/32492.htm 这里有驱动
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-5-22 14:48:18 | 显示全部楼层
http://www.openedv.com/posts/list/32492.htm

这里有驱动
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

6

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-4-30
在线时间
1 小时
 楼主| 发表于 2015-5-22 14:49:35 | 显示全部楼层
求教大神们   这儿是串口返回    t0是0
t1是0
t2是0
t0是0
t1是0
t2是0
t0是0
t1是0
t2是0
回复

使用道具 举报

6

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-4-30
在线时间
1 小时
 楼主| 发表于 2015-5-22 15:54:59 | 显示全部楼层
使用LCD  t0 t1 t2显示都是85(二进制1010101)  这是怎么回事?
回复

使用道具 举报

1

主题

374

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1327
金钱
1327
注册时间
2014-7-23
在线时间
422 小时
发表于 2015-5-22 16:31:32 | 显示全部楼层
时序问题哦。。。
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11555
金钱
11555
注册时间
2014-4-1
在线时间
1317 小时
发表于 2015-5-22 16:40:38 | 显示全部楼层
粗看一眼,67、68 行就有问题,

SCK 变高、立刻变低,这个高电平持续了多久?会满足芯片要求吗?
回复

使用道具 举报

6

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-4-30
在线时间
1 小时
 楼主| 发表于 2015-5-22 20:02:22 | 显示全部楼层
回复【4楼】guset_03:
---------------------------------
我在网上搜也是时序问题    可问题具体究竟是什么?
回复

使用道具 举报

6

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-4-30
在线时间
1 小时
 楼主| 发表于 2015-5-22 20:03:12 | 显示全部楼层
回复【5楼】xuande:
---------------------------------
哪怕我只延迟一微秒   lcd就不亮了
回复

使用道具 举报

6

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-4-30
在线时间
1 小时
 楼主| 发表于 2015-5-23 23:49:10 | 显示全部楼层
回复【8楼】八度空间:
---------------------------------
大赞
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 06:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表