📄 lcdcon.lst
字号:
312 uchar dprintf(uchar x,uchar y,char *string,uchar mod)//ASCII(8*16)与汉字(16*16)显示
313 {
314 1 char c1,c2,cData;
315 1 uint i=0,j,len;
316 1 uchar k;
317 1
318 1 len=strlen(string);
319 1
320 1 while(i<len)
321 1 {
322 2 c1 = string[i];
323 2 c2 = string[i+1];
324 2
325 2 SetPos(y,x/8);
326 2 if(c1 >= 0)
327 2 {
328 3 // ASCII
329 3 if(c1 < 0x20)
C51 COMPILER V8.01 LCDCON 10/03/2008 08:28:26 PAGE 7
330 3 {
331 4 switch(c1)
332 4 {
333 5 case CR:
334 5 case LF: // 回车或换行
335 5 i++;
336 5 x=0;
337 5 if(y < 112)y+=HZ_CHR_HEIGHT;
338 5 continue;
339 5 case BS: // 退格
340 5 i++;
341 5 if(y>ASC_CHR_WIDTH)y-=ASC_CHR_WIDTH;
342 5 cData = 0x00;
343 5 break;
344 5 }
345 4 }
346 3 for(j=0;j<ASC_CHR_HEIGHT;j++)
347 3 {
348 4
349 4 if(c1 >= 0x1f)
350 4 {
351 5 cData= ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+j];
352 5 if(mod == 0)
353 5 cData = ~cData;
354 5 SetPos(y+j,x/8);
355 5 if((x%8)==0)
356 5 {
357 6 WriteCom(LC_AUT_WR); // 写数据
358 6 WriteData(cData);
359 6 WriteCom(LC_AUT_OVR);
360 6 }
361 5 }
362 4 SetPos(y+j,x/8);
363 4 }
364 3 if(c1 != BS) // 非退格
365 3 x+=ASC_CHR_WIDTH;
366 3 }
367 2 else
368 2 { // 中文
369 3
370 3 for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
371 3 {
372 4 if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
373 4 break;
374 4 }
375 3 for(k=0;k<HZ_CHR_HEIGHT;k++)
376 3 {
377 4
378 4 SetPos(y+k,x/8);
379 4 if(j < sizeof(GB_16)/sizeof(GB_16[0]))
380 4 {
381 5 c1=GB_16[j].Msk[k*2];
382 5 c2=GB_16[j].Msk[k*2+1];
383 5 }
384 4 else
385 4 c1=c2=0;
386 4 if(mod == 0)
387 4 {
388 5 c1 = ~c1;
389 5 c2 = ~c2;
390 5 }
391 4 WriteCom(LC_AUT_WR);
C51 COMPILER V8.01 LCDCON 10/03/2008 08:28:26 PAGE 8
392 4 WriteData(c1);
393 4 WriteCom(LC_AUT_OVR);
394 4
395 4 WriteCom(LC_AUT_WR);
396 4 WriteData(c2);
397 4 WriteCom(LC_AUT_OVR);
398 4 }
399 3 x+=HZ_CHR_WIDTH;
400 3 i++;
401 3 }
402 2 i++;
403 2 }
404 1 return len;
405 1 }
406 /*
407 void SetShowMode(uchar ShowMod)//设置显示模式
408 {
409 ShowModeSW=ShowMod;
410 WriteCom(LC_DIS_SW |ShowMod);
411 }
412
413 void Pixel(uchar PointX,uchar PointY,bit mod)//画点函数
414 {
415 unsigned char StartAddr;
416 unsigned char dat;
417 StartAddr=7-(PointX%8);
418 dat=LC_BIT_OP|StartAddr; //生产位操作命令画点的数据
419 if(mod)
420 dat=dat|0x08;
421 SetPos(PointY,PointX/8);
422 WriteCom(LC_BIT_OP|dat); // 写数据
423 }
424
425 void Line(uchar x1,uchar y1,uchar x2,uchar y2,bit mod)//画线函数
426 {
427 unsigned char x,y;
428 float k,b;
429
430 if( abs(y1-y2) <= abs(x1-x2) ) // |k|<=1
431 {
432 k=((float)y2-y1) / ((float)x2-x1) ;
433 b=y1-k*x1;
434 if( x1 <= x2 )
435 {
436 for(x=x1;x<=x2;x++)
437 {
438 y=(uchar)(k*x+b);
439 Pixel(x, y, mod);
440 }
441 }
442 else
443 {
444 for(x=x2;x<=x1;x++)
445 {
446 y=(uchar)(k*x+b);
447 Pixel(x, y, mod);
448 }
449 }
450 }
451 else // abs(y1-y2) > abs(x1-x2) |K|>1
452 {
453 k=((float)x2-x1) / ((float)y2-y1) ;
C51 COMPILER V8.01 LCDCON 10/03/2008 08:28:26 PAGE 9
454 b=x1-k*y1;
455 if( y1 <= y2 )
456 {
457 for(y=y1;y<=y2;y++)
458 {
459 x=(uchar)(k*y+b);
460 Pixel( x , y, mod);
461 }
462 }
463 else
464 {
465 for(y=y2;y<=y1;y++)
466 {
467 x=(uchar)(k*y+b);
468 Pixel( x , y, mod);
469 }
470 }
471 }
472 }
473 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 857 ----
CONSTANT SIZE = 2744 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 16
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 + -