📄 12232.lst
字号:
382 3 send_md(0x00);
383 3 send_sd(0x00);
384 3 }
385 2 }
386 1 }
387
388 ////////////////////////////////////////////////////////////////////////////////
389 //调用方式:void set_page(uchar page)
390 //函数说明:同时设置主(右)从(左)显示页为0-3页
391 ////////////////////////////////////////////////////////////////////////////////
392 void set_page(uchar page)
393 {
394 1 send_mi(page_addr_set|page);
395 1 send_si(page_addr_set|page);
396 1 }
397
398 ////////////////////////////////////////////////////////////////////////////////
399 //调用方式:void SetAddress(uchar address)
400 //函数说明:同时设置主(右)从(左)列地址为0-61列
401 ////////////////////////////////////////////////////////////////////////////////
402 void set_address(uchar address)
403 {
404 1 send_mi(address&0x7F); //&0x7F,考虑到防止越限
405 1 send_si(address&0x7F);
406 1 }
407
408 ////////////////////////////////////////////////////////////////////////////////
409 //调用方式:void putchar_l(uchar c)
410 //函数说明:在右页(从窗口)当前地址画一个字节(8点)
411 ////////////////////////////////////////////////////////////////////////////////
412 void putchar_l(uchar c)
413 {
414 1 send_md(c);
415 1 }
416
417 ////////////////////////////////////////////////////////////////////////////////
418 //调用方式:void putchar_r(uchar c)
419 //函数说明:在左页(主窗口)当前地址画一个字节(8点)
420 ////////////////////////////////////////////////////////////////////////////////
421 void putchar_r(uchar c)
422 {
423 1 send_sd(c);
424 1 }
425
426 ////////////////////////////////////////////////////////////////////////////////
427 //调用方式:void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
C51 COMPILER V7.50 12232 10/21/2007 15:38:56 PAGE 8
428 //函数说明:画一个图,横坐标是col,layer表示上下层,width是图形的宽,高固定16
429 // bmp是图形指针
430 // 使用zimo21软件,采用纵向取模下高位得到bmp数据。
431 // col 图型的起始位置0~121
432 // layer 图形的位置(Y坐标)0-下半部分 非0-上半部分
433 // width 图形宽度8,16可选
434 // bmp 图形数据指针
435 ////////////////////////////////////////////////////////////////////////////////
436 void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
437 {
438 1 uchar x;
439 1 uchar address; //address表示显存的物理地址
440 1 uchar p=0;
441 1 uchar page=0;
442 1 uchar window=0; //page表示上下两页,window表示左右窗口(0左,1右)
443 1 if (layer) page=2; //左-主窗口,右-从窗口
444 1 for (x=col; x<col+width; x++)
445 1 {
446 2 if (x>121)return; //防止显示乱码
447 2 if (x>60) //左右窗口定位
448 2 {
449 3 window=1; //右-从窗口
450 3 address=x%61;
451 3 }
452 2 else
453 2 address=x; //主窗口输出
454 2 set_page(page); //上层数据输出
455 2 set_address(address);
456 2 if (window)
457 2 putchar_r(bmp[p]);
458 2 else
459 2 putchar_l(bmp[p]);
460 2
461 2 set_page(page+1); //下层数据输出
462 2 set_address(address); //列保持不变
463 2
464 2 if (window)
465 2 putchar_r(bmp[p+width]);
466 2 else
467 2 putchar_l(bmp[p+width]);
468 2
469 2 p++;
470 2 }
471 1 }
472
473 ////////////////////////////////////////////////////////////////////////////////
474 //函数:void disp_one_ascii(uchar col,uchar layer,uchar ascii_code)
475 //说明:显示单个ASCII码col-列;layer-上下行:1-上,0-下;ascii_code:所要显示德ASCCII码
476 ////////////////////////////////////////////////////////////////////////////////
477 void disp_one_ascii(uchar col,uchar layer,uchar ascii_code,uchar mode)
478 {
479 1 uchar i;
480 1 for(i=0;i<16;i++) //ASCII码显示占用16个字节
481 1 {
482 2 if(mode)dot_buffer[i]=~ascii[(ascii_code-0x20)*16 + i];
483 2 else dot_buffer[i]= ascii[(ascii_code-0x20)*16 + i];
484 2 }
485 1 draw_bmp(col,layer,8,dot_buffer);
486 1 }
487
488 ////////////////////////////////////////////////////////////////////////////////
489 //函数:void disp_ram_data(uchar col,uchar layer,uchar n,uchar mode)
C51 COMPILER V7.50 12232 10/21/2007 15:38:56 PAGE 9
490 //说明:显示小于4个的十进制数字//修改缓冲区的大小可以扩展显示
491 ////////////////////////////////////////////////////////////////////////////////
492 void disp_ram_data(uchar col,uchar layer,uchar n,uchar mode)
493 {
494 1 while(n--)
495 1 {
496 2 if(mode)disp_one_ascii(col,layer,disp_buffer[n]+0x30,1);
497 2 else disp_one_ascii(col,layer,disp_buffer[n]+0x30,0);
498 2 col += 8;
499 2 }
500 1 }
501
502 ////////////////////////////////////////////////////////////////////////////////
503 //函数:void dprintf(uchar col,uchar layer,uchar *ptr,uchar mode)
504 //说明:ASCII(8*16) 和 汉字(16*16)显示函数
505 ////////////////////////////////////////////////////////////////////////////////
506 void dprintf(uchar col,uchar layer,uchar *ptr,uchar mode)
507 {
508 1 uchar c1,c2;
509 1 uchar i,j,k;
510 1 uchar ulen=0;
511 1 uchar ucol,ulayer;
512 1 ucol = col;
513 1 ulayer = layer;
514 1 while (ptr[ulen]!= 0)ulen++; //探测字串长度
515 1 i=0;
516 1 while(i<ulen)
517 1 {
518 2 c1 = ptr[i];
519 2 c2 = ptr[i+1]; //ASCII字符与汉字内码的区别在于128做分界;大于128的为汉字码
520 2 if(c1 <=128) //ASCII
521 2 {
522 3 if(mode)disp_one_ascii(ucol,ulayer,c1,1);//反色显示
523 3 else disp_one_ascii(ucol,ulayer,c1,0);//正常显示
524 3 ucol+=8;
525 3 i++; //ASCII码的处理
526 3 }
527 2 else //中文
528 2 {
529 3 for(j=0;j<sizeof(hz16)/sizeof(hz16[0]);j++)
530 3 { //查找定位当前汉字的点阵区
531 4 if((c1 == hz16[j].index[0]) && (c2 == hz16[j].index[1]))
532 4 break;
533 4 }
534 3 for(k=0;k<32;k++)
535 3 { if(mode)dot_buffer[k]=~hz16[j].zimo[k];
536 4 else dot_buffer[k]= hz16[j].zimo[k];
537 4 }
538 3 draw_bmp(ucol,ulayer,16,dot_buffer);
539 3 ucol+=16;
540 3 i+=2; //中文的处理
541 3 }
542 2 }
543 1 }
544 ////////////////////////////////////////////////////////////////////////////////
545 void main(void)
546 {
547 1 uchar i;
548 1 uint j;
549 1 // RST=1;
550 1 for(i=0;i<10;i++)for(j=1;j<10;j++); //开机延时
551 1 lcd_init();
C51 COMPILER V7.50 12232 10/21/2007 15:38:56 PAGE 10
552 1 lcd_clr();
553 1 dprintf(0,0," 测试成功!! ",1); //说明/在up 行从第10列开始显示/正常显示
-
554 1 dprintf(2,1,"2007.10.21 沈阳",0); //说明/在up 行从第10列开始显示/正常显示
555 1 // disp_ram_data(10,1,8,0); //说明/在dowm行从第10列开始显示/反白显示
556 1 while(1);
557 1 }
558
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 952 ----
CONSTANT SIZE = 1609 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 42 39
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 + -