📄 ds1302b.lst
字号:
381 1 P1 = 0x95;
382 1 else
383 1 P1 = 0x96;
384 1 P2 = 0x01;
385 1 lck = 1;
386 1 P1 = 0xa1;
387 1 while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
388 1
389 1 lck = 0;
390 1 P1 = 0x44;
391 1 P2 = 0x01;
392 1 lck = 1;
393 1 P1 = 0xa1;
394 1 /*********以上为判断忙标志********/
395 1 WRITE;
396 1
397 1 P0 = x;
398 1 lck = 0;
399 1 if(right)
400 1 P1 = 0xc5;
401 1 else
402 1 P1 = 0xc6;
403 1 P2 = 0x01;
404 1 lck = 1;
405 1 P1 = 0xa1;
406 1
407 1 lck = 0;
408 1 P1 = 0x44;
409 1 P2 = 0x01;
410 1 lck = 1;
411 1 P1 = 0xa1;
412 1 /**********以上为送列命令***********/
413 1 DISABLED;
414 1 if(right)
415 1 statu = 0x01;
416 1 else
417 1 statu = 0x00;//置左又半区标志
418 1 }
419
420
421 /**************数据写输出***************/
422 void Wrdata(uchar x,uchar row,uchar col)
423 {
424 1 Locatexy(row,col);//定位显示位置
425 1
426 1 DISABLED;
C51 COMPILER V7.06 DS1302B 10/09/2006 12:12:36 PAGE 8
427 1 lck = 0;
428 1 if(statu)
429 1 P1 = 0x4d;//ELCD=0,RSTLOW=1(低电平复位无效),R/W=0(写),D/I= 1 ,CS138无效,CSB=0,CSA=1
430 1 else
431 1 P1 = 0x4e;//ELCD=0,RSTLOW=1(低电平复位无效),R/W=0(写),D/I= 1 ,CS138无效,CSB=1,CSA=0
432 1 P2 = 0x01;
433 1 lck = 1;
434 1 P1 = 0xa1;
435 1
436 1 P0 = x;
437 1
438 1 lck = 0;
439 1 if(statu)
440 1 P1 = 0xcd;//ELCD=1,RSTLOW=1(低电平复位无效),R/W=0(写),D/I= 1 ,CS138无效,CSB=0,CSA=1
441 1 else
442 1 P1 = 0xce;//ELCD=1,RSTLOW=1(低电平复位无效),R/W=0(写),D/I= 1 ,CS138无效,CSB=1,CSA=0
443 1 P2 = 0x01;
444 1 lck = 1;
445 1 P1 = 0xa1;
446 1
447 1 WRITE;
448 1 ENABLED;
449 1
450 1 lck = 0;
451 1 P1 = 0x44;
452 1 P2 = 0x01;
453 1 lck = 1;///ELCD=0(LCD无效)
454 1 P1 = 0xa1;
455 1 DISABLED;
456 1 }
457
458
459
460 /****************图形输出******************/
461 /*void Putpicture(void)
462 {
463 unsigned char i,j,row, col ;
464 unsigned int x;
465 row = 0; col=0;
466 for(j=0;j<128;j++){
467 x=j*0x08;
468 for(i=0;i<8;i++)
469 { cbyte=picture[x++];
470 // Xchange(); //翻转转换(阴码,顺向,逐列式。)若逐列式则无须转换
471 Wrdata(cbyte,row,col);
472 row++;
473 }
474 row=0;
475 col++;
476 }
477
478 }*/
479
480 /***************半角数据点阵输出*******************/
481 void Puthalf(uchar *strch,uchar row,uchar col)
482 {
483 1 uchar i,bakerx;
484 1 bakerx = row;
485 1 for(i=0;i<16;i++)//上半字输出
486 1 {
487 2 cbyte=strch[i];
488 2 Wrdata(cbyte,bakerx,col);
C51 COMPILER V7.06 DS1302B 10/09/2006 12:12:36 PAGE 9
489 2
490 2 cbyte=strch[i+1];
491 2 Wrdata(cbyte,bakerx+1,col);
492 2 col++;
493 2 i++;
494 2 }
495 1 }
496
497
498 /************汉字输出******************/
499 void Puthz(uchar *str,uchar row,uchar col)
500 {
501 1 uchar xdata i,bakerx;
502 1 bakerx=row;
503 1 for(i=0;i<32;i++)
504 1 {
505 2 cbyte=str[i];
506 2 Wrdata(cbyte,row,col); //上半字节输出
507 2 i++;
508 2 row=bakerx+1;
509 2 cbyte=str[i];
510 2 Wrdata(cbyte,row,col); //下半字节输出
511 2
512 2 row=bakerx;
513 2 col=col+1;
514 2 }
515 1 }
516
517 void VtoH8x16change(uchar xdata *hzbuf)
518 { uchar i,j,k, cash[16];
*** WARNING C259 IN LINE 518 OF DS1302B.C: pointer: different mspace
519 1 uchar newbyte, savebit[8];
520 1 for(k=0;k<16;k++){
521 2 newbyte = 0;
522 2 for(i=0;i<8;i++){
523 3 savebit[i]=hzbuf[i] & 0x80;
524 3 }
525 2 for(j=0;j<8;j++){
526 3 savebit[j] = savebit[j] >> (7-j);
527 3 newbyte = newbyte | savebit[j];
528 3 }
529 2 cash[k] = newbyte;
530 2 newbyte = 0;
531 2 for(i=8;i<16;i++){
532 3 savebit[i-8]=hzbuf[i] & 0x80;
533 3 }
534 2 for(j=0;j<8;j++){
535 3 savebit[j] = savebit[j] >> (7-j);
536 3 newbyte = newbyte |savebit[j];
537 3 }
538 2 cash[k+1] = newbyte;
539 2 for(j=0;j<16;j++){
540 3 hzbuf[j] = hzbuf[j] <<1;
541 3 }
542 2 k++;
543 2 }
544 1 for(i=0;i<16;i++)
545 1 hzbuf[i] = cash[i];
546 1 }
547
548
549
C51 COMPILER V7.06 DS1302B 10/09/2006 12:12:36 PAGE 10
550 void VtoHchange(uchar *hzbuf)
551 { uchar xdata i,j,k, cash[32];
552 1 uchar xdata newbyte, savebit[8];
553 1 for(k=0;k<16;k++){
554 2 newbyte = 0;
555 2 for(i=0;i<16;i++){
556 3 savebit[i/2]=hzbuf[i] & 0x80;
557 3 i++;
558 3 }
559 2 for(j=0;j<8;j++){
560 3 savebit[j] = savebit[j] >> (7-j);
561 3 newbyte = newbyte | savebit[j];
562 3 }
563 2 cash[k] = newbyte;
564 2 newbyte = 0;
565 2 for(i=16;i<32;i++){
566 3 savebit[(i-16)/2]=hzbuf[i] & 0x80;
567 3 i++;
568 3 }
569 2 for(j=0;j<8;j++){
570 3 savebit[j] = savebit[j] >> (7-j);
571 3 newbyte = newbyte |savebit[j];
572 3 }
573 2 cash[k+1] = newbyte;
574 2 for(j=0;j<32;j++){
575 3 hzbuf[j] = hzbuf[j] <<1;
576 3 j++;
577 3 }
578 2 k++;
579 2 }
580 1
581 1 for(k=16;k<32;k++){
582 2 newbyte = 0;
583 2 for(i=1;i<16;i++){
584 3 savebit[(i-1)/2]=hzbuf[i] & 0x80;
585 3 i++;
586 3 }
587 2 for(j=0;j<8;j++){
588 3 savebit[j] = savebit[j] >> (7-j);
589 3 newbyte = newbyte | savebit[j];
590 3 }
591 2 cash[k] = newbyte;
592 2 newbyte = 0;
593 2 for(i=17;i<32;i++){
594 3 savebit[(i-17)/2]=hzbuf[i] & 0x80;
595 3 i++;
596 3 }
597 2 for(j=0;j<8;j++){
598 3 savebit[j] = savebit[j] >> (7-j);
599 3 newbyte = newbyte | savebit[j];
600 3 }
601 2 cash[k+1] = newbyte;
602 2 for(j=1;j<32;j++){
603 3 hzbuf[j] = hzbuf[j] <<1;
604 3 j++;
605 3 }
606 2 k++;
607 2 }
608 1 for(i=0;i<32;i++)
609 1 hzbuf[i] = cash[i];
610 1 }
611
C51 COMPILER V7.06 DS1302B 10/09/2006 12:12:36 PAGE 11
612
613
614 void out16hz(uchar *p, uchar xdata ucXArray[])
*** WARNING C258 IN LINE 614 OF DS1302B.C: 'ucXArray': mspace on parameter ignored
615 {
616 1 unsigned long data num,qm,wm;
617 1 unsigned long data record ;
618 1 unsigned long data pointer;
619 1 uchar data ChineseArray[32], i;
620 1 memset(ChineseArray, 0, 32);
621 1 memset(ucXArray, 0, 32);
622 1 num = p[0];
623 1 //由该汉字计算对应点阵的地址
624 1 if(num > 0x0a1)
625 1 qm = (num - 0xa1);
626 1
627 1 num = p[1];
628 1 if(num > 0x0a1)
629 1 wm = (num - 0xa1);
630 1
631 1 record =qm * 94 + wm;
632 1 pointer = record * 32;
633 1
634 1 // 确定字库地址
635 1 if(pointer <= 0xffff ){
636 2 if(simple){
637 3 lck = 0;
638 3 P1 = 0x21;
639 3 P2 = 0x03;
640 3 lck = 1;
641 3 }else{
642 3 lck = 0;
643 3 P1 = 0x21;
644 3 P2 = 0x0b;
645 3 lck = 1;
646 3 }
647 2
648 2 } else if(pointer <= 0x1ffff) {
649 2 if(simple){
650 3 lck = 0;
651 3 P1 = 0x21;
652 3 P2 = 0x05;
653 3 lck = 1;
654 3 }else{
655 3 lck = 0;
656 3 P1 = 0x21;
657 3 P2 = 0x0d;
658 3 lck = 1;
659 3 }
660 2 pointer -= 0x10000;
661 2 } else if(pointer <= 0x2ffff) {
662 2 if(simple){
663 3 lck = 0;
664 3 P1 = 0x21;
665 3 P2 = 0x07;
666 3 lck = 1;
667 3 }else{
668 3 lck = 0;
669 3 P1 = 0x21;
670 3 P2 = 0x0f;
671 3 lck = 1;
672 3 }
C51 COMPILER V7.06 DS1302B 10/09/2006 12:12:36 PAGE 12
673 2 pointer -= 0x20000;
674 2 } else if(pointer <= 0x3ffff) {
675 2
676 2 lck = 0;
677 2 P1 = 0x21;
678 2 P2 = 0x09;
679 2 lck = 1;
680 2 pointer -= 0x30000;
681 2 }
682 1
683 1 for(i = 0; i < 32; i++)// 从字库中取出点阵
684 1 ChineseArray[i] = XBYTE[pointer+i];
685 1
686 1 lck = 0;
687 1 P1 = 0x21;
688 1 P2 = 0x01;
689 1 lck = 1;
690 1
691 1 for(i = 0; i < 32; i++)//将汉字点阵拷贝到外部RAM中
692 1 ucXArray[i] = ChineseArray[i];
693 1
694 1 return;
695 1 }
696
697 /********************显示中文*******************************/
698 void vWrite16x16Chinese(uchar *ch,uchar row,uchar col,bit flag)
699 {
700 1 uchar xdata ucXArray[32],i;
701 1 out16hz(ch, ucXArray);
702 1 //字库中字模:逐行,顺序
703 1 VtoHchange(ucXArray);//将字模变成:逐列,顺序
704 1
705 1 if(flag){ // 反白显示汉字
706 2 for(i = 0; i < 32; i++)
707 2 ucXArray[i] = ~ucXArray[i];//字模取反
708 2 }
709 1
710 1 Puthz(ucXArray,row,col);//输出数据到LCD
711 1 }
712
713 /************************显示英文和符号字符********************/
714 void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag)
715 {
716 1 uchar xdata ucXArray[16],i;
717 1
718 1 if(flag){ // 反白显示英文
719 2 for(i = 0; i < 16; i++)
720 2 ucXArray[i] = ~ch[i];
721 2 }else{
722 2 for(i = 0; i < 16; i++)
723 2 ucXArray[i] = ch[i];
724 2 }
725 1 VtoH8x16change(ucXArray);
726 1 Puthalf(ucXArray,row,col);
727 1 }
728
729 /*************************显示中英文字符串**********************/
730 void vWrite8x16String(uchar *str,uchar row, uchar col, bit flag)
731 {
732 1 unsigned char i, j,thiscol;
733 1
734 1 j = strlen(str);
C51 COMPILER V7.06 DS1302B 10/09/2006 12:12:36 PAGE 13
735 1
736 1 for(i = 0; i < j; i++)
737 1 { thiscol = (i % 16) * 8 + col;//计算列地址
738 2 if(str[i] < 0xa1){//当前显示内容为英文字符
739 3
740 3 vWrite8x16Character(&char_Table[str[i]-0x20][0],row,thiscol,flag);
741 3 }
742 2 else{//当前字符为中文
743 3 vWrite16x16Chinese(&str[i],row,thiscol,flag);
744 3 i ++;
745 3 }
746 2 if(i>15){//换行
747 3 row++;
748 3 col=0;
749 3 }
750 2 }
751 1 }
752
753
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 3161 ----
CONSTANT SIZE = 37 ----
XDATA SIZE = 2 96
PDATA SIZE = ---- ----
DATA SIZE = 2 130
IDATA SIZE = ---- ----
BIT SIZE = 2 3
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 3 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -