📄 ds1302.lst
字号:
134 1 return ucData;
135 1 }
136
137 //*************************************************************************************************
138 //* *
139 //* ******************************是否写保护******************************* *
140 //* *
141 //*************************************************************************************************
142 void vDSSetProtect(bit bFlag)
143 {
144 1 if(bFlag)
145 1 vDSWriteDirect(0x8E,0x10);
146 1 else
147 1 vDSWriteDirect(0x8E,0x00);
148 1 }
149
150
151
152 //*************************************************************************************************
153 //* *
154 //* ******************************设置实时时钟时间************************** *
155 //* *
156 //*************************************************************************************************
157 void vDSSetTime(unsigned char ucAddress, unsigned char ucValue)
158 {
159 1 vDSSetProtect(0); //取消保护。
160 1
161 1 vDSWriteDirect(ucAddress, ((ucValue/10)<<4 | (ucValue%10))); //吧ucValue转换成BCD码,然后写入。
162 1 }
163
164
165
166 //*************************************************************************************************
167 //* *
168 //* ******************************读取实时时钟时间************************** *
169 //* *
170 //*************************************************************************************************
171 void vDSGetTime(TIME *stTime) //把读取的BCD码转换成2进制数然后存入时间数组。
172 {
173 1 unsigned char ucReadValue;
174 1
175 1 ucReadValue = vDSReadDirect(DS_SECOND); //秒
176 1 stTime->ucSecond=((ucReadValue&0x70)>>4)*10+(ucReadValue&0x0F);
177 1
C51 COMPILER V8.05a DS1302 08/07/2007 23:36:32 PAGE 4
178 1 ucReadValue = vDSReadDirect(DS_MINUTE); //分
179 1 stTime->ucMinute=((ucReadValue&0x70)>>4)*10+(ucReadValue&0x0F);
180 1
181 1 ucReadValue = vDSReadDirect(DS_HOUR); //小时
182 1 stTime->ucHour =((ucReadValue&0x70)>>4)*10+(ucReadValue&0x0F);
183 1
184 1 ucReadValue = vDSReadDirect(DS_DAY); //天
185 1 stTime->ucDay =((ucReadValue&0x70)>>4)*10+(ucReadValue&0x0F);
186 1
187 1 ucReadValue = vDSReadDirect(DS_WEEK); //星期
188 1 stTime->ucWeek=((ucReadValue&0x70)>>4)*10+(ucReadValue&0x0F);
189 1
190 1 ucReadValue =vDSReadDirect(DS_MONTH); //月
191 1 stTime->ucMonth=((ucReadValue&0x70)>>4)*10+(ucReadValue&0x0F);
192 1
193 1 ucReadValue =vDSReadDirect(DS_YEAR); //年
194 1 stTime->ucYear=((ucReadValue&0x70)>>4)*10+(ucReadValue&0x0F);
195 1 }
196
197
198
199 //*************************************************************************************************
200 //* *
201 //* ******************************实时时钟日期字符串************************** *
202 //* *
203 //*************************************************************************************************
204 void vDateString(TIME *stTime) //把日期数据转换成日期字符串,便于显示。
205 {
206 1 stTime->ucaDateString[0] = stTime->ucYear/10 + '0';
207 1 stTime->ucaDateString[1] = stTime->ucYear%10 + '0';
208 1
209 1 stTime->ucaDateString[2] = '-';
210 1
211 1 stTime->ucaDateString[3] = stTime->ucMonth/10 + '0';
212 1 stTime->ucaDateString[4] = stTime->ucMonth%10 + '0';
213 1
214 1 stTime->ucaDateString[5] = '-';
215 1
216 1 stTime->ucaDateString[6] = stTime->ucDay/10 + '0';
217 1 stTime->ucaDateString[7] = stTime->ucDay%10 + '0';
218 1
219 1 stTime->ucaDateString[8] = '\0';
220 1 }
221
222
223
224 //*************************************************************************************************
225 //* *
226 //* ******************************实时时钟时间字符串************************** *
227 //* *
228 //*************************************************************************************************
229 void vTimeString(TIME *stTime) //把时间数据转换成时间字符串,便于显示。
230 {
231 1 stTime->ucaTimeString[0] = stTime->ucHour/10 + '0';
232 1 stTime->ucaTimeString[1] = stTime->ucHour%10 + '0';
233 1
234 1 stTime->ucaTimeString[2] = ':';
235 1
236 1 stTime->ucaTimeString[3] = stTime->ucMinute/10 + '0';
237 1 stTime->ucaTimeString[4] = stTime->ucMinute%10 + '0';
238 1
239 1 stTime->ucaTimeString[5] = ':';
C51 COMPILER V8.05a DS1302 08/07/2007 23:36:32 PAGE 5
240 1
241 1 stTime->ucaTimeString[6] = stTime->ucSecond/10 + '0';
242 1 stTime->ucaTimeString[7] = stTime->ucSecond%10 + '0';
243 1
244 1 stTime->ucaDateString[8] = '\0';
245 1 }
246
247
248
249 //*************************************************************************************************
250 //* *
251 //* ******************************初始化时钟************************** *
252 //* *
253 //*************************************************************************************************
254 void vDSInitialize()
255 {
256 1 unsigned char ucSecond=vDSReadDirect(DS_SECOND);
257 1
258 1 if(ucSecond&0x80)
259 1 vDSSetTime(DS_SECOND,0);
260 1 }
261
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 584 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -