📄 ds1302.lst
字号:
298
299 void InitDS1302()
300 {
301 1 uchar year, month, date, day, hour, minute, second;
302 1
303 1 printf("\nEnter the Clock information: ");
C51 COMPILER V8.08 DS1302 08/29/2008 18:01:54 PAGE 6
304 1 printf("\nPlease Enter the year (0-99): "); //输入年
305 1 scanf("%bx", &year);
306 1 printf("\n Please Enter the month (1-12): "); //输入月
307 1 scanf("%bx", &month);
308 1 printf("\n Please Enter the date (1-31): "); //输入日
309 1 scanf("%bx", &date);
310 1 printf("\n Please Enter the day (1-7): "); //输入星期
311 1 scanf("%bx", &day);
312 1 printf("\n Please Enter the hour (1-24): "); //输入小时
313 1 scanf("%bx", &hour);
314 1 hour =hour & 0x3f; //设置时钟为24小时方式
315 1 printf("\n Please Enter the minute (0-59): "); //输入分钟
316 1 scanf("%bx", &minute);
317 1 printf("\n Please Enter the second (0-59): "); //输入秒
318 1 scanf("%bx", &second);
319 1
320 1 EnableWrite (); //写允许子函数
321 1 Charge (); //允许充电
322 1
323 1 ResetDS1302(); //复位DS1302
324 1 WriteByteDS1302(0xbe); //以多字节突发方式写入8个字节时钟数据
325 1 WriteByteDS1302(second); //写入秒
326 1 WriteByteDS1302(minute); //写入分钟
327 1 WriteByteDS1302(hour); //写入小时
328 1 WriteByteDS1302(date); //写入日
329 1 WriteByteDS1302(month); //写入月
330 1 WriteByteDS1302(day); //写入星期
331 1 WriteByteDS1302(year); //写入年
332 1 WriteByteDS1302(0); //对写保护控制寄存器写入0
333 1 ResetDS1302(); //复位DS1302
334 1 }
335
336 void WriteRamByte()
337 {
338 1 uchar Address;
339 1 uchar Data;
340 1
341 1 printf("\nWrite RAM Function:");
342 1 printf("\nWrite Ram ADDRESS (HEX):");
343 1 scanf("%bx", &Address); //获取RAM地址
344 1 printf("\nWrite Ram DATA (HEX):");
345 1 scanf("%bx", &Data); //获取RAM数据
346 1
347 1 Address = ((Address * 2) | 0xC0); //RAM数据写入命令
348 1 ResetDS1302(); //复位DS1302
349 1 WriteByteDS1302(Address); //写RAM地址
350 1 WriteByteDS1302(Data); //写RAM数据
351 1 ResetDS1302(); //复位DS1302
352 1 }
353
354 void Display(uchar loop)
355 {
356 1 uchar lsec = 99, sec, min, hrs, dte, mon, day, yr;
357 1
358 1 do //主循环
359 1 {
360 2 ResetDS1302();
361 2 WriteByteDS1302(0xBF); //以多字节方式读取时钟寄存器数据
362 2 sec = ReadByteDS1302(); //读取秒
363 2 min = ReadByteDS1302(); //读取分
364 2 hrs = ReadByteDS1302(); //读取小时
365 2 dte = ReadByteDS1302(); //读取日期
C51 COMPILER V8.08 DS1302 08/29/2008 18:01:54 PAGE 7
366 2 mon = ReadByteDS1302(); //读取月份
367 2 day = ReadByteDS1302(); //读取星期
368 2 yr = ReadByteDS1302(); //读取年
369 2 ResetDS1302(); //复位DS1302
370 2
371 2 if(sec != lsec || !loop) //每秒显示一次
372 2 { //输出结果
373 3 printf("\nYr Day Mon Dte Hrs Min Sec");
374 3 printf("\n%2.bX %2.bX %2.bX %2.bX", yr, day, mon, dte);
375 3 printf(" %2.bX %2.bX %2.bX", hrs, min, sec);
376 3 lsec = sec;
377 3 }
378 2 if(!loop) break;
379 2 }while(!RI);
380 1 if(loop) _getkey();
381 1 }
382
383 void BurstReadRAM()
384 {
385 1 uchar DS1302RAM[31]; //RAM数组
386 1 uchar i;
387 1
388 1 ResetDS1302(); //复位DS1302
389 1 WriteByteDS1302(0xFF); //多字节方式读取RAM
390 1 for (i=0; i<31; ++i)
391 1 {
392 2 DS1302RAM[i] = ReadByteDS1302(); //保存数据到RAM数组
393 2 }
394 1 ResetDS1302(); //复位DS1302
395 1
396 1 printf("\nDS1302 RAM Data;"); //输出片内RAM的数据
397 1
398 1 printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",
399 1 DS1302RAM[0], DS1302RAM[1], DS1302RAM[2], DS1302RAM[3],
400 1 DS1302RAM[4], DS1302RAM[5], DS1302RAM[6], DS1302RAM[7]);
401 1 printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",
402 1 DS1302RAM[8], DS1302RAM[9], DS1302RAM[10], DS1302RAM[11],
403 1 DS1302RAM[12], DS1302RAM[13], DS1302RAM[14], DS1302RAM[15]);
404 1 printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",
405 1 DS1302RAM[16], DS1302RAM[17], DS1302RAM[18], DS1302RAM[19],
406 1 DS1302RAM[20], DS1302RAM[21], DS1302RAM[22], DS1302RAM[23]);
407 1 printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",
408 1 DS1302RAM[24], DS1302RAM[25], DS1302RAM[26], DS1302RAM[27],
409 1 DS1302RAM[28], DS1302RAM[29], DS1302RAM[30]);
410 1
411 1 printf("\nEND RAM Data;");
412 1 }
413
414 void BurstWriteRAM()
415 {
416 1 uchar Data[31];
417 1 uchar i;
418 1
419 1 for(i=0;i<31;i++)
420 1 {
421 2 printf("\nWrite Ram DATA (HEX):");
422 2 scanf("%bx", &Data[i]); //获取RAM数据
423 2 }
424 1
425 1 ResetDS1302(); //复位DS1302
426 1 WriteByteDS1302(0xfe); //多字节方式写入RAM
427 1 for (i=0; i<31; i++) //循环写入
C51 COMPILER V8.08 DS1302 08/29/2008 18:01:54 PAGE 8
428 1 {
429 2 WriteByteDS1302(Data[i]);
430 2 }
431 1 ResetDS1302(); //复位DS1302
432 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1574 ----
CONSTANT SIZE = 1191 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 87
IDATA SIZE = ---- ----
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 + -