📄 showfun.lst
字号:
C51 COMPILER V8.02 SHOWFUN 08/08/2010 09:56:12 PAGE 8
397 2 c1 = fmt[i];
398 2 c2 = fmt[i+1];
399 2
400 2 fnSetPos(y,x/8);
401 2 if(c1 >= 0)
402 2 {
403 3 // ASCII
404 3 if(c1 < 0x20)
405 3 {
406 4 switch(c1)
407 4 {
408 5 case CR:
409 5 case LF: // 回车或换行
410 5 i++;
411 5 x=0;
412 5 if(y < 112)y+=HZ_CHR_HEIGHT;
413 5 continue;
414 5 case BS: // 退格
415 5 i++;
416 5 if(y>ASC_CHR_WIDTH)y-=ASC_CHR_WIDTH;
417 5 cData = 0x00;
418 5 break;
419 5 }
420 4 }
421 3 for(j=0;j<ASC_CHR_HEIGHT;j++)
422 3 {
423 4
424 4 if(c1 >= 0x1f)
425 4 {
426 5 cData= ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+j];
427 5 fnSetPos(y+j,x/8);
428 5 if((x%8)==0)
429 5 {
430 6 fnPR12(LC_AUT_WR); // 写数据
431 6 fnPR13(cData);
432 6 fnPR12(LC_AUT_OVR);
433 6 }
434 5 else
435 5 OutToLCD(cData,x,y+j);
436 5 }
437 4 fnSetPos(y+j,x/8);
438 4 }
439 3 if(c1 != BS) // 非退格
440 3 x+=ASC_CHR_WIDTH;
441 3 }
442 2 else
443 2 { // 中文
444 3
445 3 for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
446 3 {
447 4 if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
448 4 break;
449 4 }
450 3 for(k=0;k<HZ_CHR_HEIGHT;k++)
451 3 {
452 4
453 4 fnSetPos(y+k,x/8);
454 4 if(j < sizeof(GB_16)/sizeof(GB_16[0]))
455 4 {
456 5 c1=GB_16[j].Msk[k*2];
457 5 c2=GB_16[j].Msk[k*2+1];
458 5 }
C51 COMPILER V8.02 SHOWFUN 08/08/2010 09:56:12 PAGE 9
459 4 else
460 4 c1=c2=0;
461 4 if((x%8)==0)
462 4 {
463 5 fnPR12(LC_AUT_WR);
464 5 fnPR13(c1);
465 5 fnPR12(LC_AUT_OVR);
466 5 }
467 4 else
468 4 OutToLCD(c1,x,y+k);
469 4
470 4 if(((x+2+HZ_CHR_WIDTH/2)%8)==0)
471 4 {
472 5 fnPR12(LC_AUT_WR);
473 5 fnPR13(c2);
474 5 fnPR12(LC_AUT_OVR);
475 5 }
476 4 else
477 4 OutToLCD(c2,x+2+HZ_CHR_WIDTH/2,y+k);
478 4 }
479 3 x+=HZ_CHR_WIDTH;
480 3 i++;
481 3 }
482 2 i++;
483 2 }
484 1 return uLen;
485 1 }
486 void OutToLCD(uchar Dat,uchar x,uchar y)
487 {
488 1 uchar uData1,uData2,ux,a,b;
489 1
490 1 a=8-(x%8);b=x%8;
491 1 fnSetPos(y,x/8);
492 1 fnPR12(LC_AUT_RD); // 读数据
493 1 uData1=fnPR2();
494 1 uData2=fnPR2();
495 1 fnPR12(LC_AUT_OVR);
496 1 fnSetPos(y,x/8);
497 1 uData1&=~MSK1[a];
498 1 ux=Dat&MSK2[a];
499 1 ux>>=b;
500 1 uData1=uData1|ux;
501 1 ux=~MSK2[b];
502 1 uData2&=ux;
503 1 ux=MSK1[b];
504 1 ux=Dat&ux;
505 1 ux<<=a;
506 1 uData2=uData2|ux;
507 1 fnPR12(LC_AUT_WR); // 写数据
508 1 fnPR13(uData1);
509 1 fnPR13(uData2);
510 1 fnPR12(LC_AUT_OVR);
511 1
512 1 }
513 void SetShowMode(uchar newShowModeSW) //设置为显示模式
514 {
515 1 ShowModeSW=newShowModeSW;
516 1 fnPR12(LC_DIS_SW | newShowModeSW);
517 1 }
518
519 /**********************************
520 //= 函数原型: Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
C51 COMPILER V8.02 SHOWFUN 08/08/2010 09:56:12 PAGE 10
521 //= 功 能: 在指定坐标位置显示一个点
522 //= 参 数: 坐标,显示点或清除点
523 //= 返 回 值:
524 //= 函数性质:私有函数
525 //= 如果显示屏超过了256*256,请修改这个函数 PointX,PointY的类型
526 //= Mode 1:显示 0:清除该点
527 **********************************/
528 void Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
529 {
530 1 unsigned char StartAddr;
531 1 unsigned char dat;
532 1 StartAddr=7-(PointX%8);
533 1 dat=LC_BIT_OP|StartAddr; //生产位操作命令画点的数据
534 1 if(Mode) dat=dat|0x08;
535 1 fnSetPos(PointY,PointX/8);
536 1 fnPR12(LC_BIT_OP|dat); // 写数据
537 1 }
538
539
540 /**********************************
541 //= 函数原型: void line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bit Mode)
542 //= 功 能: 划线函数
543 //= 参 数: 坐标1,坐标2,显示点或清除点
544 //= 返 回 值:
545 //= 函数性质:私有函数
546 //= 其它:显示点阵不超过255*255
547 /**********************************/
548
549 void line( unsigned char x1,unsigned char y1, unsigned char x2,unsigned char y2, bit Mode)
550 {
551 1 unsigned char x,y;
552 1 float k,b;
553 1 if( abs(y1-y2) <= abs(x1-x2) ) // |k|<=1
554 1 {
555 2 k=((float)y2-y1) / ((float)x2-x1) ;
556 2 b=y1-k*x1;
557 2 if( x1 <= x2 )
558 2 {
559 3 for(x=x1;x<=x2;x++)
560 3 {
561 4 y=(uchar)(k*x+b);
562 4 Pixel(x, y, Mode);
563 4 }
564 3 }
565 2 else
566 2 {
567 3 for(x=x2;x<=x1;x++)
568 3 {
569 4 y=(uchar)(k*x+b);
570 4 Pixel(x, y, Mode);
571 4 }
572 3 }
573 2 }
574 1 else // abs(y1-y2) > abs(x1-x2) |K|>1
575 1 {
576 2 k=((float)x2-x1) / ((float)y2-y1) ;
577 2 b=x1-k*y1;
578 2 if( y1 <= y2 )
579 2 {
580 3 for(y=y1;y<=y2;y++)
581 3 {
582 4 x=(uchar)(k*y+b);
C51 COMPILER V8.02 SHOWFUN 08/08/2010 09:56:12 PAGE 11
583 4 Pixel( x , y,Mode );
584 4 }
585 3 }
586 2 else
587 2 {
588 3 for(y=y2;y<=y1;y++)
589 3 {
590 4 x=(uchar)(k*y+b);
591 4 Pixel( x , y,Mode );
592 4 }
593 3 }
594 2 }
595 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1657 ----
CONSTANT SIZE = 1984 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 39
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -