📄 1302.lst
字号:
230 void BurstW1302R(uchar *pWReg)
231 {
232 1 uchar i;
233 1 W1302(0x8e,0x00); /* 控制命令,WP=0,写操作*/
234 1 T_RST = 0;
235 1 T_CLK = 0;
236 1 T_RST = 1;
237 1 RTInputByte(0xfe); /* 0xbe:时钟多字节写命令 */
238 1 for (i=31; i>0; i--) /* 31Byte 寄存器数据 */
239 1 {
240 2 RTInputByte(*pWReg); /* 写1Byte数据*/
241 2 pWReg++;
C51 COMPILER V7.50 1302 11/20/2007 23:46:12 PAGE 5
242 2 }
243 1 T_CLK = 1;
244 1 T_RST = 0;
245 1 }
246 /********************************************************************
247
248 函 数 名:BurstR1302R()
249 功 能:读取DS1302寄存器数据
250 说 明:先写地址,后读命令/数据(寄存器多字节方式)
251 调 用:RTInputByte() , RTOutputByte()
252 入口参数:pRReg: 寄存器数据地址
253 返 回 值:无
254 设 计:zhaojunjie 日 期:2002-03-19
255 修 改: 日 期:
256 ***********************************************************************/
257 void BurstR1302R(uchar *pRReg)
258 {
259 1 uchar i;
260 1 T_RST = 0;
261 1 T_CLK = 0;
262 1 T_RST = 1;
263 1 RTInputByte(0xff); /* 0xff:时钟多字节读命令 */
264 1 for (i=31; i>0; i--) /*31Byte 寄存器数据 */
265 1 {
266 2 *pRReg = RTOutputByte(); /* 读1Byte数据 */
267 2 pRReg++;
268 2 }
269 1 T_CLK = 1;
270 1 T_RST = 0;
271 1 }
272 /********************************************************************
273
274 函 数 名:Set1302()
275 功 能:设置初始时间
276 说 明:先写地址,后读命令/数据(寄存器多字节方式)
277 调 用:W1302()
278 入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
279 7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
280 返 回 值:无
281 设 计:zhaojunjie 日 期:2002-03-19
282 修 改: 日 期:
283 ***********************************************************************/
284 void Set1302(uchar *pClock)
285 {
286 1 uchar i;
287 1 uchar ucAddr = 0x80;
288 1 W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
289 1 for(i =7; i>0; i--)
290 1 {
291 2 W1302(ucAddr,*pClock); /* 秒 分 时 日 月 星期 年 */
292 2 pClock++;
293 2 ucAddr +=2;
294 2 }
295 1 W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
296 1 }
297 void delayms(int t)
298 {
299 1 uchar i;
300 1 while(t--)
301 1 {
302 2 i=100;
303 2 while(i--);
C51 COMPILER V7.50 1302 11/20/2007 23:46:12 PAGE 6
304 2 }
305 1 }
306 /********************************************************************
307
308 函 数 名:Get1302()
309 功 能:读取DS1302当前时间
310 说 明:
311 调 用:R1302()
312 入口参数:ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年
313 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
314 返 回 值:无
315 设 计:zhaojunjie 日 期:2002-03-19
316 修 改: 日 期:
317 ***********************************************************************/
318 void Get1302(uchar ucCurtime[])
319 {
320 1 uchar i;
321 1 char j;
322 1 uchar ucAddr = 0x81;
323 1 for (i=0; i<7; i++)
324 1 {
325 2 j= R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
326 2 //if (j>=0)
327 2 ucCurtime[i] =j;/*格式为: 秒 分 时 日 月 星期 年 */
328 2 //ucCurtime[i] = R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
329 2 ucAddr += 2;
330 2 _nop_();
331 2 }
332 1 }
333 /*//////////////////////////////////////////////////////////////////////*/
334
335
336 void put_num(char cnum)
337 {
338 1 P0=seg[ cnum & 0x0f];
339 1 }
340
341 #define xt_mhz 11.0592 //晶体的振荡频率
342 //unsigned int TimeTHTL;
343 unsigned int TimeMode1Set(float timeslot)
344 {
345 1 return (unsigned int)(0x10000-xt_mhz*1000000/12*timeslot);
346 1 }
347 idata unsigned int TimeTick;
348 void timer0() interrupt 1 using 3
349 {
350 1 static char disppoint;
351 1 // unsigned char temp;
352 1 //晶振为 11.0592MHZ 时计数 9216(2400)=(0x10000-0xd800) 次为 10ms
353 1 //11.0592*10e6/12=每秒计数 /100=10ms应计数
354 1 TH0=(XMS/256);
355 1 TL0=(XMS%256);
356 1 TimeTick++;
357 1
358 1 P2=P2|0x3f;
359 1
360 1 //put_num(dispbuf[disppoint]);
361 1 P0=seg[ dispbuf[disppoint] & 0x0f];
362 1 if(disppoint==2) P0&=~dot; /* 小数点*/
363 1
364 1 P2=P2 & low[disppoint];
365 1
C51 COMPILER V7.50 1302 11/20/2007 23:46:12 PAGE 7
366 1 if (disppoint++>=5) disppoint=0;
367 1
368 1 }
369 void displed(void)
370 {
371 1
372 1 }
373 void systemini(void)
374 {
375 1 P0=0xff;
376 1 P1=0xff;
377 1 P2=0xff;
378 1 P3=0xff;
379 1 TMOD=0x01;
380 1 XMS=TimeMode1Set(0.004);
381 1 //XMS=2000;
382 1 //XMS=0x10000-1000;
383 1 TH0=XMS/256; /* 5ms */
384 1 TL0=XMS%256;
385 1 TR0=1;
386 1 ET0=1; //Enable timer 0 Interrupt
387 1 EA=1;
388 1 // stop=1;
389 1 }
390 void main(void)
391 {
392 1 uchar WClock[8]={0x01,0x02,0x03};/*格式为: 秒 分 时 日 月 星期 年 */
393 1 uchar RClock[8];
394 1 uchar ds_hour;
395 1 uchar ds_min;
396 1 uchar ds_sec;
397 1 uchar ds_day; /*得到当前时间小时值*/
398 1 uchar ds_month; /*得到当前时间小时值*/
399 1 uchar ds_year; /*得到当前时间小时值*/
400 1 uchar ds_year2; /*得到当前时间小时值*/
401 1 //systemini();
402 1 LCD_init();
403 1 // Get1302(&RClock); /*把当前的时间值读取到数组SClock[3]中去*/
404 1 W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
405 1 W1302(0x90,0xA5); //TCS=1010:使能涓流充电 DS=01:选择一个二极管 RS=01:2K
406 1 W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
407 1 //Set1302(WClock);
408 1 while(1)
409 1 {
410 2 int j;
411 2 //Get1302(&RClock); /*获取当前时间值*/
412 2 // displed();
413 2 BurstR1302T(&RClock);
414 2 // Get1302(&RClock); /*把当前的时间值读取到数组SClock[3]中去*/
415 2 // if (TimeTick>5)
416 2 // {
417 2 // TimeTick=0;
418 2 // Get1302(&RClock); /*把当前的时间值读取到数组SClock[3]中去*/
419 2 ds_sec = RClock[0];//&0x7f; /*得到当前时间秒值*/
420 2 ds_min = RClock[1]; /*得到当前时间分值*/
421 2 ds_hour = RClock[2]; /*得到当前时间小时值*/
422 2 ds_day = RClock[3]; /*得到当前时间小时值*/
423 2 ds_month = RClock[4]; /*得到当前时间小时值*/
424 2 ds_year = RClock[6]; /*得到当前时间小时值*/
425 2 ds_year2= RClock[7]; /*得到当前时间小时值*/
426 2 dispbuf[0]=ds_year2&0x0f;
427 2 dispbuf[1]=ds_year2>>4;
C51 COMPILER V7.50 1302 11/20/2007 23:46:12 PAGE 8
428 2 dispbuf[2]=ds_year&0x0f;
429 2 dispbuf[3]=ds_year>>4;
430 2 dispbuf[4]=ds_month&0x0f;
431 2 dispbuf[5]=ds_month>>4;
432 2 dispbuf[6]=ds_day&0x0f;
433 2 dispbuf[7]=ds_day>>4;
434 2 dispbuf[8]=ds_hour>>4;
435 2 dispbuf[9]=ds_hour&0x0f;
436 2 dispbuf[10]=ds_min>>4;
437 2 dispbuf[11]=ds_min&0x0f;
438 2 dispbuf[12]=ds_sec>>4;
439 2 dispbuf[13]=ds_sec&0x0f;
440 2 for(j=0;j<14;j++)
441 2 {
442 3 LCD_write_char(0,j,ASCII[dispbuf[j]]);
443 3 // LCD_write_char(0,j,ASCII[dispbuf[j]]);
444 3 }
445 2 // }
446 2 //delayms(2000);
447 2 // keyproc();
448 2 //ledrun();
449 2 }
450 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 714 ----
CONSTANT SIZE = 41 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 26 26
IDATA SIZE = 2 ----
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 + -