📄 lcddrive.lst
字号:
510 /****************************************************************************
511 * 名称:GUI_Point()
512 * 功能:在指定位置上画点。
513 * 入口参数: x 指定点所在列的位置
514 * y 指定点所在行的位置
515 * color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
516 * 出口参数:返回值为1时表示操作成功,为0时表示操作失败。(操作失败原因是指定地址超出有
517 * 效范围)
518 ****************************************************************************/
519 extern uint8 GUI_Point(uint32 x, uint32 y, TCOLOR color)
ARM COMPILER V2.32a, LCDDRIVE 25/01/07 14:11:01 PAGE 9
520 { /* 参数过滤 */
521 1 if(x>=GUI_LCM_XMAX) return(0);
522 1 if(y>=GUI_LCM_YMAX) return(0);
523 1
524 1 /* 设置缓冲区相应的点 */
525 1 if( (color&0x01) != 0 ) gui_disp_buf[y][x>>3] |= DCB_HEX_TAB[x&0x07];
526 1 else gui_disp_buf[y][x>>3] &= (~DCB_HEX_TAB[x&0x07]);
527 1
528 1 /* 刷新显示 */
529 1 LCD_UpdatePoint(x, y);
530 1 return(1);
531 1 }
532
533
534 /****************************************************************************
535 * 名称:GUI_HLine()
536 * 功能:画水平线。
537 * 入口参数: x0 水平线起点所在列的位置
538 * y0 水平线起点所在行的位置
539 * x1 水平线终点所在列的位置
540 * color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
541 * 出口参数:无
542 * 说明:操作失败原因是指定地址超出缓冲区范围。
543 ****************************************************************************/
544 extern void GUI_HLine(uint32 x0, uint32 y0, uint32 x1, uint8 color)
545 { uint32 bak;
546 1
547 1 if(x0>x1) // 对x0、x1大小进行排列,以便画图
548 1 { bak = x1;
549 2 x1 = x0;
550 2 x0 = bak;
551 2 }
552 1 if(x0==x1)
553 1 { GUI_Point(x0, y0, color);
554 2 return;
555 2 }
556 1
557 1 do
558 1 { /* 设置相应的点为1 */
559 2 if(0!=color) gui_disp_buf[y0][x0>>3] |= DCB_HEX_TAB[x0&0x07];
560 2 else gui_disp_buf[y0][x0>>3] &= (~DCB_HEX_TAB[x0&0x07]);
561 2 /* 刷新显示(一次刷新一字节) */
562 2 if( (x0&0x07)==0x07 ) LCD_UpdatePoint(x0, y0);
563 2
564 2 x0++;
565 2 }while(x1>x0);
566 1
567 1 /* 对最后一点显示操作 */
568 1 if(0!=color) gui_disp_buf[y0][x0>>3] |= DCB_HEX_TAB[x0&0x07];
569 1 else gui_disp_buf[y0][x0>>3] &= (~DCB_HEX_TAB[x0&0x07]);
570 1 LCD_UpdatePoint(x0, y0);
571 1 }
572
573
574
575 /****************************************************************************
576 * 名称:display_shuzi()
577 * 功能:在指定的地方显示数字
578 *入口参数:ix表示横向字节坐标,iy表示纵轴坐标,disp_datesz表示显示的数字
579 * 出口参数:无
580 * 说明:操作失败原因是指定地址超出缓冲区范围。
581 ****************************************************************************/
582 extern uint8 display_shuzi(uint8 Disp_datesz,uint8 ix,uint8 iy)
583 { uint32 addr1;
584 1 uint8 shuzizimo[12];
585 1 uint8 ds,szzmc,ls;
ARM COMPILER V2.32a, LCDDRIVE 25/01/07 14:11:01 PAGE 10
586 1
587 1 switch(Disp_datesz)
588 1 {
589 2 case 0:
590 2 for(ds=0;ds<12;ds++)
591 2 shuzizimo[ds]=shuzi_0[ds];
592 2 break;
593 2 case 1:
594 2 for(ds=0;ds<12;ds++)
595 2 shuzizimo[ds]=shuzi_1[ds];
596 2 break;
597 2 case 2:
598 2 for(ds=0;ds<12;ds++)
599 2 shuzizimo[ds]=shuzi_2[ds];
600 2 break;
601 2 case 3:
602 2 for(ds=0;ds<12;ds++)
603 2 shuzizimo[ds]=shuzi_3[ds];
604 2 break;
605 2 case 4:
606 2 for(ds=0;ds<12;ds++)
607 2 shuzizimo[ds]=shuzi_4[ds];
608 2 break;
609 2 case 5:
610 2 for(ds=0;ds<12;ds++)
611 2 shuzizimo[ds]=shuzi_5[ds];
612 2 break;
613 2 case 6:
614 2 for(ds=0;ds<12;ds++)
615 2 shuzizimo[ds]=shuzi_6[ds];
616 2 break;
617 2 case 7:
618 2 for(ds=0;ds<12;ds++)
619 2 shuzizimo[ds]=shuzi_7[ds];
620 2 break;
621 2 case 8:
622 2 for(ds=0;ds<12;ds++)
623 2 shuzizimo[ds]=shuzi_8[ds];
624 2 break;
625 2 case 9:
626 2 for(ds=0;ds<12;ds++)
627 2 shuzizimo[ds]=shuzi_9[ds];
628 2 break;
629 2 case 0x0A:
630 2 for(ds=0;ds<12;ds++)
631 2 shuzizimo[ds]=MatrixMaohao[ds];
632 2 break;
633 2 case 0x0B:
634 2 for(ds=0;ds<12;ds++)
635 2 shuzizimo[ds]=Matrixxie[ds];
636 2 break;
637 2 case 0x0C:
638 2 for(ds=0;ds<12;ds++)
639 2 shuzizimo[ds]=shuzi_kg[ds];
640 2 break;
641 2 }
642 1 szzmc=0;
643 1 for(ls=iy;ls<iy+12;ls++)
644 1 //j表示横向两个字节如果是在显示3,4个字节上把j该为j=2;j<4
645 1 {
646 2 addr1=ls*16+ix;
647 2 LCD_WriteTCommand3(LCD_ADR_POS, addr1&0xFF, addr1>>8); // 置地址指针
648 2 LCD_WriteTCommand2(LCD_NOC_WR, shuzizimo[szzmc]);
649 2 szzmc++;
650 2 }
651 1
ARM COMPILER V2.32a, LCDDRIVE 25/01/07 14:11:01 PAGE 11
652 1 return(1);
653 1 }
654
655
656
657 /****************************************************************************
658 * 名称:display_date()
659 * 功能:显示日期数字
660 * 入口参数:Disp_date[8] 为年/月/日从高位到低位依次排列每个数字为一个数组里的数
661 * 出口参数:1败原因是指定地址超出缓冲区范围。
662 ****************************************************************************/
663 extern uint8 display_date(uint8 * Disp_date)
664 { uint8 dasz;
665 1 uint8 dasz1;
666 1
667 1
668 1 for(dasz1=8;dasz1>0;dasz1--)
669 1 { dasz=dasz1-1;
670 2 switch(dasz)
671 2 { case 7:
672 3 display_shuzi(Disp_date[dasz],5,3) ;
673 3 break;
674 3 case 6:
675 3 display_shuzi(Disp_date[dasz],6,3) ;
676 3 break;
677 3 case 5:
678 3 display_shuzi(Disp_date[dasz],7,3) ;
679 3 break;
680 3 case 4:
681 3 display_shuzi(Disp_date[dasz],8,3) ;
682 3 display_shuzi(0xB,9,3) ;
683 3 break;
684 3 case 3:
685 3 display_shuzi(Disp_date[dasz],10,3) ;
686 3 break;
687 3 case 2:
688 3 display_shuzi(Disp_date[dasz],11,3) ;
689 3 display_shuzi(0xB,12,3) ;
690 3 break;
691 3 case 1:
692 3 display_shuzi(Disp_date[dasz],13,3) ;
693 3 break;
694 3 case 0:
695 3 display_shuzi(Disp_date[dasz],14,3) ;
696 3 break;
697 3
698 3 }
699 2 }
700 1 return(1); }
701
702
703 /****************************************************************************
704 * 名称:display_time()
705 * 功能:显示时间数字
706 * 入口参数:Disp_time 为 小时/分钟/秒 从高位到低位依次排列每个数字为一个数组里的数
707 * 出口参数:1
708 * 说明:操作失败原因是指定地址超出缓冲区范围。
709 ****************************************************************************/
710 extern uint8 display_time(uint8 * Disp_time)
711 { uint8 timesz;
712 1 uint8 timesz1;
713 1
714 1 for(timesz1=0;timesz1<6;timesz1++)
715 1 { timesz=timesz1;
716 2 switch(timesz)
717 2 {
ARM COMPILER V2.32a, LCDDRIVE 25/01/07 14:11:01 PAGE 12
718 3 case 5:
719 3 if(Disp_time[timesz]==0){display_shuzi(0xC,6,41) ;}
720 3 else display_shuzi(Disp_time[timesz],5,21) ;
721 3 break;
722 3 case 4:
723 3 display_shuzi(Disp_time[timesz],6,21) ;
724 3 display_shuzi(0xA,7,21) ;
725 3 break;
726 3 case 3:
727 3
728 3 display_shuzi(Disp_time[timesz],8,21) ;
729 3 break;
730 3 case 2:
731 3 display_shuzi(Disp_time[timesz],9,21) ;
732 3 display_shuzi(0xA,10,21) ;
733 3 break;
734 3 case 1:
735 3 display_shuzi(Disp_time[timesz],11,21) ;
736 3 break;
737 3 case 0:
738 3 display_shuzi(Disp_time[timesz],12,21) ;
739 3 break;
740 3
741 3 }
742 2 }
743 1 return(1); }
744
745 /****************************************************************************
746 * 名称:display_speed()
747 * 功能:显示速度数字
748 * 入口参数:百位十位各位 从高位到低位依次排列每个数字为一个数组里的数
749 * 出口参数:1
750 * 说明:操作失败原因是指定地址超出缓冲区范围。
751 ****************************************************************************/
752 extern uint8 display_speed(uint8 * Disp_speed)
753 { uint8 speedsz;
754 1 uint8 speedsz1;
755 1
756 1 for(speedsz1=3;speedsz1>0;speedsz1--)
757 1 { speedsz=speedsz1-1;
758 2 switch(speedsz)
759 2 {
760 3 case 2:
761 3 if(Disp_speed[speedsz]==0){display_shuzi(0xC,6,41) ;}
762 3 else display_shuzi(Disp_speed[speedsz],6,41) ;
763 3 break;
764 3 case 1:
765 3 display_shuzi(Disp_speed[speedsz],7,41) ;
766 3 break;
767 3 case 0:
768 3 display_shuzi(Disp_speed[speedsz],8,41) ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -