📄 12232.lst
字号:
433 ////////////////////////////////////////////////////////////////////////////////
434 //调用方式:void set_page(uchar page)
435 //函数说明:同时设置主(右)从(左)显示页为0-3页
436 ////////////////////////////////////////////////////////////////////////////////
437 void set_page(uchar page)
438 {
439 1 send_mi(page_addr_set|page);
440 1 send_si(page_addr_set|page);
441 1 }
442
443 ////////////////////////////////////////////////////////////////////////////////
444 //调用方式:void SetAddress(uchar address)
445 //函数说明:同时设置主(右)从(左)列地址为0-61列
446 ////////////////////////////////////////////////////////////////////////////////
447 void set_address(uchar address)
448 {
449 1 send_mi(address&0x7F); //&0x7F,考虑到防止越限
450 1 send_si(address&0x7F);
451 1 }
452
453 ////////////////////////////////////////////////////////////////////////////////
454 //调用方式:void putchar_l(uchar c)
455 //函数说明:在右页(从窗口)当前地址画一个字节(8点)
456 ////////////////////////////////////////////////////////////////////////////////
457 void putchar_l(uchar c)
458 {
459 1 send_md(c);
460 1 }
461
462 ////////////////////////////////////////////////////////////////////////////////
463 //调用方式:void putchar_r(uchar c)
464 //函数说明:在左页(主窗口)当前地址画一个字节(8点)
465 ////////////////////////////////////////////////////////////////////////////////
466 void putchar_r(uchar c)
467 {
468 1 send_sd(c);
469 1 }
470
471 ////////////////////////////////////////////////////////////////////////////////
472 //调用方式:void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
473 //函数说明:画一个图,横坐标是col,layer表示上下层,width是图形的宽,高固定16
474 // bmp是图形指针
475 // 使用zimo21软件,采用纵向取模下高位得到bmp数据。
476 // col 图型的起始位置0~121
477 // layer 图形的位置(Y坐标)0-下半部分 非0-上半部分
478 // width 图形宽度8,16可选
479 // bmp 图形数据指针
480 ////////////////////////////////////////////////////////////////////////////////
481 void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
482 {
483 1 uchar x;
484 1 uchar address; //address表示显存的物理地址
485 1 uchar p=0;
486 1 uchar page=0;
487 1 uchar window=0; //page表示上下两页,window表示左右窗口(0左,1右)
488 1 if (layer) page=2; //左-主窗口,右-从窗口
C51 COMPILER V6.12 12232 04/20/2008 14:20:41 PAGE 9
489 1
490 1 for (x=col; x<col+width; x++)
491 1 {
492 2 if (x>121)return; //防止显示乱码
493 2 if (x>60) //左右窗口定位
494 2 {
495 3 window=1; //右-从窗口
496 3 address=x%61;
497 3 }
498 2 else
499 2 address=x; //主窗口输出
500 2
501 2 set_page(page); //上层数据输出
502 2 set_address(address);
503 2
504 2 if (window)
505 2 putchar_r(bmp[p]);
506 2 else
507 2 putchar_l(bmp[p]);
508 2
509 2 set_page(page+1); //下层数据输出
510 2 set_address(address); //列保持不变
511 2
512 2 if (window)
513 2 putchar_r(bmp[p+width]);
514 2 else
515 2 putchar_l(bmp[p+width]);
516 2
517 2 p++;
518 2 }
519 1 }
520
521 ////////////////////////////////////////////////////////////////////////////////
522 //函数:void disp_one_ascii(uchar col,uchar layer,uchar ascii_code)
523 //说明:显示单个ASCII码col-列;layer-上下行:1-上,0-下;ascii_code:所要显示德ASCCII码
524 ////////////////////////////////////////////////////////////////////////////////
525 void disp_one_ascii(uchar col,uchar layer,uchar ascii_code,uchar mode)
526 {
527 1 uchar i;
528 1 for(i=0;i<16;i++) //ASCII码显示占用16个字节
529 1 {
530 2 if(mode)dot_buffer[i]=~ascii[(ascii_code-0x20)*16 + i];
531 2 else dot_buffer[i]= ascii[(ascii_code-0x20)*16 + i];
532 2 }
533 1 draw_bmp(col,layer,8,dot_buffer);
534 1 }
535
536 ////////////////////////////////////////////////////////////////////////////////
537 //函数:void disp_ram_data(uchar col,uchar layer,uchar n,uchar mode)
538 //说明:显示小于4个的十进制数字//修改缓冲区的大小可以扩展显示
539 ////////////////////////////////////////////////////////////////////////////////
540 void disp_ram_data(uchar col,uchar layer,uchar n,uchar mode)
541 {
542 1 while(n--)
543 1 {
544 2 if(mode)disp_one_ascii(col,layer,disp_buffer[n]+0x30,1);
545 2 else disp_one_ascii(col,layer,disp_buffer[n]+0x30,0);
546 2 col += 8;
547 2 }
548 1 }
549
550 ////////////////////////////////////////////////////////////////////////////////
C51 COMPILER V6.12 12232 04/20/2008 14:20:41 PAGE 10
551 //函数:void dprintf(uchar col,uchar layer,uchar *ptr,uchar mode)
552 //说明:ASCII(8*16) 和 汉字(16*16)显示函数
553 ////////////////////////////////////////////////////////////////////////////////
554 void dprintf(uchar col,uchar layer,uchar *ptr,uchar mode)
555 {
556 1 uchar c1,c2;
557 1 uchar i,j,k;
558 1 uchar ulen;
559 1 //uchar ucol,ulayer,umode;
560 1 uchar ucol,ulayer;
561 1 ulen = 0;
562 1 ucol = col;
563 1 ulayer = layer;
564 1
565 1 while (ptr[ulen]!= 0)ulen++; //探测字串长度
566 1 i=0;
567 1 while(i<ulen)
568 1 {
569 2 c1 = ptr[i];
570 2 c2 = ptr[i+1];
571 2 //ASCII字符与汉字内码的区别在于128做分界;大于128的为汉字码
572 2 if(c1 <=128) //ASCII
573 2 {
574 3 if(mode)disp_one_ascii(ucol,ulayer,c1,1);
575 3 else disp_one_ascii(ucol,ulayer,c1,0);
576 3 ucol+=8;
577 3 i++; //ASCII码的处理
578 3 }
579 2 else //中文
580 2 {
581 3 for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
582 3 { //查找定位当前汉字的点阵区
583 4 if((c1 == GB_16[j].Index[0]) && (c2 == GB_16[j].Index[1]))
584 4 break;
585 4 }
586 3 for(k=0;k<32;k++)
587 3 { if(mode)dot_buffer[k]=~GB_16[j].Msk[k];
588 4 else dot_buffer[k]= GB_16[j].Msk[k];
589 4 }
590 3 draw_bmp(ucol,ulayer,16,dot_buffer);
591 3 ucol+=16;
592 3 i+=2; //中文的处理
593 3 }
594 2 }
595 1 }
596
597 ////////////////////////////////////////////////////////////////////////////////
598 ////////////////////////////////////////////////////////////////////////////////
599 void main(void)
600 {
601 1 char i;
602 1 uint j;
603 1 // DDRC=0xF0; //C口高四位为输出控制端口
604 1 // DDRA=0xFF; //A口为数据线(一般为输出,仅在读LCD状态时为输入)
605 1 for(i=0;i<10;i++);
606 1 for(j=1;j<10;j++); //开机延时
607 1 lcd_init();
608 1 lcd_clr();
609 1 while(1)
610 1 {
611 2 for(i=121;i>0;i--) //往左滚动输出
612 2 {
C51 COMPILER V6.12 12232 04/20/2008 14:20:41 PAGE 11
613 3 lcd_clr();
614 3 dprintf((i+24),1,"太川单片机 欢迎光临",0);//第二步,调整数据使它达到要求10个空格刚刚好在中间
615 3 dprintf((i-96),0,"HTTP://TCMCU.ICPCN.COM",0);
616 3 //第一步,调整I-x使最后出现的达到要求,第一个字出现在后面也不要紧
617 3 delay_ms(200);
618 3
619 3 }
620 2 delay_ms(3000);
621 2 lcd_clr();
622 2 delay_ms(3000);
623 2 for(i=121;i>0;i--) //往左滚动输出
624 2 {
625 3 lcd_clr();
626 3 dprintf((i+24),1,"太川单片机",0);
627 3 dprintf(i,0,"电话:028-66021915",1);
628 3 delay_ms(200);
629 3
630 3 }
631 2
632 2
633 2
634 2
635 2 }
636 1 }
637
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1123 ----
CONSTANT SIZE = 1653 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 36 40
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 + -