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