02.#include
03.#include
04.
05.//******寄存器地址,顺序为秒分时日月周年七位******//
06.uchar code ADDR_READ[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
07.uchar code ADDR_WRITER[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
08.
09.//*****显示初始值******//
10.//顺序为秒分时日月周年七位//
11.uchar time[7]={0,0,0x12,0x25,0x10,0x01,0x17}; //初始化时间为2017年10月23日周一 12点00分00秒
12.
13.//*****DS1302写函数*****//
14.void DS1302_Writer(uchar addr , uchar dat)
15.{
16. uint i;
17. RST=0;
18. _nop_();
19. SCLK=0;
20. _nop_();
21. RST=1;
22. for(i=0;i<8;i++)
23. {
24. temp=addr&0x01;
25. addr=addr>>1;
26. SCLK=1;
27. _nop_();
28. SCLK=0;
29. _nop_();
30. }
31. for(i=0;i<8;i++)
32. {
33. temp=dat&0x01;
34. dat=dat>>1;
35. SCLK=1;
36. _nop_();
37. SCLK=0;
38. _nop_();
39. }
40. RST=0;
41. _nop_();
42.}
43.
44.//********DS1302读函数*********//
45.uchar DS1302_Read(uchar addr)
46.{
47. uint i;
48. uchar dat,dat1;
49. RST=0;
50. _nop_();
51. SCLK=0;
52. _nop_();
53. RST=1;
54. for(i=0;i<8;i++)
55. {
56. temp=addr&0x01;
57. addr=addr>>1;
58. SCLK=1;
59. _nop_();
60. SCLK=0;
61. }
62. _nop_();
63. for(i=0;i<8;i++)
64. {
65. dat1=temp;
66. dat = (dat>>1) | (dat1<<7);
67. SCLK=1;
68. _nop_();
69. SCLK=0;
70. _nop_();
71. }
72. RST = 0;
73. _nop_(); //以下为DS1302复位的稳定时间,必须的。
74. SCLK = 1;
75. _nop_();
76. temp = 0;
77. _nop_();
78. temp = 1;
79. _nop_();
80. return dat;
81.}
82.
83.//******初始化函数********//
84.void DS1302_INIT()
85.{
86. int i;
87. DS1302_Writer(0x8e,0x00);//当对日历、时钟寄存器或片内RAM进行写时WP应清零
88. for(i=0;i<7;i++)
89. {
90. DS1302_Writer(ADDR_WRITER[i],time[i]); //初始化时分秒
91. }
92. DS1302_Writer(0x8e,0x80);//当对日历、时钟寄存器或片内RAM进行读时WP一般置1
93.}
94.//*********DS1302时钟暂停函数***************//
95.void DS1302_STOP()
96.{
97. int i;
98. DS1302_Writer(0x8e,0x00);//当对日历、时钟寄存器或片内RAM进行写时WP应清零
99. DS1302_Writer(0x80,time[0]|0x80);
100. for(i=1;i<7;i++)
101. {
102. DS1302_Writer(ADDR_WRITER[i],time[i]); //初始化时分秒
103. }
104. DS1302_Writer(0x8e,0x80);//当对日历、时钟寄存器或片内RAM进行读时WP一般置1
105.}
106.//******读取DS1302计时*******//
107.void DS1302_ReadTime()
108.{
109. int i;
110. for(i=0;i<7;i++)
111. {
112. time[i]=DS1302_Read(ADDR_READ[i]); //读取秒分时日月周年七位储存到全局变量time中
113.……………………
|