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