📄 lcd_fun.lst
字号:
255 3 dat=~dat&0x0f;
256 3 if(r1) //避免写完第二行再写第一行时候有冲突。
257 3 iTmp=~iTmp&0xf0;
258 3 dat |= iTmp;
259 3 LCD_write_byte(dat,1);
260 3 }
261 2 break;
262 2 case 1:
263 2 if(reverse)
264 2 r1=1;//如果本行有反显;
265 2 else
266 2 r1=0;
267 2 for(i=0;i<12;i++) { // 显示高4位
268 3 iTmp = gLCDScr[0][gLCDy]; //
269 3 iTmp = gFontLib[iTmp][i+12];
270 3 dat = gFontLib[iIndex][i];
271 3 if(reverse)
272 3 dat=~dat;
273 3 dat <<= 4;
274 3 if(r0)//如果第一行有反显。避免写完第一行再写第二行有冲突;
275 3 iTmp=~iTmp&0x0f;
276 3 dat |= iTmp;
277 3 LCD_write_byte(dat,1);
278 3 }
279 2 LCD_set_XY(gLCDy*12,2);
280 2 for(i=0;i<12;i++) { // 显示低8位
281 3 iTmp = gFontLib[iIndex][i]>>4;
282 3 dat = gFontLib[iIndex][i+12]<<4;
283 3 dat |= iTmp;
284 3 if(r1)
285 3 dat=~dat;
286 3 LCD_write_byte(dat,1);
287 3 }
288 2 break;
289 2 case 2:
290 2 if(reverse)
291 2 { for(i=0;i<12;i++){ // 显示高8位
292 4 LCD_write_byte(~gFontLib[iIndex][i],1);
293 4 }
294 3 r2=1;
295 3 }
296 2 else
297 2 { for(i=0;i<12;i++){ // 显示高8位
298 4 LCD_write_byte(gFontLib[iIndex][i],1);
299 4 }
300 3 r2=0;
301 3 }
302 2 LCD_set_XY(gLCDy*12,4);
303 2 for(i=0;i<12;i++) { // 显示低4位
C51 COMPILER V7.06 LCD_FUN 05/14/2007 22:03:38 PAGE 6
304 3 iTmp = gLCDScr[3][gLCDy]; //
305 3 iTmp = gFontLib[iTmp][i];
306 3 iTmp <<= 4;
307 3 dat = gFontLib[iIndex][i+12];
308 3 if(r2)
309 3 dat=~dat&0x0f;
310 3 if(r3)
311 3 iTmp=~iTmp&0xf0;
312 3 dat |= iTmp;
313 3 LCD_write_byte(dat,1);
314 3 }
315 2 break;
316 2 case 3:
317 2 if(reverse)
318 2 r3=1;//如果本行有反显;
319 2 else
320 2 r3=0;
321 2 for(i=0;i<12;i++) { // 显示高4位
322 3 iTmp = gLCDScr[2][gLCDy]; //
323 3 iTmp = gFontLib[iTmp][i+12];
324 3 dat = gFontLib[iIndex][i];
325 3 if(reverse)
326 3 dat=~dat;
327 3 dat <<= 4;
328 3 if(r2)//如果第三行有反显。避免写完第四行再写第三行有冲突;
329 3 iTmp=~iTmp&0x0f;
330 3 dat |= iTmp;
331 3 LCD_write_byte(dat,1);
332 3 }
333 2 LCD_set_XY(gLCDy*12,5);
334 2 for(i=0;i<12;i++) { // 显示低8位
335 3 iTmp = gFontLib[iIndex][i]>>4;
336 3 dat = gFontLib[iIndex][i+12]<<4;
337 3 dat |= iTmp;
338 3 if(r3)
339 3 dat=~dat;
340 3 LCD_write_byte(dat,1);
341 3 }
342 2 break;
343 2 default:
344 2 ;
345 2 }
346 1 gLCDy ++;
347 1 if(gLCDy>6) {
348 2 gLCDy = 0;
349 2 gLCDx ++;
350 2 }
351 1 if(gLCDx>3)
352 1 gLCDx = 0;
353 1
354 1 }
355 //---------------------------正/反显示多个汉字-------------------------------
356 //因为每一行只有一个正反标志位,所以反显移动时,只能纵向。
357 void LCD_puts(unsigned char iIndex[],bit reverse)
358 {
359 1 unsigned char data i=0;
360 1 while(iIndex[i]){
361 2 LCD_putc(iIndex[i++], reverse);
362 2 }
363 1 }
364
365 //---------------修改putc函数,用于printf直接输出到液晶,只支持英文------------
C51 COMPILER V7.06 LCD_FUN 05/14/2007 22:03:38 PAGE 7
366 bit printf_reverse=0;
367 char putchar(char c)
368 {
369 1 LCD_write_char(c,printf_reverse);
370 1 return 0;
371 1 }
372 //----------------条项显示函数,在函数一个制定位置显示条项文字-------------------
373 //*s条项文字字符串;r0 c0,条项文字起始坐标;c1,条项文字的尾坐标;Mode,对齐方式
374 /*void GUI_DispStringAtBar(unsigned char *s,unsigned char r0, unsigned char c0,
375 unsigned char c1,unsigned char Mode)
376 { unsigned char data i,Cnt;
377 if(Mode==0)//左对齐
378 {
379 LCD_set_RC(r0,c0);
380 for(i=0;i<c1-c0;i++)
381 LCD_putc(*(s+i),0);
382 }
383 if(Mode==1)//居中
384 {
385 for(Cnt=0;*(s+Cnt);Cnt++);//计算所要显示的字体个数。
386 LCD_set_RC(r0,(c1-c0-Cnt)/2+c0);
387 for(i=0;i<Cnt;i++)
388 LCD_putc(*(s+i),0);
389 }
390 if(Mode==2)//右对齐
391 { for(Cnt=0;*(s+Cnt)!=0;Cnt++);//计算所要显示的字体个数。
392 LCD_set_RC(r0,c1-Cnt);
393 for(i=0;i<Cnt;i++)
394 LCD_putc(*(s+i),0);
395 }
396 }*/
397 //-------------------------------比上一个函数增加反显----------------------------
398 void GUI_DispStringAt(unsigned char *s,unsigned char r0, unsigned char c0,
399 unsigned char c1,unsigned char Mode,bit reverse)
400 { unsigned char data i,Cnt;
401 1 for(Cnt=0;*(s+Cnt)!=0;Cnt++);//计算所要显示的字体个数。
402 1 LCD_set_RC(r0,c0);
403 1 if(Mode==0)//左对齐
404 1 {
405 2 for(i=0;*(s+i);i++)
406 2 LCD_putc(*(s+i),reverse);//写字符
407 2 for(i=0;i<c1-c0-Cnt;i++) //写零
408 2 LCD_putc(0,reverse);
409 2 }
410 1 if(Mode==1)//居中
411 1 {
412 2 for(i=0;i<(c1-c0-Cnt)/2;i++)
413 2 LCD_putc(0,reverse);
414 2 for(i=0;i<Cnt;i++)
415 2 LCD_putc(*(s+i),reverse);
416 2 for(i=0;i<c1-c0-Cnt-1;i++)
417 2 LCD_putc(0,reverse);
418 2 }
419 1 if(Mode==2)//右对齐(未完成)
420 1 {
421 2 LCD_set_RC(r0,c1-Cnt);
422 2 for(i=0;i<Cnt;i++)
423 2 LCD_putc(*(s+i),0);
424 2 }
425 1 }
426 //-----------------------滚动条显示--------------------------------------------
427 //itembar所要显示项数,当前所在项数目;
C51 COMPILER V7.06 LCD_FUN 05/14/2007 22:03:38 PAGE 8
428 #define BARBITLONG 32 //滚动杆像数长度。
429 #define LCDXEND 83 //x坐标最大值
430 void GUI_ScrollBar(unsigned char Item,unsigned char curbar)
431 { uchar data i;//用做计数辅助以及计算结果暂存器,避免重复计算。
432 1 uchar data SmalBarStar;//滚动条开始像素位置
433 1 uchar data SmalBarEnd;//滚动条结束像素位置
434 1
435 1 i=BARBITLONG/Item;//暂存小滚动条像素长度。
436 1 SmalBarStar=curbar*i;//滚动条开始像素位置
437 1 SmalBarEnd=(curbar+1)*i;//滚动条结束像素位置
438 1 for(i=0;i<BARBITLONG/8;i++)
439 1 { LCD_set_XY(LCDXEND-2,i);
440 2 LCD_write_byte(0,1);
441 2 LCD_write_byte(0xff,1);
442 2 LCD_write_byte(0,1);
443 2 }
444 1 if(BARBITLONG%8)
445 1 {
446 2 LCD_set_XY(LCDXEND-2,BARBITLONG/8);
447 2 LCD_write_byte(0,1);
448 2 LCD_write_byte(0xff>>(8-BARBITLONG%8),1);
449 2 LCD_write_byte(0,1);
450 2 }
451 1 //----滚动条横夸两字节时候---------
452 1 LCD_set_XY(LCDXEND-2,SmalBarStar/8); //显示第一字节部分
453 1 LCD_write_byte(0xff<<(SmalBarStar%8),1);
454 1 LCD_set_XY(LCDXEND,SmalBarStar/8);
455 1 LCD_write_byte(0xff<<(SmalBarStar%8),1);
456 1 if(SmalBarEnd!=BARBITLONG) //当不是拉到最后
457 1 {
458 2 LCD_set_XY(LCDXEND-2,SmalBarEnd/8); //显示第二字节部分
459 2 LCD_write_byte(0xff>>(8-SmalBarEnd%8),1);
460 2 LCD_set_XY(LCDXEND,SmalBarEnd/8);
461 2 LCD_write_byte(0xff>>(8-SmalBarEnd%8),1);
462 2 }
463 1 for(i=1;i<(char)(SmalBarEnd/8-SmalBarStar/8);i++)//当滚动条长度大于一个字节的时候。
464 1 {
465 2 LCD_set_XY(LCDXEND-2,SmalBarStar/8+i);
466 2 LCD_write_byte(0xff,1);
467 2 LCD_set_XY(LCDXEND,SmalBarStar/8+i);
468 2 LCD_write_byte(0xff,1);
469 2 }
470 1 LCD_set_XY(73,0);
471 1 printf("%d",(uint)(curbar+1));
472 1 }
473 //---------------------------------英文条项层-----------------------
474 void LCD_write_english_bar(unsigned char *s,unsigned char x0, unsigned char y0,
475 unsigned char x1,unsigned char Mode,bit reverse)
476 { unsigned char i,Cnt;
477 1 for(Cnt=0;*(s+Cnt)!=0;Cnt++);//计算所要显示的字符个数。
478 1 LCD_set_XY(x0,y0);
479 1 if(Mode==0)//左对齐
480 1 {
481 2 for(i=0;*(s+i);i++)
482 2 LCD_write_char(*(s+i),reverse);//写字符
483 2 for(i=0;i<(x1-x0)/6-Cnt;i++) //写零
484 2 LCD_write_char(' ',reverse);
485 2 }
486 1 if(Mode==1)//居中
487 1 {
488 2 for(i=0;i<((x1-x0)/8-Cnt)/2;i++)
489 2 LCD_write_char(' ',reverse);
C51 COMPILER V7.06 LCD_FUN 05/14/2007 22:03:38 PAGE 9
490 2 for(i=0;i<Cnt;i++)
491 2 LCD_write_char(*(s+i),reverse);
492 2 for(i=0;i<(x1-x0)/8-Cnt-1;i++)
493 2 LCD_write_char(' ',reverse);
494 2 }
495 1 if(Mode==2)//右对齐(未完成)
496 1 {
497 2 LCD_set_XY(r0,x1/8-Cnt);
498 2 for(i=0;i<Cnt;i++)
499 2 LCD_write_char(*(s+i),0);
500 2 }
501 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2690 ----
CONSTANT SIZE = 3 ----
XDATA SIZE = 28 28
PDATA SIZE = ---- ----
DATA SIZE = ---- 17
IDATA SIZE = 2 ----
BIT SIZE = 5 7
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -