?? t100.lst
字號:
298 #define Set_SDA_Low SDA = 0,SDA = 0
299 #define Set_SCL_High SCL = 1,SCL = 1
300 #define Set_SCL_Low SCL = 0,SCL = 0
301
302 #define SDA_High SDA!=0
C51 COMPILER V6.12 T100 08/25/2007 18:38:52 PAGE 6
303 #define SDA_Low SDA==0
304 #define SCL_High SCL!=0
305 #define SCL_Low SCL==0
306
307 #define TWD_SPEED 0x01 //value: 1 (Fastest), 2 (slower), ... N (much slower)
308 #define TWD_LONG_TIME (TWD_SPEED*8)
309 #define TWD_SHORT_TIME (TWD_SPEED*1)
310 void StartCondition(void)
311 {
312 1 uCHAR ix;
313 1 uCHAR cTWtrytime=0;
314 1 EA=0;
315 1 while(++cTWtrytime)
316 1 {
317 2 Set_SDA_High;
318 2 Set_SCL_High; /* make sure two line is release */
319 2 for(ix = 0; ix < TWD_LONG_TIME; ix++)
320 2 { }; /* Delay 12us */
321 2
322 2 Set_SDA_Low;
323 2 for(ix = 0; ix < TWD_LONG_TIME; ix++)
324 2 { }; /* Delay 12us */
325 2
326 2 if((SCL_High)&&(SDA_Low))
327 2 break;
328 2 }
329 1
330 1 for(ix = 0; ix < TWD_SHORT_TIME; ix++)
331 1 { }; /* Delay 12us */
332 1 }
333
334 //----------------------------------------
335 // P_Condition for TWD protocol
336 //----------------------------------------
337 void StopCondition(void)
338 {
339 1 uCHAR ix;
340 1 uCHAR cTWtrytime=0;
341 1
342 1 Set_SDA_Low;
343 1 Set_SCL_High;
344 1 for(ix = 0; ix < TWD_SHORT_TIME; ix++)
345 1 { }; /* delay 12us */
346 1
347 1 while(SCL_Low && ++cTWtrytime)
348 1 { };
349 1
350 1 for(ix = 0; ix < TWD_SHORT_TIME; ix++)
351 1 { }; /* delay 12us */
352 1
353 1 Set_SDA_High;
354 1 for(ix = 0; ix < TWD_SHORT_TIME; ix++)
355 1 { }; /* delay 12us */
356 1 EA=1;
357 1 }
358
359 //--------------------------------------------------
360 // Send_Byte
361 // Send a byte to master with a acknowledge bit
362 //--------------------------------------------------
363 uCHAR Send_Byte(uCHAR cData)
364 {
C51 COMPILER V6.12 T100 08/25/2007 18:38:52 PAGE 7
365 1 uCHAR ix, j, cAcknowledge;
366 1 uCHAR cTWtrytime=0;
367 1
368 1 cAcknowledge = 0;
369 1
370 1 for(ix = 0; ix < 8; ix++)
371 1 {
372 2 Set_SCL_Low;
373 2 for(j = 0; j < TWD_SHORT_TIME; j++)
374 2 { };
375 2
376 2 if(cData&0x80)Set_SDA_High;
377 2 else Set_SDA_Low;
378 2 cData<<=1;
379 2
380 2 for(j = 0; j < TWD_SHORT_TIME; j++)
381 2 { };
382 2
383 2 Set_SCL_High;
384 2 while(SCL_Low && ++cTWtrytime)
385 2 { };
386 2
387 2 for(j = 0; j < TWD_SHORT_TIME; j++)
388 2 { };
389 2 }
390 1 for(j = 0; j < TWD_SHORT_TIME; j++)
391 1 { };
392 1
393 1 Set_SCL_Low;
394 1 for(j = 0; j < TWD_SHORT_TIME; j++)
395 1 { };
396 1
397 1 Set_SDA_High; /* release data line for acknowledge */
398 1 for(j = 0; j < TWD_SHORT_TIME; j++)
399 1 { };
400 1
401 1 Set_SCL_High; /* Send a clock for Acknowledge */
402 1 while(SCL_Low)
403 1 { };
404 1 for(j = 0; j < TWD_SHORT_TIME; j++)
405 1 { };
406 1
407 1 if(SDA_High) cAcknowledge = 1; /* No Acknowledge */
408 1 Set_SCL_Low; /* Finish Acknoledge */
409 1 for(j = 0; j < TWD_SHORT_TIME; j++)
410 1 { };
411 1
412 1 return(cAcknowledge);
413 1 }
414
415 //--------------------------------------------------
416 // Read_Byte
417 // Read a byte from master with a acknowledge bit
418 //--------------------------------------------------
419 uCHAR Read_Byte(uCHAR cNum)
420 {
421 1 uCHAR ix, j;
422 1 uCHAR cRetval=0;
423 1
424 1 for(ix=0;ix<8;ix++){
425 2 Set_SCL_High;
426 2 while(SCL_Low){};
C51 COMPILER V6.12 T100 08/25/2007 18:38:52 PAGE 8
427 2 for(j=0;j<TWD_SHORT_TIME;j++){};
428 2 cRetval = (SDA_High)? (cRetval|(1<<(7-ix))):cRetval ; /* MSB First */
429 2 Set_SCL_Low;
430 2 }
431 1
432 1 if(cNum==1)
433 1 Set_SDA_High;
434 1 else
435 1 Set_SDA_Low;
436 1 //SDA = (cNum==1) 1:0;
437 1 Set_SCL_High;
438 1 while(SCL_Low){};
439 1 for(j = 0; j < TWD_SHORT_TIME; j++)
440 1 { };
441 1
442 1 Set_SCL_Low;
443 1
444 1 Set_SDA_High;
445 1 for(j = 0; j < TWD_SHORT_TIME; j++)
446 1 { };
447 1
448 1 return cRetval;
449 1 }
450 uCHAR I2CReadByte(uCHAR cAddr, uCHAR cReg)
451 {
452 1 uCHAR cTemp;
453 1
454 1 StartCondition();
455 1 Send_Byte(cAddr);
456 1 Send_Byte(cReg);
457 1 StartCondition();
458 1 Send_Byte(cAddr|0x01);
459 1 cTemp=Read_Byte(1);
460 1 StopCondition();
461 1
462 1 return cTemp;
463 1 }
464 uCHAR I2CWriteByte(uCHAR cAddr,uCHAR cReg,uCHAR cData)
465 {
466 1 StartCondition();
467 1 Send_Byte(cAddr);
468 1 Send_Byte(cReg);
469 1 Send_Byte(cData);
470 1 StopCondition();
471 1 return 0;
472 1 }
473 void I2CWriteTbl(char *pString)
474 {
475 1 uCHAR cAddr,cReg,cNum0,cNum1,cINC;
476 1 while(*pString != EOT)
477 1 {
478 2 cAddr = *pString++;
479 2 cNum0 = *pString++;
480 2 while(cNum0)
481 2 {
482 3 cReg = *pString++;
483 3 cNum1 = *pString++;
484 3 cNum0 -= (cNum1+2);
485 3 if(cNum1!=1)
486 3 {
487 4 cINC = *pString++;
488 4 cNum1 -= 1;
C51 COMPILER V6.12 T100 08/25/2007 18:38:52 PAGE 9
489 4 }
490 3 while(cNum1--)
491 3 {
492 4 I2CWriteByte(cAddr,cReg,*pString++);
493 4 cReg+=cINC;
494 4 }
495 3 }
496 2 }
497 1 }
498 uCHAR Repeat_Times;
499 void KeyFunction(uCHAR cTemp)
500 {
501 1 switch(cTemp)
502 1 {
503 2 case kyFULL_43://0x40
504 2 bFULL_43=!bFULL_43;
505 2 SetMode();
506 2 if(!bFULL_43)I2CWriteByte(0x50,0xe0,0x00);
507 2 else I2CWriteByte(0x50,0xe0,0x9d);
508 2 Repeat_Times=0xff;
509 2 Delay_ms(50);
510 2 break;
511 2 case kyUD_LR://0x20
512 2 if(bUP_DOWN&bLEFT_RIGHT)
513 2 {
514 3 bUP_DOWN=0;
515 3 bLEFT_RIGHT=0;
516 3 }
517 2 else if(bUP_DOWN&!bLEFT_RIGHT)
518 2 {
519 3 bUP_DOWN=1;
520 3 bLEFT_RIGHT=1;
521 3 }
522 2 else if(!bUP_DOWN&bLEFT_RIGHT)
523 2 {
524 3 bUP_DOWN=1;
525 3 bLEFT_RIGHT=0;
526 3 }
527 2 else if(!bUP_DOWN&!bLEFT_RIGHT)
528 2 {
529 3 bUP_DOWN=0;
530 3 bLEFT_RIGHT=1;
531 3 }
532 2
533 2 SetUD_LR();
534 2 Repeat_Times=0xff;
535 2 I2CWriteByte(0x50,0xe0,0x8d);
536 2 Delay_ms(50);
537 2 break;
538 2 case kySOURCE://0x10
539 2 cSource++;
540 2 if(cSource>6)cSource=3;
541 2 SetSource();
542 2 SetMode();
543 2 Repeat_Times=0xff;
544 2 Delay_ms(50);
545 2 break;
546 2 #ifdef OSD_EN
547 2 case kyMENU://0x08
548 2 cOSDFunc+=1;
549 2 if(cOSDFunc>3)cOSDFunc=0;
550 2 OSDCtrl(0);
C51 COMPILER V6.12 T100 08/25/2007 18:38:52 PAGE 10
551 2 Repeat_Times=0xff;
552 2 break;
553 2 case kyDEC://0x04
554 2 OSDCtrl(-1);
555 2 if(Repeat_Times==0xff)Repeat_Times=5;
556 2 else Repeat_Times=0;
557 2 break;
558 2 case kyINC://0x02
559 2 OSDCtrl(1);
560 2 if(Repeat_Times==0xff)Repeat_Times=5;
561 2 else Repeat_Times=0;
562 2 break;
563 2 default: Repeat_Times=0xff;
564 2 #endif
565 2 }
566 1
567 1 }
568 void kyKeypad(void)
569 {
570 1 cKey_Curr =0xff -( KEYPORT | kyKEY_MSK );
571 1 if((cKey_Curr!=cKey_Pre)|(Repeat_Times==0))
572 1 {
573 2 cKey_Pre = cKey_Curr;
574 2 KeyFunction(cKey_Curr);
575 2 /* switch(cKey_Curr)
576 2 {
577 2 case kyFULL_43://0x40
578 2 bFULL_43=!bFULL_43;
579 2 SetMode();
580 2 if(!bFULL_43)I2CWriteByte(0x50,0xe0,0x00);
581 2 else I2CWriteByte(0x50,0xe0,0x9d);
582 2 Repeat_Times=0xff;
583 2 Delay_ms(50);
584 2 break;
585 2 case kyUD_LR://0x20
586 2 SetUD_LR();
587 2 Repeat_Times=0xff;
588 2 I2CWriteByte(0x50,0xe0,0x8d);
589 2 Delay_ms(50);
590 2 break;
591 2 case kySOURCE://0x10
592 2 cSource++;
593 2 if(cSource>6)cSource=3;
594 2 SetSource();
595 2 SetMode();
596 2 Repeat_Times=0xff;
597 2 Delay_ms(50);
598 2 break;
599 2 #ifdef OSD_EN
600 2 case kyMENU://0x08
601 2 cOSDFunc+=1;
602 2 if(cOSDFunc>3)cOSDFunc=0;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -