📄 ddcjc.lst
字号:
279 2 Bike = 406; //16英寸
280 2 break;
281 2 case 1:
282 2 Bike = 457; //18英寸
283 2 break;
284 2 case 2:
285 2 Bike = 508; //20英寸
286 2 break;
287 2 case 3:
288 2 Bike = 559; //22英寸
289 2 break;
290 2 case 4:
291 2 Bike = 610; //24英寸
292 2 break;
293 2 }
294 1 }
295
296 void InitSys ()
297 {
298 1 //uchar uBaseYear = 4;
299 1
300 1 //初始化各引脚
301 1 TRIP_PIN =FALSE;
302 1 DAT_595 = HIGH;
303 1 CLK_595 = HIGH;
C51 COMPILER V7.50 DDCJC 11/28/2006 20:24:32 PAGE 6
304 1 STB_595 = HIGH;
305 1 SEL_595 = HIGH;
306 1
307 1 ClearAllData ();
308 1
309 1 ReadParam ();
310 1
311 1 //初始化定时器0,1
312 1 TMOD = 0x11;
313 1
314 1 //定时器0,方式1
315 1 TH0 = TH0_VAL;
316 1 TL0 = TH0_VAL;
317 1 TR0 = TRUE;
318 1 ET0 = FALSE;
319 1
320 1 //定时器1,方式1,用于显示
321 1 TH1 = TH1_VAL;
322 1 TL1 = TL1_VAL;
323 1 TR1 = TRUE;
324 1 ET1 = TRUE;
325 1
326 1 IsOption = FALSE;
327 1
328 1 /*
329 1 //初始化外中断0
330 1 IT0 = TRUE; //边沿触发方式
331 1 EX0 = TRUE;
332 1 */
333 1
334 1 //初始化外中断1
335 1 IT1 = TRUE; //边沿触发方式
336 1 PX1 = TRUE;
337 1 EX1 = FALSE;
338 1
339 1 //初始化系统时钟
340 1 //Init8583 (PCF8583_CTR, 0x00);
341 1
342 1 //NValue = NVALUE;
343 1 Wheel = GetWheel ();
344 1 DisplaySysTime ();
345 1
346 1 EA = TRUE;
347 1
348 1 //测试DA
349 1 I2CSend (MAX517_ADDR, 0x00, 0x80);
350 1
351 1 //Delay (500, 255);
352 1
353 1
354 1 }
355
356 void ClearLED () //清除屏幕
357 {
358 1 uchar i;
359 1
360 1 for (i=0; i<18; i++)
361 1 DispBuf[i] = 0;
362 1 }
363
364 uint GetWheel () //得到轮子周长
365 {
C51 COMPILER V7.50 DDCJC 11/28/2006 20:24:32 PAGE 7
366 1 uint Temp;
367 1
368 1 Temp = PI * (dword)Dia / 100;
369 1
370 1 if ((PI * (dword)Dia % 100) > 44)
371 1 Temp = Temp + 1;
372 1 return Temp;
373 1 }
374
375 void DisplaySysTime () //显示系统时间
376 {
377 1 uchar cTemp, cBaseYear;
378 1 //显示
379 1 Get8583Data(BASE_YEAR, &cBaseYear, 1);
380 1 Get8583Data (HUNSEC, UartBuf, 6);
381 1 cTemp = GetYear (UartBuf[4]) + cBaseYear*4; //年
382 1 DispBuf[0] = LED_CODE[2];
383 1 DispBuf[1] = LED_CODE[0];
384 1 DispBuf[2] = LED_CODE[(cTemp>>4) & 0x0F];
385 1 DispBuf[3] = LED_CODE[ cTemp & 0x0F];
386 1 cTemp = GetMonth (UartBuf[5]); //月
387 1 DispBuf[4] = LED_CODE[cTemp>>4 & 0x0F];
388 1 DispBuf[5] = LED_CODE[cTemp & 0x0F];
389 1 cTemp = GetDate (UartBuf[4]); //日
390 1 DispBuf[6] = LED_CODE[cTemp>>4 & 0x0F];
391 1 DispBuf[7] = LED_CODE[cTemp & 0x0F];
392 1 DispBuf[9] = 0x00;
393 1 DispBuf[10] = LED_CODE[UartBuf[3]>>4 & 0x0F]; //时
394 1 DispBuf[11] = LED_CODE[UartBuf[3] & 0x0F];
395 1 DispBuf[12] = 0x00;
396 1 DispBuf[13] = LED_CODE[UartBuf[2]>>4 & 0x0F]; //分
397 1 DispBuf[14] = LED_CODE[UartBuf[2] & 0x0F];
398 1 DispBuf[15] = LED_CODE[UartBuf[1]>>4 & 0x0F]; //秒
399 1 DispBuf[16] = LED_CODE[UartBuf[1] & 0x0F];
400 1 DispBuf[17] = 0x00;
401 1 }
402
403
404 void WriteDateTime()
405 {
406 1 uchar uYear;
407 1 //计算BCD码
408 1 UartBuf[0] = (UartBuf[16] << 4) | UartBuf[17]; //秒
409 1 UartBuf[1] = (UartBuf[14] << 4) | UartBuf[15]; //分
410 1 UartBuf[2] = (UartBuf[12] << 4) | UartBuf[13]; //时
411 1 uYear = UartBuf[5] * 10 + UartBuf[6];
412 1 UartBuf[3] = ((uYear%4)<<6) | (UartBuf[10] << 4) | UartBuf[11]; //年日
413 1 UartBuf[4] = (UartBuf[7] << 4) | UartBuf[9]; //月
414 1 Set8583Byte (PCF8583_CTR, 0x80);
415 1 Set8583Data (SECOND, UartBuf, 5); //写日期时间
416 1 Set8583Byte (PCF8583_CTR, 0x00);
417 1 Set8583Byte (BASE_YEAR, uYear/4);
418 1 Set8583Byte (CMP_YEAR, uYear%4);
419 1 }
420
421
422 uint GetResult (uchar uLen)
423 {
424 1 uint Data = 0;
425 1 uchar i;
426 1
427 1 for (i=uLen; i<4; i++)
C51 COMPILER V7.50 DDCJC 11/28/2006 20:24:32 PAGE 8
428 1 Data = Data * 10 + CodeIndex[i];
429 1 return Data;
430 1 }
431
432 void InitCodeIndex (uint Data)
433 {
434 1 uchar i;
435 1 for (i=0; i<4; i++)
436 1 {
437 2 CodeIndex[3-i] = Data % 10;
438 2 Data = Data / 10;
439 2 }
440 1 DataIndex = CodeIndex[0];
441 1 }
442
443 uchar ReadKey () //读键盘
444 {
445 1 //WordType idata Convert;
446 1
447 1 switch (~P2)
448 1 {
449 2 case 0x01: //设置
450 2 bDispTime = FALSE;
451 2 IsOption = TRUE;
452 2 ShiftIndex = 4;
453 2 ClearLED ();
454 2 DispBuf[0] = LED_CODE[10];
455 2 DispBuf[1] = LED_CODE[16];
456 2 DispBuf[2] = LED_CODE[OptIndex];
457 2 IsShine = TRUE;
458 2 switch (OptIndex)
459 2 {
460 3 case 0:
461 3 //显示当前记录编号
462 3 IntToLED (RecordIndex, 3, 3, FALSE, FALSE, 4);
463 3 InitCodeIndex(RecordIndex);
464 3 break;
465 3 case 1:
466 3 //计算当前记录编号
467 3 RecordIndex = GetResult(0);
468 3 //记录编号
469 3 //Convert.w = RecordIndex;
470 3 //Set8583Data (RCORDINDEX, Convert.b, 2);
471 3 WriteParam ();
472 3 DispBuf[7] = LED_CODE[ModeIndex];
473 3 break;
474 3 case 2:
475 3 //保存模式
476 3 //Set8583Byte (MODE_INDEX, ModeIndex);
477 3 WriteParam ();
478 3 IntToLED (OptDistance, 3, 2, TRUE, FALSE, 4); //显示
479 3 //换算得到当前值的下标
480 3 InitCodeIndex (OptDistance);
481 3 break;
482 3 case 3:
483 3 //计算设置行程
484 3 OptDistance = GetResult(0);
485 3 OptKilDis = OptDistance / 100;
486 3 OptDis = (OptDistance % 100) * 10;
487 3
488 3 //里程
489 3 //Convert.w = OptDistance;
C51 COMPILER V7.50 DDCJC 11/28/2006 20:24:32 PAGE 9
490 3 //Set8583Data (DIS_ALARM, Convert.b, 2);
491 3 WriteParam ();
492 3 ShiftIndex ++;
493 3 IntToLED (OptRate, 2, 1, TRUE, FALSE, 5);
494 3 //换算得到当前值的下标
495 3 InitCodeIndex(OptRate);
496 3 break;
497 3 case 4:
498 3 //计算报警速度
499 3 OptRate = GetResult(1);
500 3
501 3 //车速
502 3 //Convert.w = OptRate;
503 3 //Set8583Data (RATE_ALARM, Convert.b, 2);
504 3 WriteParam ();
505 3 IntToLED (OptVoltage, 3, 1, TRUE, FALSE, 4);
506 3 //换算得到当前值的下标
507 3 InitCodeIndex(OptVoltage);
508 3 break;
509 3 case 5:
510 3 //计算欠压电压
511 3 OptVoltage = GetResult(0);
512 3
513 3 //电压
514 3 //Convert.w = OptVoltage;
515 3 //Set8583Data (VOL_ALARM, Convert.b, 2);
516 3 WriteParam ();
517 3 ShiftIndex ++;
518 3 IntToLED (OptCurrent, 2, 1, TRUE, FALSE, 5);
519 3 //换算得到当前值的下标
520 3 InitCodeIndex(OptCurrent);
521 3 break;
522 3 case 6:
523 3 //计算过载电流
524 3 OptCurrent = GetResult(1);
525 3
526 3 //电流
527 3 //Convert.w = OptCurrent;
528 3 //Set8583Data (CURR_ALARM, Convert.b, 2);
529 3 WriteParam ();
530 3 //打印模式
531 3 DispBuf[7] = LED_CODE[PrinterIndex];
532 3 break;
533 3 case 7:
534 3 //保存打印模式
535 3 //Set8583Byte (PRINT_INDEX, PrinterIndex);
536 3 WriteParam ();
537 3 ShiftIndex = 6;
538 3 //电池容量
539 3 IntToLED (Battery, 1, 1, FALSE, FALSE, 6);
540 3 //换算得到当前值的下标
541 3 InitCodeIndex(Battery);
542 3 break;
543 3 case 8:
544 3 Battery = GetResult(2);
545 3
546 3 //保存电池容量
547 3 //Set8583Byte (BATTERY, Battery);
548 3 WriteParam ();
549 3 //显示当前N
550 3 IntToLED (NValue, 3, 3, FALSE, FALSE, 4);
551 3 //换算得到当前值的下标
C51 COMPILER V7.50 DDCJC 11/28/2006 20:24:32 PAGE 10
552 3 InitCodeIndex(NValue);
553 3 break;
554 3 case 9:
555 3 //计算N值
556 3 NValue = GetResult(0);
557 3
558 3 //N值
559 3 //Convert.w = NValue;
560 3 //Set8583Data (N_VALUE, Convert.b, 2);
561 3 WriteParam ();
562 3 ShiftIndex ++;
563 3 //显示滚筒直径
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -