📄 drawing_line.lst
字号:
C51 COMPILER V8.02 DRAWING_LINE 08/10/2009 11:20:59 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DRAWING_LINE
OBJECT MODULE PLACED IN drawing_line.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE drawing_line.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************** LCD12864曲线显示*******************************************/
2 /*********作者:王胜文。QQ:95201972 email:nunk@163.com 希望与大家交流2007。08。03**********/
3
4
5 #include<reg51.h>
6 #include<drive_functions.h>
7 #include<math.h>
8 //#include<get_keys.h>
9 #define Graphic_Clear 0x01 //檫除点
10 #define Graphic_Not 0x02 //反相点
11 #define Graphic_Draw 0x03 //画点
12
13 uchar j=0,i=0;
14 uchar r=32;
15 /***********************在LCD上任意坐标画点********************************/
16
17 void DrawPoint(uchar X,uchar Y,uchar Type)
18 { //X,Y化点的坐标Type画点的类型:反相点,檫除点,画点
19 1
20 1 uchar DX = (Y >> 3); //计算出属于哪个字节
21 1 uchar BX = Y - (DX << 3); //计算出属于字节哪一位
22 1 uchar TempData = 0;
23 1
24 1
25 1 if (X > 63)
26 1 {
27 2 chip_select=2;
28 2 X -= 64;
29 2 }
30 1 else
31 1 {
32 2 chip_select=1;
33 2 }
34 1
35 1 SetPage(DX); //设行地址
36 1 SetColumn(X); //设列地址
37 1
38 1 TempData = ReadData(); //读出所画点所在字节的内容
39 1
40 1 switch (Type) //对该字节进行相应操作
41 1 {
42 2 case Graphic_Clear:
43 2 TempData &= ~(1<<BX);
44 2 break;
45 2 case Graphic_Not:
46 2 TempData ^= (1 << BX);
47 2 break;
48 2 case Graphic_Draw:
49 2 TempData |= (1 << BX);
50 2 break;
51 2 default: break;
52 2 }
53 1
54 1 SetPage(DX); //设置行地址
55 1 SetColumn(X); //设置列地址
C51 COMPILER V8.02 DRAWING_LINE 08/10/2009 11:20:59 PAGE 2
56 1 WriteData(TempData); //把修改后的字节送回LCD,达到画点目的
57 1 }
58
59 /********插值法画任意两点之间直线的函数,函数中只用加减法,程序运行效率很高**********/
60
61 DrawLine(uchar x1,uchar y1,uchar x2,uchar y2)
62 { //x1,y1起点坐标;x2,y2终点坐标;
63 1 uchar x,y;
64 1 uchar d_x,d_y;
65 1 uchar err=0;
66 1 uchar temp=0;
67 1
68 1 if(y2<y1){x=x1;y=y1;x1=x2;y1=y2;x2=x;y2=y;}
69 1 d_y=y2-y1;
70 1 if (d_y==0)
71 1 {
72 2 if (x1>x2) {x=x1;x1=x2;x2=x;}
73 2 for ( x=x1;x<=x2;x++ ) DrawPoint(x,y1,Graphic_Draw);
74 2 }
75 1 else
76 1 {
77 2 if(x2>=x1){temp=1;d_x=x2-x1;}else d_x=x1-x2;
78 2 x=x1;y=y1;DrawPoint(x,y,Graphic_Draw);
79 2 if(temp&&(d_y<=d_x))
80 2 while(x!=x2)
81 2 {if(err<0){x=x+1;err=err+(y2-y);}
82 3 else {x=x+1;y=y+1;err=err+(y2-y)-(x2-x);}
83 3 DrawPoint(x,y,Graphic_Draw);
84 3 }
85 2 else if(temp&&(d_y>d_x))
86 2 while(y!=y2)
87 2 {d_x=x2-x;d_y=y2-y;
88 3 if(err<0){x=x+1;y=y+1;err=err+d_y-d_x;}
89 3 else {y=y+1;err=err-d_x;}
90 3 DrawPoint(x,y,Graphic_Draw);
91 3 }
92 2 else if(!temp&&(d_y<=d_x))
93 2 while(x!=x2)
94 2 {d_x=x-x2;d_y=y2-y;
95 3 if(err<0){x=x-1;err=err+d_y;}
96 3 else {x=x-1;y=y+1;err=err+d_y-d_x;}
97 3 DrawPoint(x,y,Graphic_Draw);
98 3 }
99 2 else if(!temp &&(d_y>d_x))
100 2 while(y!=y2)
101 2 {d_x=x-x2;d_y=y2-y;
102 3 if(err<0){x=x-1;y=y+1;err=err+d_y-d_x;}
103 3 else {y=y+1;err=err-d_x;}
104 3 DrawPoint(x,y,Graphic_Draw);
105 3 }
106 2 }
107 1 }
108
109
110 /***********************************************************************/
111
112 void DrawLevel(void)
113 {
114 1
115 1 for(i=0;i<127;i++){DrawPoint(i,32,Graphic_Draw);}//画水平直线
116 1
117 1 }
C51 COMPILER V8.02 DRAWING_LINE 08/10/2009 11:20:59 PAGE 3
118
119 /************************************************************************************/
120
121 void DrawSineWave(void)
122 {
123 1 uchar xn=0;
124 1 uchar yn=32;
125 1 uchar i;
126 1 uchar xi,yi;
127 1 for(i=0;i<127;i++)
128 1 {
129 2 xi=i;
130 2 yi=(sin(i*0.1)*32)+32;
131 2
132 2 DrawLine(xn,yn,xi,yi); //在一系列零散的点上,两点两点之间连线,从而得到一条曲线
133 2
134 2 xn=i;
135 2 yn=yi;
136 2
137 2 }
138 1 }
139
140 /*************************************************************************************/
141
142 void DrawCircle(uchar x0,uchar y0,uchar r)//x0,y0为圆心坐标,r为圆半径
143 {
144 1 uchar xn,yn,xi,yi;
145 1 unsigned int j;
146 1
147 1 xn=cos(0)*r+x0;
148 1 yn=sin(0)*r+y0;
149 1
150 1 for(j=0;j<630;j++)
151 1 {
152 2 xi=(cos(j*0.01)*r)+x0;
153 2 yi=(sin(j*0.01)*r)+y0;
154 2
155 2 DrawLine(xn,yn,xi,yi); //在一系列零散的点上,两点两点之间连线,从而得到一条曲线
156 2
157 2 xn=xi;
158 2 yn=yi;
159 2 }
160 1
161 1 }
162
163 /**************************************************************************************************/
164
165 void DrawRetic(uchar x0,uchar y0,uchar x1,uchar y1)//画正方形,x0,y0为左上角坐标,x1,y1为右下角坐标
166 {
167 1 uchar i;
168 1 for(i=0;i<=x1-x0;i++){ DrawPoint(x0+i,y0,Graphic_Draw); DrawPoint(x0+i,y1,Graphic_Draw); }
169 1 for(i=0;i<=y1-y0;i++){ DrawPoint(x0,y0+i,Graphic_Draw); DrawPoint(x1,y0+i,Graphic_Draw); }
170 1 }
171
172
173 /**************************************************************************************************/
174
175 void DrawTrigle(uchar x1,uchar y1,uchar x2,uchar y2,uchar x3,uchar y3)//画三角形,三个坐标为三角形顶点
176 {
177 1 // DrawLine(x1,y1,x2,y2);
178 1 // DrawLine(x2,y2,x3,y3);
179 1 // DrawLine(x1,y1,x3,y3);
C51 COMPILER V8.02 DRAWING_LINE 08/10/2009 11:20:59 PAGE 4
180 1
181 1 }
*** WARNING C280 IN LINE 175 OF DRAWING_LINE.C: 'x1': unreferenced local variable
*** WARNING C280 IN LINE 175 OF DRAWING_LINE.C: 'y1': unreferenced local variable
*** WARNING C280 IN LINE 175 OF DRAWING_LINE.C: 'x2': unreferenced local variable
*** WARNING C280 IN LINE 175 OF DRAWING_LINE.C: 'y2': unreferenced local variable
*** WARNING C280 IN LINE 175 OF DRAWING_LINE.C: 'x3': unreferenced local variable
*** WARNING C280 IN LINE 175 OF DRAWING_LINE.C: 'y3': unreferenced local variable
182
183 /******************************** main **********************************************************/
184
185 void main(void)
186 {
187 1
188 1 ClearLCD();
189 1
190 1 while(1)
191 1 {
192 2
193 2 ClearLCD();
194 2 DrawLevel();
195 2 DrawLine(63,0,63,63);
196 2 DrawSineWave();
197 2
198 2 //DrawCircle(63,32,r);
199 2 //r-=4;
200 2 //}
201 2
202 2 //DrawRetic(10,10,30,30);
203 2 //DrawTrigle(0,0,80,60,120,0);
204 2 }
205 1
206 1 }
207
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1336 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 35
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 6 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -