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