📄 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 + -