📄 lcd.lst
字号:
192 1 bitdata=0xf8+(0x7-(Lcd_CurrentX & 0x7));
193 1 while((Lcd_Cmd_Reg & 0x3) != 0x3) ;
194 1 Lcd_Cmd_Reg = bitdata;
195 1 }
196
197 /*----------------------------------------------------------------------------------------*/
198 //绘制点子程序,最后一位为像素大小
199 /*----------------------------------------------------------------------------------------*/
200 void pointxy(unsigned char x,unsigned char y,unsigned char bitdata)
201 { Lcd_CurrentX=x;
202 1 Lcd_CurrentY=y;
203 1 lcdpos();
204 1 point(bitdata);
205 1 }
206
207 /*----------------------------------------------------------------------------------------*/
208 //画线子程序:最后一位为线条的像素宽度
209 /*----------------------------------------------------------------------------------------*/
210 void linexy(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char bitdata)
211 { //线
212 1 unsigned char i,k;
213 1 if(abs(y1-y0)>abs(x1-x0))
214 1 { if(y1>y0)
215 2 for(i=y0;i<=y1;i++)
216 2 { if(x1>x0)
217 3 { k=x1-x0;
218 4 k*=(i-y0);
219 4 k/=y1-y0;
220 4 pointxy(x0+k,i,bitdata);
221 4 }
222 3 else //x1<x0
223 3 { k=x0-x1;
224 4 k*=(i-y0);
225 4 k/=y1-y0;
226 4 pointxy(x0-k,i,bitdata);
227 4 }
228 3 }
229 2 else //y1<y0
230 2 for(i=y0;i>=y1;i--)
231 2 { if(x1>x0)
232 3 { k=x1-x0;
233 4 k*=(y0-i);
234 4 k/=y0-y1;
235 4 pointxy(x0+k,i,bitdata);
236 4 }
237 3 else //x1<x0
238 3 { k=x0-x1;
239 4 k*=(y0-i);
240 4 k/=y0-y1;
241 4 pointxy(x0-k,i,bitdata);
C51 COMPILER V7.02b LCD 08/02/2005 17:09:33 PAGE 5
242 4 }
243 3 }
244 2 }
245 1 else //abs(y1-y0)<abs(x1-x0)
246 1 { if(x1>x0)
247 2 for(i=x0;i<=x1;i++)
248 2 { if(y1==y0)
249 3 pointxy(i,y0,bitdata);
250 3 else if(y1>y0)
251 3 { k=y1-y0;
252 4 k*=(i-x0);
253 4 k/=x1-x0;
254 4 pointxy(i,y0+k,bitdata);
255 4 }
256 3 else //y1<y0
257 3 { k=y0-y1;
258 4 k*=(i-x0);
259 4 k/=x1-x0;
260 4 pointxy(i,y0-k,bitdata);
261 4 }
262 3 }
263 2 else
264 2 for(i=x0;i>=x1;i--)
265 2 { if(y1==y0)
266 3 pointxy(i,y0,bitdata);
267 3 else if(y1>y0)
268 3 { k=y1-y0;
269 4 k*=(x0-i);
270 4 k/=x0-x1;
271 4 pointxy(i,y0+k,bitdata);
272 4 }
273 3 else //y1<y0
274 3 { k=y0-y1;
275 4 k*=(x0-i);
276 4 k/=x0-x1;
277 4 pointxy(i,y0-k,bitdata);
278 4 }
279 3 }
280 2 }
281 1 }
282
283 void rect(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char bitdata)
284 { //矩形
285 1 linexy(x0,y0,x0,y1,bitdata);
286 1 linexy(x0,y0,x1,y0,bitdata);
287 1 linexy(x0,y1,x1,y1,bitdata);
288 1 linexy(x1,y0,x1,y1,bitdata);
289 1 }
290
291 void putsizeimage(unsigned char XSIZE,unsigned char YSIZE,unsigned char code *s)
292 { unsigned char k,lx,ly,a1,a2,x;
293 1 Lcddelay(1000);
294 1 k=Lcd_CurrentX&0X7;
295 1 XSIZE+=k;
296 1 x=Lcd_CurrentX;
297 1 for(ly=0;ly<YSIZE;ly++,Lcd_CurrentY++)
298 1 for(Lcd_CurrentX=x,lx=k,a1=0;lx<XSIZE;s++)
299 1 { unsigned char p;
300 2 a2=*s;
301 2 for(p=0;p<k;p++)
302 2 { a2>>=1;
303 3 if((a1&0x1)==1) a2+=0x80;
C51 COMPILER V7.02b LCD 08/02/2005 17:09:33 PAGE 6
304 3 a1>>=1;
305 3 }
306 2 lcdpos();
307 2 p=XSIZE&0X7;
308 2 if(lx<8)
309 2 { if(XSIZE<8)
310 3 { Lcd_Mask=LeftMask[k] & RightMask[p];
311 4 a1=lcdrd();
312 4 a1&=(~Lcd_Mask);
313 4 a1|=(a2 & Lcd_Mask);
314 4 lcdwd(a1);
315 4 lx=XSIZE;
316 4 Lcd_CurrentX+=XSIZE-k;
317 4 }
318 3 else //XSIZE>=8
319 3 { Lcd_Mask=LeftMask[k];
320 4 a1=lcdrd();
321 4 a1&=(~Lcd_Mask);
322 4 a1|=(a2 & Lcd_Mask);
323 4 lcdwd(a1);
324 4 lx+=8-k;
325 4 Lcd_CurrentX+=8-k;
326 4 }
327 3 }
328 2 else if(lx>=XSIZE-p) //lx>=8
329 2 { if(k>=p)
330 3 { s--;
331 4 a1=*s;
332 4 a2=0;
333 4 for(p=0;p<k;p++)
334 4 { a2>>=1;
335 5 if((a1&0x1)==1) a2+=0x80;
336 5 a1>>=1;
337 5 }
338 4 p=XSIZE&0X7;
339 4 }
340 3 Lcd_Mask=RightMask[p];
341 3 a1=lcdrd();
342 3 a1&=(~Lcd_Mask);
343 3 a1|=(a2 & Lcd_Mask);
344 3 lcdwd(a1);
345 3 lx+=p;
346 3 Lcd_CurrentX+=p;
347 3 }
348 2 else //lx>=8 and lx<XSIZE-p
349 2 { lcdwd(a2);
350 3 lx+=8;
351 3 Lcd_CurrentX+=8;
352 3 }
353 2 a1=*s;
354 2 }
355 1 Lcd_CurrentY-=YSIZE;
356 1 }
357
358 void main()
359 {
360 1 lcdreset();
361 1 Fill_Scr(0x55); //显示竖条
362 1 Lcddelay(6000); //系统延时
363 1 Fill_Scr(0xff); //显示黑屏
364 1 Lcddelay(6000);
365 1 // put_str_xy(0,0,"创新科技检测技术有限公司,联系电话0512-86163888");//显示汉字
C51 COMPILER V7.02b LCD 08/02/2005 17:09:33 PAGE 7
366 1 put_str("创新科技检测技术有限公司,联系电话0512-86163888");
367 1 Fill_Scr(0x00);
368 1 //
369 1 rect(12,12,88,88,6);
370 1 Lcddelay(5000);
371 1 //Fill_Scr(0xff);
372 1 //rect(12,12,88,120,0);
373 1 lcdreset();
374 1 }
375
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1702 ----
CONSTANT SIZE = 772 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 19 29
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 + -