?? 12232.lst
字號(hào):
433 ////////////////////////////////////////////////////////////////////////////////
434 //調(diào)用方式:void set_page(uchar page)
435 //函數(shù)說(shuō)明:同時(shí)設(shè)置主(右)從(左)顯示頁(yè)為0-3頁(yè)
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 //調(diào)用方式:void SetAddress(uchar address)
445 //函數(shù)說(shuō)明:同時(shí)設(shè)置主(右)從(左)列地址為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 //調(diào)用方式:void putchar_l(uchar c)
455 //函數(shù)說(shuō)明:在右頁(yè)(從窗口)當(dāng)前地址畫(huà)一個(gè)字節(jié)(8點(diǎn))
456 ////////////////////////////////////////////////////////////////////////////////
457 void putchar_l(uchar c)
458 {
459 1 send_md(c);
460 1 }
461
462 ////////////////////////////////////////////////////////////////////////////////
463 //調(diào)用方式:void putchar_r(uchar c)
464 //函數(shù)說(shuō)明:在左頁(yè)(主窗口)當(dāng)前地址畫(huà)一個(gè)字節(jié)(8點(diǎn))
465 ////////////////////////////////////////////////////////////////////////////////
466 void putchar_r(uchar c)
467 {
468 1 send_sd(c);
469 1 }
470
471 ////////////////////////////////////////////////////////////////////////////////
472 //調(diào)用方式:void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
473 //函數(shù)說(shuō)明:畫(huà)一個(gè)圖,橫坐標(biāo)是col,layer表示上下層,width是圖形的寬,高固定16
474 // bmp是圖形指針
475 // 使用zimo21軟件,采用縱向取模下高位得到bmp數(shù)據(jù)。
476 // col 圖型的起始位置0~121
477 // layer 圖形的位置(Y坐標(biāo))0-下半部分 非0-上半部分
478 // width 圖形寬度8,16可選
479 // bmp 圖形數(shù)據(jù)指針
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表示上下兩頁(yè),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); //上層數(shù)據(jù)輸出
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); //下層數(shù)據(jù)輸出
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 //函數(shù):void disp_one_ascii(uchar col,uchar layer,uchar ascii_code)
523 //說(shuō)明:顯示單個(gè)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個(gè)字節(jié)
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 //函數(shù):void disp_ram_data(uchar col,uchar layer,uchar n,uchar mode)
538 //說(shuō)明:顯示小于4個(gè)的十進(jìn)制數(shù)字//修改緩沖區(qū)的大小可以擴(kuò)展顯示
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 //函數(shù):void dprintf(uchar col,uchar layer,uchar *ptr,uchar mode)
552 //說(shuō)明:ASCII(8*16) 和 漢字(16*16)顯示函數(shù)
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++; //探測(cè)字串長(zhǎng)度
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字符與漢字內(nèi)碼的區(qū)別在于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 { //查找定位當(dāng)前漢字的點(diǎn)陣區(qū)
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口為數(shù)據(jù)線(一般為輸出,僅在讀LCD狀態(tài)時(shí)為輸入)
605 1 for(i=0;i<10;i++);
606 1 for(j=1;j<10;j++); //開(kāi)機(jī)延時(shí)
607 1 lcd_init();
608 1 lcd_clr();
609 1 while(1)
610 1 {
611 2 for(i=121;i>0;i--) //往左滾動(dòng)輸出
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,"太川單片機(jī) 歡迎光臨",0);//第二步,調(diào)整數(shù)據(jù)使它達(dá)到要求10個(gè)空格剛剛好在中間
615 3 dprintf((i-96),0,"HTTP://TCMCU.ICPCN.COM",0);
616 3 //第一步,調(diào)整I-x使最后出現(xiàn)的達(dá)到要求,第一個(gè)字出現(xiàn)在后面也不要緊
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--) //往左滾動(dòng)輸出
624 2 {
625 3 lcd_clr();
626 3 dprintf((i+24),1,"太川單片機(jī)",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)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -