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