📄 drivert6963.lst
字号:
491 调用程序:
492 备注:
493 **********************************************************************************************/
494 void BitSet(unsigned int Address, unsigned char BIT)
495 {
496 1 BIT = 0XF8 + BIT;
497 1 WCIntData(AddrPointer,Address);
498 1 WCNoData(BIT);
499 1 }
500
501
502 /**********************************************************************************************
503 函数名称: void BitReset(unsigned int Address, unsigned char BIT)
504 函数功能: 清除屏幕上的一点
505 入口参数: 该点的字节地址,第几位
506 出口参数:
507 具体资源:
508 调用程序:
509 备注:
510 **********************************************************************************************/
511 void BitReset(unsigned int Address, unsigned int BIT)
512 {
513 1 BIT = 0XF0 + BIT;
514 1 WCIntData(AddrPointer,Address);
515 1 WCNoData(BIT);
516 1 }
517
518
519
520 /**********************************************************************************************
521 函数名称: WriteEN(unsigned int Address, unsigned char Dat)
522 函数功能: 写一个英文字符
523 入口参数: 屏幕地址和要写入的字符
524 出口参数:
525 具体资源:
526 调用程序:
527 备注:
528 **********************************************************************************************/
529 void WriteEN(unsigned int Address, unsigned char Dat)
530 {
531 1 Dat = Dat - 0x20;
532 1 WriteCG(Address, Dat);
533 1 }
534
535
536 /**********************************************************************************************
537 函数名称: DispStr(unsigned char *str)
538 函数功能: 写一个字符串
539 入口参数: 屏幕地址和要写入的字符串首地址
540 出口参数:
541 具体资源:
542 调用程序:
543 备注:
544 **********************************************************************************************/
545 void DispStr(unsigned int StrtAddr, unsigned char *str)
546 {
547 1 unsigned int lCnt = 0;
548 1
C51 COMPILER V8.08 DRIVERT6963 06/18/2008 01:56:31 PAGE 10
549 1 do {
550 2 WriteEN(StrtAddr+lCnt, str[lCnt]);
551 2 lCnt++;
552 2 }while(str[lCnt] != '\0');
553 1 }
554
555 /**********************************************************************************************
556 函数名称: void DrawPoint(unsgined char Y, unsigned char X)
557 函数功能: 在屏幕的任何位置画一个点
558 入口参数: 该点的横坐标和纵坐标(屏幕的左上角坐标为(0,0))横向为X轴,纵向为Y轴
559 出口参数:
560 具体资源:
561 调用程序:
562 备注:
563 **********************************************************************************************/
564 void Point(unsigned int Xp, unsigned int Yp, unsigned char Mod)
565 {
566 1 unsigned int ColumnTmp;
567 1 unsigned int TireTmp;
568 1 unsigned int Address;
569 1 unsigned int BIT;
570 1 unsigned int Suplus;
571 1 unsigned char BITmp;
572 1
573 1 TireTmp = Yp * 0X14;
574 1 ColumnTmp = Xp / 8;
575 1 Suplus = Xp % 8;
576 1 BIT = 7 - Suplus;
577 1 BITmp = BIT;
578 1 Address = TireTmp + ColumnTmp +0X0800;
579 1 if (Mod){
580 2 BitSet(Address, BITmp);
581 2 }else{
582 2 BitReset(Address, BITmp);
583 2 }
584 1 }
585
586
587 /**********************************************************************************************
588 函数名称: void Line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2)
589 函数功能: 画直线函数
590 入口参数: 直线两端点坐标
591 出口参数:
592 具体资源:
593 调用程序:
594 备注: 采用BRESENHAM AL算法
595 **********************************************************************************************/
596 void Line(int x1, int y1, int x2, int y2, unsigned char Mod)
597 {
598 1 int dx, dy, d, incE, incNE, x, y, slope, temp;
599 1 int Ymin, Xmin;
600 1 unsigned char DrawFlag = 0x01;
601 1 /****************垂直线**********************************************/
602 1 if (x1 == x2)
603 1 {
604 2 if (y1 <= y2) {
605 3 temp = y2 - y1;
606 3 Ymin = y1;
607 3 }else {
608 3 temp = y1 - y2;
609 3 Ymin = y2;
610 3 }
C51 COMPILER V8.08 DRIVERT6963 06/18/2008 01:56:31 PAGE 11
611 2 for (; temp >= 0; temp--) {
612 3 if (Mod == 1) { //判定是否是要画虚线
613 4 if (DrawFlag == 0x01) {
614 5 Point(x1, Ymin+temp, 1);
615 5 DrawFlag = 0x00;
616 5 }else {
617 5 Point(x1, Ymin+temp, 0);
618 5 DrawFlag = 0x01;
619 5 }
620 4 }else {
621 4 Point(x1, Ymin+temp,1);
622 4 }
623 3 }
624 2 }
625 1 /********************************水平线*******************************/
626 1 else if (y1 == y2 )
627 1 {
628 2 if (x1 <= x2)
629 2 {
630 3 temp = x2 - x1;
631 3 Xmin = x1;
632 3 }
633 2 else
634 2 {
635 3 temp = x1 - x2;
636 3 Xmin = x2;
637 3 }
638 2 for (; temp > 0; temp--)
639 2 {
640 3 if (Mod == 1)
641 3 { //判定是否是要画虚线
642 4 if (DrawFlag == 0x01)
643 4 {
644 5 Point(Xmin+temp, y1, 1);
645 5 DrawFlag = 0x00;
646 5 }
647 4 else
648 4 {
649 5 Point(Xmin+temp, y1, 0);
650 5 DrawFlag = 0x01;
651 5 }
652 4 }
653 3 else
654 3 {
655 4 Point(Xmin+temp, y1, 1);
656 4 }
657 3 }
658 2 }
659 1 /*******************************斜线******************************/
660 1
661 1 else{
662 2 if (abs(x2-x1) > abs(y2-y1)){
663 3 if (x2 <= x1)
664 3 { //调整坐标,使其满足x1 <= x2( 从左到右的顺序)
665 4 temp =x1;
666 4 x1 =x2;
667 4 x2 = temp;
668 4 temp =y1;
669 4 y1 =y2;
670 4 y2 = temp;
671 4 }
672 3
C51 COMPILER V8.08 DRIVERT6963 06/18/2008 01:56:31 PAGE 12
673 3 dx = x2 - x1;
674 3 dy = y2 - y1;
675 3
676 3 if (dy < 0) { //用斜率来确定增量
677 4 slope = -1;
678 4 dy = -dy;
679 4 }else {
680 4 slope = 1;
681 4 }
682 3 /****************算法公式**********************/
683 3 incE = 2*dy; //东边一点
684 3 incNE = 2*dy - 2*dx; //东北一点
685 3 d = 2*dy - dx; //增量
686 3 /**********************************************/
687 3 y =y1;
688 3
689 3 for (x=x1; x <= x2; x++) {
690 4 if (Mod == 1) { //判定是否是要画虚线
691 5 if (DrawFlag == 0x01) {
692 6 Point(x, y, 1);
693 6 DrawFlag = 0x00;
694 6 }else {
695 6 Point(x, y, 0);
696 6 DrawFlag = 0x01;
697 6 }
698 5 }else {
699 5 Point(x, y, 1);
700 5 }
701 4 if (d < 0) { //往东走一步
702 5 d += incE;
703 5 }else {
704 5 d += incNE; //向东北走一步
705 5 y += slope;
706 5 }
707 4 }
708 3 }else { //end of if(abs(dx)>abs(dy))
709 3 if (y2 <= y1) { //调整坐标,使其满足y1 <= y2( 从左到右的顺序)
710 4 temp = x1;
711 4 x1 = x2;
712 4 x2 = temp;
713 4
714 4 temp = y1;
715 4 y1 = y2;
716 4 y2 = temp;
717 4 }
718 3
719 3 dx = x2 - x1;
720 3 dy = y2 - y1;
721 3
722 3 if (dx < 0) {
723 4 slope = -1;
724 4 dx = -dx;
725 4 }else {
726 4 slope = 1;
727 4 }
728 3
729 3 incE = 2*dx;
730 3 incNE = 2*dx - 2*dy;
731 3 d = 2*dx - dy;
732 3 x = x1;
733 3
734 3 for (y=y1; y <= y2; y++) {
C51 COMPILER V8.08 DRIVERT6963 06/18/2008 01:56:31 PAGE 13
735 4 if (Mod == 1) { //判定是否是要画虚线
736 5 if (DrawFlag == 0x01) {
737 6 Point(x, y, 1);
738 6 DrawFlag = 0x00;
739 6 }else {
740 6 Point(x, y, 0);
741 6 DrawFlag = 0x01;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -