📄 drivert6963.lst
字号:
742 6 }
743 5 }else {
744 5 Point(x, y, 1);
745 5 }
746 4 if (d < 0) {
747 5 d += incE;
748 5 }else {
749 5 d += incNE;
750 5 x += slope;
751 5 }
752 4 }//end of for (y=y1; y <= y2; y++)
753 3 }
754 2 }//end of /line
755 1 }
756
757
758 /**********************************************************************************************
759 函数名称: void LineClr(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2)
760 函数功能: 画直线函数
761 入口参数: 直线两端点坐标
762 出口参数:
763 具体资源:
764 调用程序:
765 备注: 采用BRESENHAM AL算法
766 **********************************************************************************************/
767 void LineClr(int x1, int y1, int x2, int y2)
768 {
769 1 int dx, dy, d, incE, incNE, x, y, slope, temp;
770 1 int Ymin, Xmin;
771 1 /****************垂直线**********************************************/
772 1 if (x1 == x2)
773 1 {
774 2 if (y1 <= y2) {
775 3 temp = y2 - y1;
776 3 Ymin = y1;
777 3 }else {
778 3 temp = y1 - y2;
779 3 Ymin = y2;
780 3 }
781 2 for (; temp >= 0; temp--) {
782 3 Point(x1, Ymin+temp,0);
783 3 }
784 2 }
785 1 /********************************水平线*******************************/
786 1 else if (y1 == y2 )
787 1 {
788 2 if (x1 <= x2)
789 2 {
790 3 temp = x2 - x1;
791 3 Xmin = x1;
792 3 }
793 2 else
794 2 {
795 3 temp = x1 - x2;
796 3 Xmin = x2;
C51 COMPILER V8.08 DRIVERT6963 06/18/2008 01:56:31 PAGE 14
797 3 }
798 2 for (; temp > 0; temp--)
799 2 {
800 3 Point(Xmin+temp, y1, 0);
801 3 }
802 2 }
803 1 /*******************************斜线******************************/
804 1
805 1 else{
806 2 if (abs(x2-x1) > abs(y2-y1)){
807 3 if (x2 <= x1)
808 3 { //调整坐标,使其满足x1 <= x2( 从左到右的顺序)
809 4 temp =x1;
810 4 x1 =x2;
811 4 x2 = temp;
812 4 temp =y1;
813 4 y1 =y2;
814 4 y2 = temp;
815 4 }
816 3
817 3 dx = x2 - x1;
818 3 dy = y2 - y1;
819 3
820 3 if (dy < 0) { //用斜率来确定增量
821 4 slope = -1;
822 4 dy = -dy;
823 4 }else {
824 4 slope = 1;
825 4 }
826 3 /****************算法公式**********************/
827 3 incE = 2*dy; //东边一点
828 3 incNE = 2*dy - 2*dx; //东北一点
829 3 d = 2*dy - dx; //增量
830 3 /**********************************************/
831 3 y =y1;
832 3
833 3 for (x=x1; x <= x2; x++) {
834 4 Point(x, y, 0);
835 4 if (d < 0) { //往东走一步
836 5 d += incE;
837 5 }else {
838 5 d += incNE; //向东北走一步
839 5 y += slope;
840 5 }
841 4 }
842 3 }else { //end of if(abs(dx)>abs(dy))
843 3 if (y2 <= y1) { //调整坐标,使其满足y1 <= y2( 从左到右的顺序)
844 4 temp = x1;
845 4 x1 = x2;
846 4 x2 = temp;
847 4
848 4 temp = y1;
849 4 y1 = y2;
850 4 y2 = temp;
851 4 }
852 3
853 3 dx = x2 - x1;
854 3 dy = y2 - y1;
855 3
856 3 if (dx < 0) {
857 4 slope = -1;
858 4 dx = -dx;
C51 COMPILER V8.08 DRIVERT6963 06/18/2008 01:56:31 PAGE 15
859 4 }else {
860 4 slope = 1;
861 4 }
862 3
863 3 incE = 2*dx;
864 3 incNE = 2*dx - 2*dy;
865 3 d = 2*dx - dy;
866 3 x = x1;
867 3
868 3 for (y=y1; y <= y2; y++) {
869 4 Point(x, y, 0);
870 4 if (d < 0) {
871 5 d += incE;
872 5 }else {
873 5 d += incNE;
874 5 x += slope;
875 5 }
876 4 }//end of for (y=y1; y <= y2; y++)
877 3 }
878 2 }//end of /line
879 1 }
880
881 /**********************************************************************************************
882 函数名称: void Rectangle(unsigned char Topx, unsigned char Topy,
883 unsigned char Bottomx, unsigned char Bottomy, unsigned char Mod)
884 函数功能: 画矩形或是填充矩形
885 入口参数: (左上顶点、右下顶点坐标、是否填充标志)
886 出口参数:
887 具体资源:
888 调用程序:
889 备注: 当填充标志位为0是表示画矩形框,不为0时表示填充矩形
890 **********************************************************************************************/
891 void Rectangle(unsigned char Topx, unsigned char Topy, unsigned char Bottomx, unsigned char Bottomy, unsig
-ned char Mod)
892 {
893 1 unsigned char Xtemp=0x00, i=0x00, Ytemp=0x00, j=0x00;
894 1
895 1 if (Mod == 0x00)
896 1 { //画矩形边框
897 2 Line(Topx, Topy, Topx, Bottomy, 0); // A -----C------
898 2 Line(Bottomx, Topy, Bottomx, Bottomy, 0); // B | |
899 2 Line(Topx, Topy, Bottomx-1, Topy, 0); // C A B
900 2 Line(Topx, Bottomy, Bottomx-1, Bottomy, 0); // D | |
901 2 } // -----D------
902 1 else
903 1 { //填充矩形区域
904 2 Xtemp = Bottomx - Topx;
905 2 Ytemp = Bottomy - Topy;
906 2 for (; i<=Ytemp; i++)
907 2 {
908 3 for (;j <= Xtemp; j++)
909 3 {
910 4 Point(Topx+j, Topy+i, 1);
911 4 }
912 3 j = 0;
913 3 }
914 2 }//end of else
915 1 }
916
917
918 /**********************************************************************************************
919 函数名称: void DrawCircle( char x0, char y0, char Rand)
C51 COMPILER V8.08 DRIVERT6963 06/18/2008 01:56:31 PAGE 16
920 函数功能: 以指定的圆心和半径画圆
921 入口参数: 圆心、半径
922 出口参数:
923 具体资源:
924 调用程序:
925 备注: 1.本画圆函数采用的正负画圆算法 + 8分圆做图。
926 2.注意本画圆函数没有考虑半径过大导致图形区域溢出的情况。经测试圆的半径最好不要大于60
927 像素。
928 **********************************************************************************************/
929 void Circle( unsigned int x0, unsigned int y0, unsigned char Rand)
930 {
931 1 unsigned int x = 0, y = Rand;
932 1 int f = 0;
933 1
934 1 while (x <= y)
935 1 {
936 2
937 2 Point(x0+x, y0+y, 1);
938 2 Point(x0+x, y0-y, 1);
939 2 Point(x0-x, y0+y, 1);
940 2 Point(x0-x, y0-y, 1);
941 2 Point(x0+y, y0+x, 1);
942 2 Point(x0+y, y0-x, 1);
943 2 Point(x0-y, y0+x, 1);
944 2 Point(x0-y, y0-x, 1);
945 2
946 2 if (f <= 0) {
947 3 f = f+2*x+1;
948 3 x++;
949 3 } else {
950 3 f = f-2*y+1;
951 3 y--;
952 3 }
953 2 }
954 1 }
955
956
957 /**********************************************************************************************
958 函数名称: void DrawCircle( char x0, char y0, char Rand)
959 函数功能: 以指定的圆心和半径画圆
960 入口参数: 圆心、半径
961 出口参数:
962 具体资源:
963 调用程序:
964 备注: 1.本画圆函数采用的正负画圆算法 + 8分圆做图。
965 2.注意本画圆函数没有考虑半径过大导致图形区域溢出的情况。经测试圆的半径最好不要大于60
966 像素。
967 **********************************************************************************************/
968 void Triangle(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char x3, un
-signed char y3)
969 {
970 1 Line(x1, y1, x2, y2, 0);
971 1 Line(x2, y2, x3, y3, 0);
972 1 Line(x3, y3, x1, y1, 0);
973 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 3203 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V8.08 DRIVERT6963 06/18/2008 01:56:31 PAGE 17
DATA SIZE = ---- 123
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -