⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.lst

📁 在单片机控制的液晶屏上显示汉字
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -