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