📄 66.lst
字号:
243
244 /******************************************************************
245 - 功能描述:将BCD码转换为十进制的数值
246 - 隶属模块:PCF8563驱动模块
247 - 函数属性:内部
248 - 参数说明:x:待转换的BCD码字节
249 - 返回说明:转换后的值
250 - 注:将BCD格式数据转为实际的值,如29的BCD格式为0x29,实际值为0x1d
251 ******************************************************************/
252
253 unsigned char BCD2Val(unsigned char x)
254 {
255 1 return (x>>4)*10+(x&0x0f); //高4位乘以10,再加上低4位,即得到数值
256 1 }
257
258 /******************************************************************
259 - 功能描述:将十进制的数值转换为BCD码
260 - 隶属模块:PCF8563驱动模块
261 - 函数属性:内部
262 - 参数说明:x:待转换的数值
263 - 返回说明:转换后的值
264 - 注:将值转为BCD格式,如 23转为BCD格式为 0x23
265 ******************************************************************/
266
267 unsigned char Val2BCD(unsigned char x)
268 {
269 1 return (x/10)*16+(x%10); //将十进制的数值十位乘以16,再加上个位,即得到BCD码
270 1 }
271
272 /******************************************************************
273 - 功能描述:读取时间
274 - 隶属模块:PCF8563驱动模块
275 - 函数属性:外部,供用户使用
276 - 参数说明:无
277 - 返回说明:操作结果,0表示成功,1表示失败
278 - 注:从PCF8563中读到的时间值,被装载到全局的外部结构体变量time中
279 ******************************************************************/
280
281 unsigned char P8563_Read_Time()
282 {
283 1 unsigned char temp[7];
284 1 if(!PCF8563_Read_Bytes(0x02,7,temp)) //读取时间,即读取PCF8563的时间寄存器,地址从0x02开始
285 1 {
286 2 //以下对读取到temp数组中的时间数据进行截取
287 2 //并转换为十进制数值写入到time中去
288 2 time.second=BCD2Val(temp[0]&0x7f); //秒
289 2 time.minute=BCD2Val(temp[1]&0x7f); //分
290 2 time.hour =BCD2Val(temp[2]&0x3f); //小时
291 2 time.day =BCD2Val(temp[3]&0x3f); //日
292 2 time.week =BCD2Val(temp[4]&0x07); //星期
293 2 time.month =BCD2Val(temp[5]&0x1f); //月
294 2 time.year =BCD2Val(temp[6] ); //年
295 2 return 0;
296 2 }
297 1 else
298 1 return 1;
299 1 }
300
301 /******************************************************************
302 - 功能描述:设置时间
C51 COMPILER V8.05a 66 03/06/2012 21:09:20 PAGE 6
303 - 隶属模块:PCF8563驱动模块
304 - 函数属性:外部,供用户使用
305 - 参数说明:无
306 - 返回说明:操作结果,0表示成功,1表示失败
307 - 注:在设置时间前先将时间数据填充到time中去,随后调用此函数,时间
308 数据即被写入到PCF8563中,并以新设置的时间继续走时
309 ******************************************************************/
310
311 unsigned char P8563_Set_Time()
312 {
313 1 unsigned char temp[7];
314 1 unsigned char i;
315 1 for(i=0;i<7;i++)
316 1 {
317 2 temp[i]=Val2BCD(((unsigned char *)(&time))[i]);//将time中的时间数据转换为BCD格式,并写入到temp数组中
318 2 }
319 1 return PCF8563_Write_Bytes(0x02,7,temp); //将temp数组的数据写入到PCF8563中
320 1 }
321
322 /******************************************************************
323 - 功能描述:设置倒计时寄存器
324 - 隶属模块:PCF8563驱动模块
325 - 函数属性:外部,供用户使用
326 - 参数说明:无
327 - 返回说明:操作结果,0表示成功,1表示失败
328 - 注:先将要写入到倒计时寄存器的数据装入全局外部结构体变量dcounter中
329 随后调动此函数将数据写入
330 ******************************************************************/
331
332
333 /******************************************************************
334 - 功能描述:读取倒计时寄存器
335 - 隶属模块:PCF8563驱动模块
336 - 函数属性:外部,供用户使用
337 - 参数说明:无
338 - 返回说明:操作结果,0表示成功,1表示失败
339 - 注:将倒计时寄存器的值读回到dcounter中
340 ******************************************************************/
341
342
343 /******************************************************************
344 - 功能描述:将一个字符串转为32位的变量,比如"1234"转为1234
345 - 隶属模块:公开函数模块
346 - 函数属性:外部,用户可调用
347 - 参数说明:str:指向待转换的字符串
348 - 返回说明:转换后的数值
349 ******************************************************************/
350
351 unsigned long strtou32(char *str)
352 {
353 1 unsigned long temp=0;
354 1 unsigned long fact=1;
355 1 unsigned char len=strlen(str);
356 1 unsigned char i;
357 1 for(i=len;i>0;i--)
358 1 {
359 2 temp+=((str[i-1]-0x30)*fact);
360 2 fact*=10;
361 2 }
362 1 return temp;
363 1 }
364
C51 COMPILER V8.05a 66 03/06/2012 21:09:20 PAGE 7
365
366 void xianshi()
367 {
368 1 P0=0xfe;
369 1 P3=0xff;
370 1 P2=table[time.month/10];
371 1 delay1(12);
372 1 P2=0xff;
373 1 delay1(2);
374 1
375 1 P0=0xfd;
376 1 P3=0xff;
377 1 P2=table[time.month%10];
378 1 delay1(12);
379 1 P2=0xff;
380 1 delay1(2);
381 1
382 1 P0=0xfb;
383 1 P3=0xff;
384 1 P2=table[time.day/10];
385 1 delay1(12);
386 1 P2=0xff;
387 1 delay1(2);
388 1
389 1 P0=0xf7;
390 1 P3=0xff;
391 1 P2=table[time.day%10];
392 1 delay1(12);
393 1 P2=0xff;
394 1 delay1(2);
395 1
396 1 P0=0xef;
397 1 P3=0xff;
398 1 P2=table[0];
399 1 delay1(12);
400 1 P2=0xff;
401 1 delay1(2);
402 1
403 1 P0=0xdf;
404 1 P3=0xff;
405 1 P2=table[time.week%10];
406 1 delay1(12);
407 1 P2=0xff;
408 1 delay1(2);
409 1
410 1 P0=0xbf;
411 1 P3=0xff;
412 1 P2=table[time.second/10];
413 1 delay1(15);
414 1 P2=0xff;
415 1 delay1(2);
416 1
417 1 P0=0x7f;
418 1 P3=0xff;
419 1 P2=table[time.second%10];
420 1 delay1(12);
421 1 P2=0xff;
422 1
423 1 P3=0x7f;
424 1 P0=0xff;
425 1 P2=table[time.hour/10];
426 1 delay1(12);
C51 COMPILER V8.05a 66 03/06/2012 21:09:20 PAGE 8
427 1 P2=0xff;
428 1 delay(2);
429 1
430 1 P3=0xbf;
431 1 P0=0xff;
432 1 P2=table[time.hour%10];
433 1 delay1(12);
434 1 P2=0xff;
435 1 delay1(2);
436 1
437 1 P3=0xdf;
438 1 P0=0xff;
439 1 P2=table[time.minute/10];
440 1 delay1(12);
441 1 P2=0xff;
442 1 delay1(2);
443 1
444 1 P3=0xf7;
445 1 P0=0xff;
446 1 P2=table[time.minute%10];
447 1 delay1(12);
448 1 P2=0xff;
449 1 delay1(2);
450 1
451 1 P3=0xc7;
452 1 P0=0xff;
453 1 P2=0x7f;
454 1 delay1(12);
455 1 P2=0xff;
456 1 }
457
458
459
460 void main()
461 {
462 1 /*time.year =12; //向time中装入要设置的时间数据
463 1 time.month = 3;
464 1 time.day =6;
465 1 time.hour =21;
466 1 time.minute=7;
467 1 time.second=30;
468 1 time.week = 2;
469 1 P8563_Set_Time(); //设置时间,即将time中的时间数据写入PCF8563 */
470 1
471 1 while(1) //循环
472 1 {
473 2 P8563_Read_Time(); //读取时间
474 2
475 2 xianshi();
476 2
477 2 }
478 1 while(1);
479 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 964 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 17 39
IDATA SIZE = ---- ----
C51 COMPILER V8.05a 66 03/06/2012 21:09:20 PAGE 9
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -