?? iic_bit.lst
字號:
321 1 SEN=0;
322 1 if(!STE)
323 1 {
324 2 SEN=1;
325 2 SCL=1;
326 2 SDA=1;
327 2 return;
328 2 }
329 1 start(); //開始信號
330 1 outbyte(IIC_WRITE|(temph<<1)); //寫命令
331 1 nack(1); //等待應答
332 1 outbyte(templ); //寫地址
333 1 nack(1);
334 1 outbyte(wbyte); //寫數據
335 1 nack(1); //等待應答
336 1 stop(); //停止信號
337 1 SCL=1;
338 1 SDA=1;
339 1 SEN=1;
340 1 }
341 //=====================================================
342 //FUNCTION:RANDOM READ.'add' IS THE ADDRESS WANT TO READ
343 uchar readbyte (uint add)//add為讀地址
344 {
345 1 uchar temp,temph,templ;
346 1 temph=(uchar)(add/256);
347 1 templ=(uchar)(add%256);
348 1 if(!STE)
349 1 return 0XFF;
350 1 SEN=0;
351 1 if(!STE)
352 1 {
353 2 SCL=1;
354 2 SDA=1;
355 2 SEN=1;
356 2 return 0XFF;
357 2 }
358 1 start(); //開始信號
359 1 outbyte(IIC_WRITE|(temph<<1)); //寫命令
360 1 nack(1); //等待應答
361 1 outbyte(templ); //寫地址
362 1 nack(1);
363 1 start(); //開始信號
364 1 outbyte(IIC_READ|(temph<<1)); //讀命令
365 1 nack(1); //等待應答
C51 COMPILER V7.50 IIC_BIT 10/30/2007 19:00:59 PAGE 7
366 1 temp=inbyte(); //讀數據
367 1 nack(0); //無應答
368 1 stop(); //停止信號
369 1 SEN=1;
370 1 SCL=1;
371 1 SDA=1;
372 1 return(temp);
373 1 }
374 //=================================================
375 //連寫函數
376 //add為讀起始地址,ptr數據保存指針,writelen為寫入數據長度
377 uchar writebyteseq(uint add,uchar *ptr,uint writelen)
378 {
379 1 //uchar temp;
380 1 uchar temph,templ;
381 1 uint i;
382 1 temph=(uchar)(add/256);
383 1 templ=(uchar)(add%256);
384 1 if(!STE)
385 1 return 0XFF;
386 1 SEN=0;
387 1 if(!STE)
388 1 {
389 2 SCL=1;
390 2 SDA=1;
391 2 SEN=1;
392 2 return 0XFF;
393 2 }
394 1 start();
395 1 outbyte(IIC_WRITE|(temph<<1));
396 1 nack(1);
397 1 outbyte(templ);
398 1 nack(1);
399 1 for(i=0;i<writelen;i++)
400 1 {
401 2 outbyte(*(ptr+i));
402 2 nack(1);
403 2 }
404 1
405 1 stop();
406 1 SCL=1;
407 1 SDA=1;
408 1 SEN=1;
409 1 return 0;
410 1 }
411 //=================================================
412 //連讀函數
413 //add為讀起始地址,ptr數據保存指針,writelen為讀出數據長度
414 uchar readbyteseq(uint add,uchar *ptr,uint readlen)
415 {
416 1
417 1 xdata uchar temph,templ;
418 1 uint i;
419 1 EA=0;
420 1
421 1 temph=(uchar)(add/256);
422 1 templ=(uchar)(add%256);
423 1 if(!STE)
424 1 {
425 2 SCL=1;
426 2 SDA=1;
427 2 SEN=1;
C51 COMPILER V7.50 IIC_BIT 10/30/2007 19:00:59 PAGE 8
428 2 return 0XFF;
429 2 }
430 1 SEN=0;
431 1 if(!STE)
432 1 {
433 2 SCL=1;
434 2 SDA=1;
435 2 SEN=1;
436 2 return 0XFF;
437 2 }
438 1 start();
439 1 outbyte(IIC_WRITE|(temph<<1));
440 1 nack(1);
441 1 outbyte(templ);
442 1 nack(1);
443 1 start();
444 1 outbyte(IIC_READ|(temph<<1));
445 1 nack(1);
446 1 for(i=0;i<readlen-1;i++)
447 1 {
448 2 *(ptr+i)=inbyte();
449 2 ack();
450 2
451 2 }
452 1 *(ptr+readlen-1)=inbyte();
453 1 nack(0);
454 1 stop();
455 1 SCL=1;
456 1 SDA=1;
457 1 SEN=1;
458 1 return 0;
459 1 }
460 //=======================================================
461 //THIS IS A TEST OPERATION
462
463 delay(void)
464 {
465 1 xdata uchar i;
466 1 for(i=0;i<100;i++)
467 1 ;
468 1 }
469 //=======================================================
470 //THIS IS A TEST OPERATION
471 delay10ms()
472 {
473 1 xdata uint a,b;
474 1 for(a=0;a<200;a++)
475 1 for(b=0;b<20;b++)
476 1 ;
477 1 }
478 xdata uchar recc[1028];
479 xdata uchar re_time[8];
480 xdata uchar set[50];
481 xdata uchar write_c[1024]={0,0,3,4,5,6,7,8,9,10,11};
482 xdata uchar read_c[1024]={0,0,3,4,5,6,7,8,9,10,11};
483 void display();
484 uchar *pp;
485 uchar dd=0;
486 uchar chan=0;
487 main()
488 {
489 1 uint i=0;
C51 COMPILER V7.50 IIC_BIT 10/30/2007 19:00:59 PAGE 9
490 1 uint k=0;
491 1 uint b=0;
492 1 uchar len=0;
493 1 /*
494 1 while(1)
495 1 {
496 1 write_c[0]=i+2;
497 1 write_c[1023]=i+3;
498 1 while(writebyteseq(1024,write_c,1024));
499 1 delay10ms();
500 1 while(readbyteseq(1024,read_c,1024) );
501 1 if((read_c[0]==i+2)&&(read_c[1023]==i+3))
502 1 k++;
503 1 else
504 1 b++;
505 1 i++;
506 1 delay10ms();
507 1 if(i>100)
508 1 while(1);
509 1 }
510 1 */
511 1
512 1
513 1 set[0]=0x62;
514 1 set[1]=0x62;
515 1 set[2]=0x62;
516 1 set[3]=0x62; //前四字節為清空指令碼
517 1 set[4]=0x02;
518 1 set[5]=0xd0; //清空的列數 最大720列
519 1 set[6]=0x01;
520 1 set[7]=0xe0; //清空的行數 最大480列
521 1 set[8]=0x00;
522 1 set[9]=000; //從X 位置開始清空
523 1 set[10]=0x00;
524 1 set[11]=000; //從Y位置開始清空
525 1 set[12]=0xff; //清空后填充的顏色 0XFF 為白色
526 1 set[13]=0x02; //清空方式 0X02重新打開圖象緩沖 0X01 一般清屏幕
527 1 delay10ms();
528 1 while(writebyteseq(0,set,16));
529 1 while(1)
530 1 {
531 2 set[0]=0x67;
532 2 set[1]=0x67;
533 2 set[2]=0x67;
534 2 set[3]=0x67; //前四個字節為寫圖象緩沖指令碼
535 2 set[4]=0x00;
536 2 set[5]=24; //要寫圖象的寬度
537 2 set[6]=0x00;
538 2 set[7]=240; //要寫圖象的高度
539 2 set[8]=0x01;
540 2 set[9]=50; //圖象顯示在緩沖區的X 位置
541 2 set[10]=0x00;
542 2 set[11]=180; //圖象顯示在緩沖區的Y 位置
543 2 set[12]=0x01;
544 2 set[13]=0x00; //數據傳輸狀態標志
545 2 delay10ms();
546 2 while(writebyteseq(0,set,18));
547 2 len=(test_y_z[0]*test_y_z[1]/(1024*(8/set[12]))+1);
548 2 do
549 2 {
550 3 delay10ms();
551 3 while(!STE);
C51 COMPILER V7.50 IIC_BIT 10/30/2007 19:00:59 PAGE 10
552 3 readbyteseq(0,set,18);
553 3 }while(set[13]!=0xaa);
554 2 //不斷檢測狀態標志位置是否有完成標志 0XAA 如果是0XAA證明MAX5399已經將指定的數據讀到
555 2 if(chan==0x00)
556 2 {
557 3 chan=0xff;
558 3 pp=test_y_z;
559 3 }
560 2 else
561 2 {
562 3 chan=0;
563 3 pp=test_y_z;
564 3 }
565 2 for(i=0;i<len;i++)
566 2 {
567 3 while(!STE);
568 3 while(writebyteseq(1024,pp,1024));
569 3 set[13]=0x00; //將讀取完成狀態反送給MIX5399
570 3 while(writebyteseq(0,set,16));
571 3 pp=pp+1024;
572 3 do
573 3 {
574 4 while(readbyteseq(0,set,18));
575 4 }
576 3 while(set[13]!=0xaa);
577 3 }
578 2 delay10ms();
579 2 }
580 1
581 1 }
582 void display()
583 {
584 1 uchar i=0;
585 1 for (i = 0; i < 6; i++)
586 1 { //循環顯示6位數據
587 2 switch (i)
588 2 {
589 3 case 0:
590 3 P0=0Xdf;
591 3 P1=P1|0X03;
592 3 break;
593 3 case 1:
594 3 P0=0XBF;
595 3 P1=P1|0X03;
596 3 break;
597 3 case 2:
598 3 P0=0X7F;
599 3 P1=P1|0X03;
600 3 break;
601 3 case 3:
602 3 P0=0XFF;
603 3 P1=0xfe;
604 3 break;
605 3 case 4:
606 3 P0=0XFF;
607 3 P1=0XFd;
608 3 break;
609 3 case 5:
610 3 P0=0Xef;
611 3 P1=0xff;
612 3 break;
613 3 }
C51 COMPILER V7.50 IIC_BIT 10/30/2007 19:00:59 PAGE 11
614 2 dis[5]=(getclk[2]>>4); //顯示接收到的百位
615 2 dis[0]=(getclk[2]&0x0f); //顯示接收到的十位
616 2
617 2 dis[1]=(getclk[1]>>4); //顯示接收到的百位
618 2 dis[2]=(getclk[1]&0x0f); //顯示接收到的十位
619 2
620 2 dis[3]=(getclk[0]>>4); //顯示接收到的百位
621 2 dis[4]=(getclk[0]&0x0f); //顯示接收到的十位
622 2
623 2
624 2
625 2 //dis[4]=gh%10; //顯示接收到的個位
626 2
627 2
628 2 if((i==1)||(i==3))
629 2 P2=seg[dis[i]]&0xdf; //送數據到顯示位
630 2 else
631 2 P2=seg[dis[i]];
632 2 }
633 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1338 ----
CONSTANT SIZE = 4000 ----
XDATA SIZE = 5416 21
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -