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

📄 lcd12864.lst

📁 主要用于12864 液晶 OCMG4C8 显示汉字
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   LCD12864                                                              05/19/2009 15:36:03 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN LCD12864.OBJ
COMPILER INVOKED BY: D:\keilc51\C51\BIN\C51.EXE LCD12864.c LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include"C8051F020.h" //串行通信方式
   2          
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          
   6          #define comm  0
   7          #define dat   1
   8          
   9          uint table[8][64]={0};    // 不能写成 :uint code table[8][64]={0};     
  10          
  11          void delay (uint us)   //delay time
  12          {
  13   1        while(us--);
  14   1      }
  15          void delay1 (uint ms)
  16          {
  17   1              uint i,j;
  18   1              for(i=0;i<ms;i++)
  19   1              for(j=0;j<15;j++)
  20   1              delay(1);
  21   1      }
  22          
  23          //-------------------------------------------
  24          //-------------------------------------------
  25          void wr_lcd (uchar dat_comm,uchar content)
  26          {
  27   1              uchar a,i,j;
  28   1              delay (50);
  29   1              a=content;
  30   1              
  31   1              P3=P3|0x01;     //cs
  32   1              
  33   1              P3=P3&0xfb;     //sclk=0;
  34   1              P3=P3|0x02;     //std=1;                                         
  35   1              for(i=0;i<5;i++)
  36   1              {
  37   2                      P3=P3|0x04; //sclk=1;
  38   2                      P3=P3&0xfb;     //sclk=0;
  39   2              }
  40   1              
  41   1              P3=P3&0xfd;     //write                   /*RW*/
  42   1              P3=P3|0x04;     //sclk=1;
  43   1              P3=P3&0xfb;         //sclk=0;
  44   1              
  45   1              if(dat_comm)                                     
  46   1                      P3=P3|0x02;  //data                       /*RS*/
  47   1              else             //command
  48   1                      P3=P3&0xfd;             
  49   1              P3=P3|0x04;      //sclk=1;
  50   1              P3=P3&0xfb;          //sclk=0;
  51   1              
  52   1              P3=P3&0xfd;      //std=0;
  53   1              P3=P3|0x04;      //sclk=1;
  54   1              P3=P3&0xfb;          //sclk=0;
  55   1              
C51 COMPILER V8.02   LCD12864                                                              05/19/2009 15:36:03 PAGE 2   

  56   1              for(j=0;j<2;j++)
  57   1              {
  58   2                      for(i=0;i<4;i++)
  59   2                      {
  60   3                              a=a<<1; /*a:要显示的内容;或指令*/
  61   3                      
  62   3                              if(CY==1)P3=P3|0x02;  //std=1;   /*std=CY*/
  63   3                              else  P3=P3&0xfd;     //std=0;
  64   3                              
  65   3                              P3=P3|0x04;        //sclk=1;
  66   3                              P3=P3&0xfb;            //sclk=0;
  67   3                      }
  68   2                      for(i=0;i<4;i++)
  69   2                      {
  70   3                              P3=P3&0xfd;      //std=0;
  71   3                              P3=P3|0x04;      //sclk=1;
  72   3                              P3=P3&0xfb;          //sclk=0;
  73   3                      }
  74   2              }
  75   1      }
  76          void Locat_Dot(uchar x_loc, uchar y_loc) //参数是液晶上的坐标 0~127,0~63
  77          {
  78   1              uint dot_data;
  79   1       
  80   1              uchar Line,Column, move;
  81   1              uchar first,second;
  82   1              uchar x_axis, y_axis;
  83   1      
  84   1              y_axis  = 63-y_loc ;
  85   1          x_axis = x_loc/16;  
  86   1          Line   = y_axis;
  87   1      
  88   1               if(y_loc<16)  
  89   1               {
  90   2                      Column=0x18+x_axis;     
  91   2                      Line=31-Line;
  92   2              }
  93   1       
  94   1          if( (y_loc>16 )&&(y_loc>32))
  95   1              {
  96   2                Column=0x08+x_axis;
  97   2                Line=31-Line;
  98   2              }
  99   1              
 100   1              if((y_loc>=32)&&(y_loc<48))
 101   1              {
 102   2                Column=0x10+x_axis;
 103   2                Line=63-Line;
 104   2              }
 105   1      
 106   1              if(y_loc>=48)
 107   1              {
 108   2                      Column=0x00+x_axis;
 109   2                      Line=63-Line;
 110   2              }
 111   1      
 112   1              move = x_loc%16;  
 113   1              dot_data = 0x8000>>move;
 114   1              table[x_axis][y_axis] = table[x_axis][y_axis]|dot_data;
 115   1              dot_data = table[x_axis][y_axis]; 
 116   1              
 117   1              delay(100);
C51 COMPILER V8.02   LCD12864                                                              05/19/2009 15:36:03 PAGE 3   

 118   1              first  = dot_data/256;
 119   1              second = dot_data%256;
 120   1              delay(200);
 121   1              
 122   1              wr_lcd (comm,0x34);
 123   1              wr_lcd (comm,0x80+Line);  
 124   1              wr_lcd (comm,0x80+Column);
 125   1              wr_lcd (comm,0x30);
 126   1              wr_lcd (dat,first);
 127   1              wr_lcd (dat,second);
 128   1      
 129   1              wr_lcd (comm,0x36);
 130   1              delay(200);
 131   1      }
 132          
 133          
 134          void Line(uchar x1,uchar y1,uchar x2,uchar y2)
 135          { 
 136   1          char i,x,y;
 137   1              float y_add;
 138   1              x=x2-x1;
 139   1              y=y2-y1;
 140   1              if(x==0)
 141   1           {       
 142   2                       if(y>0)
 143   2                        {       for(i=0;i<y;i++)      
 144   3                    Locat_Dot(x1,y1+i);
 145   3                        }
 146   2                       else if(y==0)
 147   2                           Locat_Dot(x1,y1);
 148   2                       else
 149   2                        {   for(i=y;i<0;i++)  
 150   3                    Locat_Dot(x1,y1+i);
 151   3                        }
 152   2                }
 153   1              else 
 154   1                 y_add = y*1.000/x;
 155   1              if(x>0)
 156   1              {
 157   2                if(y_add <=1&&y_add>=-1)
 158   2                 {
 159   3                   for(i=0;i<x;i++)   
 160   3                    {  y=y1+y_add*i;
 161   4                          Locat_Dot(x1+i,y);
 162   4                    }
 163   3                 }
 164   2                else
 165   2                {
 166   3                  if(y>0)
 167   3                      {
 168   4                         for(i=0;i<y;i++)
 169   4                          {  x=x1+i/y_add;
 170   5                                Locat_Dot(x,y1+i);
 171   5                              }
 172   4                       }
 173   3                       else if(y==0)
 174   3                       {
 175   4                           for(i=0;i<x;i++)   
 176   4                           Locat_Dot(x1+i,y1);
 177   4                        }
 178   3                       else
 179   3                       {
C51 COMPILER V8.02   LCD12864                                                              05/19/2009 15:36:03 PAGE 4   

 180   4                          for(i=y;i<0;i++)
 181   4                          {  x=x1+i/y_add;
 182   5                                Locat_Dot(x,y1+i);
 183   5                              }
 184   4                       }
 185   3                } 
 186   2              }
 187   1         else if(x<0)
 188   1         {       
 189   2                if(y_add <=1&&y_add>=-1)
 190   2                {
 191   3                   for(i=x;i<0;i++)   
 192   3                    {  y=y1+y_add*i;
 193   4                          Locat_Dot(x1+i,y);
 194   4                    }
 195   3                }
 196   2                else
 197   2                {
 198   3                  if(y>0)
 199   3                      {
 200   4                         for(i=0;i<y;i++)
 201   4                          { x=x1+i/y_add;
 202   5                                Locat_Dot(x,y1+i);
 203   5                              }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -