📄 drawing_line.lst
字号:
C51 COMPILER V7.50 DRAWING_LINE 01/10/2008 18:32:35 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE DRAWING_LINE
OBJECT MODULE PLACED IN drawing_line.OBJ
COMPILER INVOKED BY: E:\Program Files\keill\C51\BIN\C51.EXE drawing_line.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2
3 #include"reg51.h"
4 #include<drive_functions.h>
5 #include<math.h>
6 #define Graphic_Clear 0x01 //檫除点
7 #define Graphic_Not 0x02 //反相点
8 #define Graphic_Draw 0x03 //画点
9 uchar j=0,i=0;
10 uchar r=32;
11 uchar xdata zhengxuan[]= {
12 0x20, 0x23, 0x26, 0x29, 0x2C, 0x2F, 0x32, 0x34,
13 0x36, 0x39, 0x3A, 0x3C, 0x3D, 0x3E, 0x3F, 0x3F,
14 0x3F, 0x3F, 0x3F, 0x3E, 0x3D, 0x3B, 0x39, 0x37,
15 0x35, 0x33, 0x30, 0x2D, 0x2A, 0x27, 0x24, 0x21,
16 0x1E, 0x1A, 0x17, 0x14, 0x11, 0x0F, 0x0C, 0x09,
17 0x07, 0x05, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00,
18 0x00, 0x00, 0x01, 0x02, 0x03, 0x05, 0x07, 0x09,
19 0x0B, 0x0E, 0x11, 0x14, 0x17, 0x1A, 0x1D, 0x20
20 } ;
21 /***********************在LCD上任意坐标画点********************************/
22
23 void DrawPoint(uchar X,uchar Y,uchar Type)
24 { //X,Y化点的坐标Type画点的类型:反相点,檫除点,画点
25 1
26 1 uchar DX = (Y >> 3); //计算出属于哪个字节
27 1 uchar BX = Y - (DX << 3); //计算出属于字节哪一位
28 1 uchar TempData = 0;
29 1
30 1
31 1 if (X > 63)
32 1 {
33 2 chip_select=2;
34 2 X -= 64;
35 2 }
36 1 else
37 1 {
38 2 chip_select=1;
39 2 }
40 1
41 1 SetPage(DX); //设行地址
42 1 SetColumn(X); //设列地址
43 1
44 1 TempData = ReadData(); //读出所画点所在字节的内容
45 1
46 1 switch (Type) //对该字节进行相应操作
47 1 {
48 2 case Graphic_Clear:
49 2 TempData &= ~(1<< BX);
50 2 break;
51 2 case Graphic_Not:
52 2 TempData ^= (1<< BX);
53 2 break;
54 2 case Graphic_Draw:
55 2 TempData |= ( 1<< BX);
C51 COMPILER V7.50 DRAWING_LINE 01/10/2008 18:32:35 PAGE 2
56 2 break;
57 2 default: break;
58 2 }
59 1
60 1 SetPage(DX); //设置行地址
61 1 SetColumn(X); //设置列地址
62 1 WriteData(TempData); //把修改后的字节送回LCD,达到画点目的
63 1 }
64
65 /********插值法画任意两点之间直线的函数,函数中只用加减法,程序运行效率很高**********/
66
67 DrawLine(uchar x1,uchar y1,uchar x2,uchar y2)
68 { //x1,y1起点坐标;x2,y2终点坐标;
69 1 uchar x,y;
70 1 uchar d_x,d_y;
71 1 char err=0;
72 1 uchar temp=0;
73 1
74 1 if(y2<y1){x=x1;y=y1;x1=x2;y1=y2;x2=x;y2=y;}
75 1 d_y=y2-y1;
76 1 if (d_y==0)
77 1 {
78 2 if (x1>x2) {x=x1;x1=x2;x2=x;}
79 2 for ( x=x1;x<=x2;x++ ) DrawPoint(x,y1,Graphic_Draw);
80 2 }
81 1 else
82 1 {
83 2 if(x2>=x1){temp=1;d_x=x2-x1;}else d_x=x1-x2;
84 2 x=x1;y=y1;DrawPoint(x,y,Graphic_Draw);
85 2 if(temp&&(d_y<=d_x))
86 2 while(x!=x2)
87 2 {if(err<0){x=x+1;err=err+(y2-y);}
88 3 else {x=x+1;y=y+1;err=err+(y2-y)-(x2-x);}
89 3 DrawPoint(x,y,Graphic_Draw);
90 3 }
91 2 else if(temp&&(d_y>d_x))
92 2 while(y!=y2)
93 2 {d_x=x2-x;d_y=y2-y;
94 3 if(err<0){x=x+1;y=y+1;err=err+d_y-d_x;}
95 3 else {y=y+1;err=err-d_x;}
96 3 DrawPoint(x,y,Graphic_Draw);
97 3 }
98 2 else if(!temp&&(d_y<=d_x))
99 2 while(x!=x2)
100 2 {d_x=x-x2;d_y=y2-y;
101 3 if(err<0){x=x-1;err=err+d_y;}
102 3 else {x=x-1;y=y+1;err=err+d_y-d_x;}
103 3 DrawPoint(x,y,Graphic_Draw);
104 3 }
105 2 else if(!temp &&(d_y>d_x))
106 2 while(y!=y2)
107 2 {d_x=x-x2;d_y=y2-y;
108 3 if(err<0){x=x-1;y=y+1;err=err+d_y-d_x;}
109 3 else {y=y+1;err=err-d_x;}
110 3 DrawPoint(x,y,Graphic_Draw);
111 3 }
112 2 }
113 1 }
114
115
116 /***********************************************************************/
117
C51 COMPILER V7.50 DRAWING_LINE 01/10/2008 18:32:35 PAGE 3
118 void DrawLevel(void)
119 {
120 1
121 1 for(i=0;i<127;i++){DrawPoint(i,32,Graphic_Draw);}//画水平直线
122 1
123 1 }
124
125 /************************************************************************************/
126
127 void DrawSineWave(void)
128 {
129 1 uchar xn=0;
130 1 uchar yn=32;
131 1 uchar i,j;
132 1 uchar xi,yi;
133 1
134 1 P27=1;
135 1 for(i=0;i<127;i++)
136 1 {
137 2 xi=i;
138 2 j=i;
139 2 if(j>63)
140 2 {
141 3 ACC=zhengxuan[j-64];
142 3 yi=ACC;
143 3 }
144 2 else
145 2 {
146 3 ACC=zhengxuan[j];
147 3 yi=ACC;
148 3 }
149 2
150 2 P27=1;
151 2 DrawLine(xn,yn,xi,yi);
152 2 P27=1;
153 2 xn=i;
154 2 yn=yi;
155 2
156 2 }
157 1
158 1 }
159 /********************** main **********************************************************/
160
161 void main(void)
162 {
163 1 P2=0;
164 1 P27=1;
165 1 while(1)
166 1 {
167 2 DrawSineWave();
168 2 ClearLCD();
169 2 }
170 1
171 1 }
172
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 881 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 64 ----
PDATA SIZE = ---- ----
C51 COMPILER V7.50 DRAWING_LINE 01/10/2008 18:32:35 PAGE 4
DATA SIZE = 7 13
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -