📄 s1d1335.lst
字号:
284 //================================================================
285 void Delay(unsigned int MS)
286 {
287 1 unsigned char us,usn;
288 1 while(MS!=0)
289 1 {
290 2 usn = 2; //for 12M
291 2 while(usn!=0)
292 2 {
293 3 us=0xf6;
294 3 while (us!=0){us--;};
295 3 usn--;
296 3 }
297 2 MS--;
298 2 }
299 1 }
300 /********************************************************************
301 * 名称: void Displaytime(uchar col,uchar row,uchar hzcode)
302 * 功能: 显示27*14点阵汉字
303 * 调用:
C51 COMPILER V7.00 S1D1335 05/22/2007 16:53:19 PAGE 6
304 * 输入:
305 * 说明: 入口参数: 横坐标col 纵坐标row 汉字位置HZcode
306 * 返回值:
307 ***********************************************************************/
308 //出口参数: 无 (HZcode表示汉字在字模表中的位置)
309 void Displaytime(uchar col,uchar row,uchar hzcode)
310 {
311 1 uchar i,j;
312 1 uint x;
313 1 x = 42*hzcode;
314 1 WriteCommand( CsrDirR );
315 1 for(i=0;i<14;i++)
316 1 {
317 2 Locatexy(col,row);
318 2 WriteCommand(mWrite);
319 2 for(j=0;j<3;j++)
320 2 {
321 3 WriteData(timedata[x]);
322 3 x++;
323 3 }
324 2 row++;
325 2 }
326 1
327 1 }
328 /********************************************************************
329 * 名称: Displayspeed(uchar col,uchar row,uchar hzcode)
330 * 功能: 显示24*18点阵汉字
331 * 调用:
332 * 输入:
333 * 说明: 入口参数: 横坐标col 纵坐标row 汉字位置HZcode
334 * 返回值:
335 ***********************************************************************/
336 //出口参数: 无 (HZcode表示汉字在字模表中的位置)
337 void Displayspeed(uchar col,uchar row,uchar hzcode)
338 {
339 1 uchar i,j;
340 1 uint x;
341 1 x = 54*hzcode;
342 1 WriteCommand( CsrDirR );
343 1 for(i=0;i<18;i++)
344 1 {
345 2 Locatexy(col,row);
346 2 WriteCommand(mWrite);
347 2 for(j=0;j<3;j++)
348 2 {
349 3 WriteData(speed[x]);
350 3 x++;
351 3 }
352 2 row++;
353 2 }
354 1
355 1 }
356 /********************************************************************
357 * 名称: DisplayTotal(uchar col,uchar row,uchar hzcode)
358 * 功能: 显示27*40点阵汉字
359 * 调用:
360 * 输入:
361 * 说明: 入口参数: 横坐标col 纵坐标row 汉字位置HZcode
362 * 返回值:
363 ***********************************************************************/
364 //出口参数: 无 (HZcode表示汉字在字模表中的位置)
365 void DisplayTotal(uchar col,uchar row,uchar hzcode)
C51 COMPILER V7.00 S1D1335 05/22/2007 16:53:19 PAGE 7
366 {
367 1 uchar i,j;
368 1 Uint x;
369 1 x = 84*hzcode;
370 1 WriteCommand( CsrDirR );
371 1 for(i=0;i<21;i++)
372 1 {
373 2 Locatexy(col,row);
374 2 WriteCommand(mWrite);
375 2 for(j=0;j<4;j++)
376 2 {
377 3 WriteData(Total[x]);
378 3 x++;
379 3 }
380 2 row++;
381 2 }
382 1
383 1 }
384 //=========清屏==========================
385 void LcmClear( void )
386 {
387 1 Uint i1=32768;
388 1 WriteCommand( CsrDirR );
389 1 WriteCommand( CsrW );
390 1 WriteData( 0 );
391 1 WriteData( 0 );
392 1 WriteCommand( mWrite );
393 1 while(i1--) {
394 2
395 2 WriteData( 0x0 );
396 2 }
397 1 }
398
399 //========写入当前地址======================*/
400 void Locateaddr(uint addr)
401 {
402 1 uint temp;
403 1 temp=addr;
404 1 WriteCommand( CsrW );
405 1 WriteData( (uchar)(temp & 0xff) );
406 1 WriteData( (uchar)(temp /256 ) );
407 1 }
408 /*--------------------------------------------------------------------------------
409 调用方式:void extbmp(Byte x0,Byte y0,Byte *bmp)
410
411 函数版本:V1.0 2003.9.2 加注释
412
413 函数说明:extbmp()在左上角坐标(x,y)解压显示bmp所指向的图形,图形压缩工具采用“字模3.3”
414
415 x0必须为8的整数倍。该解压算法适合显存横向排列的液晶。纵向解压算法可参照编写。
416
417 该算法的疑问或修改建议,请E-mail:c51bbs@vip.163.com
418 ---------------------------------------------------------------------------------*/
419
420 void extbmp(uchar x0,uchar y0,uchar *bmp)
421 {
422 1 uint n=2,num;
423 1 uint begin,add1,end;
424 1 uchar tmp;
425 1 uint bmp_h,bmp_v;//BMP的宽和高
426 1
427 1 bmp_h=bmp[0];bmp_v=bmp[1];
C51 COMPILER V7.00 S1D1335 05/22/2007 16:53:19 PAGE 8
428 1 begin=x0+y0*H_BYTE;
429 1 end=begin+(bmp_v-1)*H_BYTE+bmp_h-1;
430 1 add1=begin;
431 1 Locateaddr(add1);
432 1 WriteCommand(mWrite);
433 1 while (add1<=end)
434 1 {
435 2 if (bmp[n]==0x00||bmp[n]==0xFF) //解压缩画黑白点
436 2 {
437 3 tmp=bmp[n++];
438 3 if (bmp[n]!=0x00) num=bmp[n++];
439 3 else {n++;num=bmp[n++];num|=(bmp[n++]<<8);} //算出了0x00重复的次数
440 3
441 3 while(num--) //把0x00都画出来
442 3 {
443 4 //display_buff[add1]|=tmp; //display_buff是显存映射在XRAM上的镜象
444 4
445 4 WriteData(tmp);
446 4 if (add1==end) {return;}//UpdataAll();完成显存镜象到显存的刷新过程
447 4 if (add1==begin+bmp_h-1)
448 4 {
449 5 begin+=H_BYTE;
450 5 add1=begin;
451 5 Locateaddr(add1);
452 5 WriteCommand(mWrite);
453 5 }
454 4 else add1++;
455 4 }
456 3 }
457 2
458 2 else //直接画,不解压缩
459 2 {
460 3 //display_buff[add1]|=bmp[n++];
461 3 WriteData(bmp[n++]);
462 3 if (add1==end) {return;}
463 3 if (add1==begin+bmp_h-1)
464 3 {begin+=H_BYTE;
465 4 add1=begin;
466 4 Locateaddr(add1);
467 4 WriteCommand(mWrite);
468 4 }
469 3 else add1++;
470 3 }
471 2 }
472 1
473 1 }
474 /********************************************************************
475 * 名称: void Displayonebmp(uchar x,uchar y,uchar *adr)
476 * 功能: 显示任意点阵图标
477 * 调用: WriteCommand(mWrite);
478 * 输入: x,y,*adr
479 * 说明: x为显示图标纵向地址,y为显示图标横向地址
480 * 返回值:无
481 ***********************************************************************/
482 void Displayonebmp(uchar x,uchar y,uchar *adr)
483 {
484 1 uchar col,row;
485 1 uchar i,j;
486 1 uchar *p;
487 1 p=adr;
488 1 p++;
489 1 row=*p;
C51 COMPILER V7.00 S1D1335 05/22/2007 16:53:19 PAGE 9
490 1 p++;
491 1 col=*p;
492 1 p++;
493 1 for(i=0;i<row;i++)
494 1 {
495 2 Locatexy(x,y);
496 2 WriteCommand(mWrite);
497 2 for(j=0;j<col;j++)
498 2 {
499 3 WriteData(*p);
500 3 p++;
501 3 }
502 2 y++;
503 2 }
504 1 }
505 //=======画点=====================
506 void LcdDrawPoint(int x,int y,bit Point)
507 {
508 1 uint temp;
509 1 uchar t1,t2,WrData;
510 1 if((x>=0)&&(y>=0)&&(x<321)&&(y<241))
511 1 {
512 2 t1=x/8;
513 2 t2=x%8;
514 2
515 2 temp=t1+(uint)y*paraP9;
516 2 WriteCommand( CsrW );
517 2 WriteData( (uchar)(temp & 0xff) );
518 2 WriteData( (uchar)(temp /256 ) );
519 2 WriteCommand(mRead);
520 2 WrData=ReadData();
521 2 WriteCommand( CsrW );
522 2 WriteData( (uchar)(temp & 0xff) );
523 2 WriteData( (uchar)(temp /256 ) );
524 2 if(Point)
525 2 {
526 3 switch(t2)
527 3 {
528 4 case 0: WrData|=0x80; break;
529 4 case 1: WrData|=0x40; break;
530 4 case 2: WrData|=0x20; break;
531 4 case 3: WrData|=0x10; break;
532 4 case 4: WrData|=0x08; break;
533 4 case 5: WrData|=0x04; break;
534 4 case 6: WrData|=0x02; break;
535 4 case 7: WrData|=0x01; break;
536 4 default: break;
537 4 }
538 3 }
539 2 else
540 2 {
541 3 switch(t2)
542 3 {
543 4 case 0: WrData&=0x7f; break;
544 4 case 1: WrData&=0xbf; break;
545 4 case 2: WrData&=0xdf; break;
546 4 case 3: WrData&=0xef; break;
547 4 case 4: WrData&=0xf7; break;
548 4 case 5: WrData&=0xfb; break;
549 4 case 6: WrData&=0xfd; break;
550 4 case 7: WrData&=0xfe; break;
551 4 default: break;
C51 COMPILER V7.00 S1D1335 05/22/2007 16:53:19 PAGE 10
552 4 }
553 3 }
554 2 WriteCommand(mWrite);
555 2 WriteData(WrData);
556 2 }
557 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1575 ----
CONSTANT SIZE = 4674 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 64
IDATA SIZE = ---- ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -