📄 lcd.lst
字号:
604 3 x2=temp;
605 3 }
606 2
607 2 for (i=x1;i<x2+1; i++)
608 2 LCD_Draw_dot(i,y1,flag);
609 2 }
610 1
611 1 else if (x1==x2)
612 1 {
613 2 if (y1>y2)
C51 COMPILER V7.06 LCD 04/22/2005 13:32:48 PAGE 11
614 2 {
615 3 temp=y1;
616 3 y1=y2;
617 3 y2=temp;
618 3 }
619 2
620 2 for (i=y1;i<y2+1; i++)
621 2 LCD_Draw_dot(x1,i,flag);
622 2 }
623 1 else
624 1 {
625 2 if (abs(x2-x1)>=abs(y2-y1))
626 2 {
627 3 k=1.0*(y2-y1)/(x2-x1);
628 3 b=y1-k*x1;
629 3 if (x1>x2)
630 3 {
631 4 temp=x1;
632 4 x1=x2;
633 4 x2=temp;
634 4 }
635 3
636 3 for (i=x1;i<x2+1; i++)
637 3 {
638 4 temp=k*i+b;
639 4 LCD_Draw_dot(i,temp,flag);
640 4 }
641 3 }
642 2 else
643 2 {
644 3 k=1.0*(x2-x1)/(y2-y1);
645 3 b=x1-k*y1;
646 3
647 3 if (y1>y2)
648 3 {
649 4 temp=y1;
650 4 y1=y2;
651 4 y2=temp;
652 4 }
653 3
654 3 for (i=y1;i<y2+1; i++)
655 3 {
656 4 temp=k*i+b;
657 4 LCD_Draw_dot(temp,i,flag);
658 4 }
659 3 }
660 2 }
661 1 }
662
663 /***********************************************************************************
664 * 函数名称:LCD_Draw_circle;
665 *
666 * 函数功能描述:以(x,y)为圆心,r为半径画圆;
667 *
668 * 输入参数:unsigned char类型坐标x,y, bool类型标识flag;
669 *
670 * 返回数据:none;
671 *
672 * 注意: none;
673 ************************************************************************************/
674
675 void LCD_Draw_circle(BYTE x,BYTE y,BYTE r,bool flag)
C51 COMPILER V7.06 LCD 04/22/2005 13:32:48 PAGE 12
676 {
677 1 R_BYTE r_2,i,x1,y1,temp_x;
678 1 R_WORD temp;
679 1
680 1 r_2=0.707*r;
681 1 temp=r*r;
682 1
683 1 for (i=0; i<=r_2; i++)
684 1 {
685 2 if (flag)
686 2 {
687 3 if (!(i&0x01))
688 3 {
689 4
690 4 x1=i;
691 4 y1=sqrt(1.0*(temp-x1*x1))+0.5;
692 4 LCD_Draw_dot(x1+x,y1+y,flag);
693 4 LCD_Draw_dot(-x1+x,y1+y,flag);
694 4 LCD_Draw_dot(x1+x,-y1+y,flag);
695 4 LCD_Draw_dot(-x1+x,-y1+y,flag);
696 4
697 4 temp_x=x1;
698 4 x1=y1;
699 4 y1=temp_x;
700 4
701 4 LCD_Draw_dot(x1+x,y1+y,flag);
702 4 LCD_Draw_dot(-x1+x,y1+y,flag);
703 4 LCD_Draw_dot(x1+x,-y1+y,flag);
704 4 LCD_Draw_dot(-x1+x,-y1+y,flag);
705 4 }
706 3 }
707 2 else
708 2 {
709 3 x1=i;
710 3 y1=sqrt(1.0*(temp-x1*x1))+0.5;
711 3 LCD_Draw_dot(x1+x,y1+y,flag);
712 3 LCD_Draw_dot(-x1+x,y1+y,flag);
713 3 LCD_Draw_dot(x1+x,-y1+y,flag);
714 3 LCD_Draw_dot(-x1+x,-y1+y,flag);
715 3
716 3 temp_x=x1;
717 3 x1=y1;
718 3 y1=temp_x;
719 3
720 3 LCD_Draw_dot(x1+x,y1+y,flag);
721 3 LCD_Draw_dot(-x1+x,y1+y,flag);
722 3 LCD_Draw_dot(x1+x,-y1+y,flag);
723 3 LCD_Draw_dot(-x1+x,-y1+y,flag);
724 3 }
725 2
726 2 }
727 1 }
728
729 /***********************************************************************************
730 * 函数名称:LCD_Draw_Rectangle;
731 *
732 * 函数功能描述:以(x1,y1)和(x2,y2)为对角点画矩形;
733 *
734 * 输入参数:BYTE类型坐标x1,y1,x2,y2; bool类型标识flag;
735 *
736 * 返回数据:none;
737 *
C51 COMPILER V7.06 LCD 04/22/2005 13:32:48 PAGE 13
738 * 注意: none;
739 ************************************************************************************/
740
741 void LCD_Draw_Rectangle(BYTE x1,y1,x2,y2, bool flag)
742 {
743 1 LCD_Draw_line(x1,y1,x2,y1,flag);
744 1 LCD_Draw_line(x1,y1,x1,y2,flag);
745 1
746 1 LCD_Draw_line(x2,y1,x2,y2,flag);
747 1 LCD_Draw_line(x1,y2,x2,y2,flag);
748 1 }
749
750
751 /***********************************************************************************
752 * 函数名称:LCD_Draw_FillRectangle;
753 *
754 * 函数功能描述:以(x1,y1)和(x2,y2)为对角点画矩形实体;
755 *
756 * 输入参数:BYTE类型坐标x1,y1,x2,y2; bool类型标识flag;
757 *
758 * 返回数据:none;
759 *
760 * 注意: none;
761 ************************************************************************************/
762
763 void LCD_Draw_FillRectangle(BYTE x1,y1,x2,y2, bool flag)
764 {
765 1 R_BYTE i;
766 1 for (i=x1; i<=x2; i++)
767 1 LCD_Draw_line(i,y1,i,y2,flag);
768 1 }
769
770 /***********************************************************************************
771 * 函数名称:LCD_Draw_byte;
772 *
773 * 函数功能描述:向LCD写一个字节数据;
774 *
775 * 输入参数:BYTE类型坐标x,y;BYTE类型字节数据value;
776 *
777 * 返回数据:none;
778 *
779 * 注意: none;
780 ************************************************************************************/
781
782 void LCD_Draw_byte(BYTE x,y, BYTE value)
783 {
784 1 R_BYTE temp,bit_x;
785 1
786 1 bit_x=y%8;
787 1 y=y/8;
788 1
789 1 if (bit_x==0)
790 1 lcd_wrda(x,y,value);
791 1 else
792 1 {
793 2 temp=lcd_rdda(x,y);
794 2
795 2 temp&=(0xff>>(8-bit_x));
796 2 temp|=(value<<bit_x);
797 2 lcd_wrda(x,y,temp);
798 2
799 2 temp=lcd_rdda(x,y+1);
C51 COMPILER V7.06 LCD 04/22/2005 13:32:48 PAGE 14
800 2 temp&=(0xff<<bit_x);
801 2 temp|=(value>>(8-bit_x));
802 2 lcd_wrda(x,y+1,temp);
803 2 }
804 1 }
805
806 /***********************************************************************************
807 * 函数名称:LCD_Disp_Word;
808 *
809 * 函数功能描述:向LCD写一组数据,显示黑字符;
810 *
811 * 输入参数:BYTE类型写入起始坐标x,y; BYTE类型写入数据code区指针p;
812 * BYTE类型占用空间line*8行,length列
813 *
814 * 返回数据:none;
815 *
816 * 注意: none;
817 ************************************************************************************/
818
819 void LCD_Disp_Word(BYTE x,y,BYTE code *p,BYTE line,length)
820 {
821 1 R_BYTE i,j;
822 1
823 1 y+=(4<<line);
824 1 if (y>64)
825 1 y=64;
826 1 y=64-y;
827 1
828 1 for (i=0; i<line; i++)
829 1 for (j=0; j<length; j++)
830 1 LCD_Draw_byte(x+j,y+i*8, *p++);
831 1
832 1 }
833
834 /***********************************************************************************
835 * 函数名称: LCD_Disp_Word_F;
836 *
837 * 函数功能描述:向LCD写一组数据,显示白字符;
838 *
839 * 输入参数:BYTE类型写入起始坐标x,y; BYTE类型写入数据code区指针p;
840 * BYTE类型占用空间line*8行,length列
841 *
842 * 返回数据:none;
843 *
844 * 注意: none;
845 ************************************************************************************/
846
847 void LCD_Disp_Word_F(BYTE x,y,BYTE code *p,BYTE line,length)
848 {
849 1 R_BYTE i,j;
850 1
851 1 y+=(4<<line);
852 1 if (y>64)
853 1 y=64;
854 1 y=64-y;
855 1
856 1 for (i=0; i<line; i++)
857 1 for (j=0; j<length; j++)
858 1 LCD_Draw_byte(x+j,y+i*8, ~(*p++));
859 1
860 1 }
861
C51 COMPILER V7.06 LCD 04/22/2005 13:32:48 PAGE 15
862 /***********************************************************************************
863 * 函数名称: LCD_Disp_Time;
864 *
865 * 函数功能描述:向LCD写一组数据,显示时间;
866 *
867 * 输入参数:BYTE类型写入起始坐标x,y; BYTE类型写入数据code区指针p;
868 * BYTE类型占用空间line*8行,length列
869 *
870 * 返回数据:none;
871 *
872 * 注意: none;
873 ************************************************************************************/
874
875 void LCD_Disp_Time(BYTE x,y,BYTE code *p,BYTE line,length)
876 {
877 1 R_BYTE i,j;
878 1
879 1 y+=(4<<line);
880 1 if (y>64)
881 1 y=64;
882 1 y=64-y;
883 1
884 1 for (i=0; i<line; i++)
885 1 for (j=0; j<length; j++)
886 1 LCD_Draw_byte(x+j,y+i*8, *p++);
887 1 }
888
889 /***********************************************************************************/
890 // 文件结束
891 /***********************************************************************************/
892
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 3791 ----
CONSTANT SIZE = 771 ----
XDATA SIZE = 8 64
PDATA SIZE = ---- ----
DATA SIZE = ---- 28
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -