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

📄 lcd.lst

📁 本程序是基于单片机C8051F020上使用SL811 USB 总线接口实现检测U 盘的功能。插上U 盘
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -