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

📄 3310lcd_function.lst

📁 诺基亚3310驱动代码,可以显示图片和文字,直接移植就可以了51上面已经测试通过
💻 LST
字号:
C51 COMPILER V7.50   3310LCD_FUNCTION                                                      06/22/2008 14:16:05 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 3310LCD_FUNCTION
OBJECT MODULE PLACED IN 3310LCD_function.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 3310LCD_function.c LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          #include "3310LCD_function.h"
   4          #include "english_6x8_pixel.h"
   5          #include "write_chinese_string_pixel.h"
   6          #include "move_chinese_string_pixel.h"
   7          
   8          unsigned char xdata buffer_h[85];
   9          unsigned char xdata  buffer_l[85];
  10          
  11          /*-----------------------------------------------------------------------
  12          LCD_init          : 3310LCD初始化
  13          
  14          编写日期          :2004-8-10 
  15          最后修改日期      :2004-8-10 
  16          -----------------------------------------------------------------------*/
  17          void LCD_init(void)
  18            {
  19   1         unsigned char i;
  20   1          P0 &= ~LCD_RST;          // 产生一个让LCD复位的低电平脉冲
  21   1          delay_1us();
  22   1          P0 |= LCD_RST;
  23   1          
  24   1          P0 &= ~LCD_CE ;             // 关闭LCD
  25   1          delay_1us();
  26   1          P0 |= LCD_CE;               // 使能LCD
  27   1          delay_1us();
  28   1      
  29   1          LCD_write_byte(0x21, 0);    // 使用扩展命令设置LCD模式
  30   1          LCD_write_byte(0xc8, 0);    // 设置偏置电压
  31   1          LCD_write_byte(0x06, 0);    // 温度校正
  32   1          LCD_write_byte(0x13, 0);    // 1:48
  33   1          LCD_write_byte(0x20, 0);    // 使用基本命令
  34   1          LCD_clear();                // 清屏
  35   1          LCD_write_byte(0x0c, 0);    // 设定显示模式,正常显示
  36   1              
  37   1          P0 &= ~LCD_CE ;          // 关闭LCD
  38   1            for(i=0;i<85;i++)
  39   1              {
  40   2               buffer_h[i]=0;
  41   2                       buffer_l[i]=0;
  42   2              }
  43   1        }
  44          
  45          /*-----------------------------------------------------------------------
  46          LCD_clear         : LCD清屏函数
  47          
  48          编写日期          :2004-8-10 
  49          最后修改日期      :2004-8-10 
  50          -----------------------------------------------------------------------*/
  51          void LCD_clear(void)
  52            {
  53   1          unsigned int i;
  54   1      
  55   1          LCD_write_byte(0x0c, 0);                    
C51 COMPILER V7.50   3310LCD_FUNCTION                                                      06/22/2008 14:16:05 PAGE 2   

  56   1          LCD_write_byte(0x80, 0);                    
  57   1      
  58   1          for (i=0; i<504; i++)
  59   1            LCD_write_byte(0, 1);                     
  60   1        }
  61          
  62          /*-----------------------------------------------------------------------
  63          LCD_set_XY        : 设置LCD坐标函数
  64          
  65          输入参数:X       :0-83
  66                    Y       :0-5
  67          
  68          编写日期          :2004-8-10 
  69          最后修改日期      :2004-8-10 
  70          -----------------------------------------------------------------------*/
  71          void LCD_set_XY(unsigned char X, unsigned char Y)
  72            {
  73   1          LCD_write_byte(0x40 | Y, 0);                // column
  74   1          LCD_write_byte(0x80 | X, 0);                // row
  75   1        }
  76          
  77          /*-----------------------------------------------------------------------
  78          LCD_write_char    : 显示英文字符
  79          
  80          输入参数:c       :显示的字符;
  81          
  82          编写日期          :2004-8-10 
  83          最后修改日期      :2004-8-10 
  84          -----------------------------------------------------------------------*/
  85          void LCD_write_char(unsigned char c)
  86            {
  87   1          unsigned char line;
  88   1      
  89   1          c -= 32;
  90   1      
  91   1          for (line=0; line<6; line++)
  92   1            LCD_write_byte(font6x8[c][line], 1);
  93   1        }
  94          
  95          /*-----------------------------------------------------------------------
  96          LCD_write_english_String  : 英文字符串显示函数
  97          
  98          输入参数:*s      :英文字符串指针;
  99                    X、Y    : 显示字符串的位置,x 0-83 ,y 0-5
 100          
 101          编写日期          :2004-8-10 
 102          最后修改日期      :2004-8-10           
 103          -----------------------------------------------------------------------*/
 104          void LCD_write_english_string(unsigned char X,unsigned char Y,unsigned char Num,char *s)
 105            {
 106   1          LCD_set_XY(X,Y);
 107   1         // while (*s) 
 108   1         while(Num>0)
 109   1            {
 110   2               LCD_write_char(*s);
 111   2               s++;
 112   2               Num--;
 113   2            }
 114   1        }
 115          /*-----------------------------------------------------------------------
 116          LCD_write_chinese_string: 在LCD上显示汉字
 117          
C51 COMPILER V7.50   3310LCD_FUNCTION                                                      06/22/2008 14:16:05 PAGE 3   

 118          输入参数:X、Y    :显示汉字的起始X、Y坐标;
 119                    ch_with :汉字点阵的宽度
 120                    num     :显示汉字的个数;  
 121                    line    :汉字点阵数组中的起始行数
 122                    row     :汉字显示的行间距
 123          编写日期          :2004-8-11 
 124          最后修改日期      :2004-8-12 
 125          测试:
 126                  LCD_write_chi(0,0,12,7,0,0);
 127                  LCD_write_chi(0,2,12,7,0,0);
 128                  LCD_write_chi(0,4,12,7,0,0);    
 129          -----------------------------------------------------------------------*/                        
 130          void LCD_write_chinese_string(unsigned char X, unsigned char Y, 
 131                             unsigned char ch_with,unsigned char num,
 132                             unsigned char line,unsigned char row)
 133            {
 134   1          unsigned char i,n;
 135   1          
 136   1          LCD_set_XY(X,Y);                             //设置初始位置
 137   1          
 138   1          for (i=0;i<num;)
 139   1            {
 140   2              for (n=0; n<ch_with*2; n++)              //写一个汉字
 141   2                { 
 142   3                  if (n==ch_with)                      //写汉字的下半部分
 143   3                    {
 144   4                      if (i==0) LCD_set_XY(X,Y+1);
 145   4                      else
 146   4                         LCD_set_XY((X+(ch_with+row)*i),Y+1);
 147   4                    }
 148   3                  LCD_write_byte(write_chinese_string[line+i][n],1);
 149   3                }
 150   2              i++;
 151   2              LCD_set_XY((X+(ch_with+row)*i),Y);
 152   2            }
 153   1        }
 154            
 155          /*-----------------------------------------------------------------------
 156          LCD_move_chinese_string: 汉字移动
 157          
 158          输入参数:X、Y    :显示汉字的起始X、Y坐标;
 159                    T       :移动速度;
 160          
 161          编写日期          :2004-8-13 
 162          最后修改日期      :2004-8-13 
 163          -----------------------------------------------------------------------*/                        
 164          void LCD_move_chinese_string (unsigned char X, unsigned char Y, unsigned char T)
 165            {
 166   1          unsigned char i,n,j=0;
 167   1      
 168   1          for (i=0; i<102; i++)
 169   1            {
 170   2              buffer_h[84] = move_chinese_string[i/12][j];
 171   2              buffer_l[84] = move_chinese_string[i/12][j+12];
 172   2              j++;
 173   2              if (j==12) j=0;
 174   2              
 175   2              for (n=0; n<84; n++)
 176   2                { 
 177   3                  buffer_h[n]=buffer_h[n+1];
 178   3                  buffer_l[n]=buffer_l[n+1];
 179   3                } 
C51 COMPILER V7.50   3310LCD_FUNCTION                                                      06/22/2008 14:16:05 PAGE 4   

 180   2              
 181   2              LCD_set_XY(X,Y);
 182   2              for (n=0; n<84; n++)
 183   2                { 
 184   3                  LCD_write_byte(buffer_h[n],1);
 185   3                } 
 186   2              
 187   2              LCD_set_XY(X,Y+1); 
 188   2              for (n=0; n<84; n++)
 189   2                { 
 190   3                  LCD_write_byte(buffer_l[n],1);
 191   3                } 
 192   2                
 193   2             delay_nms(T);
 194   2            }
 195   1        }
 196          
 197          /*-----------------------------------------------------------------------
 198          LCD_draw_map      : 位图绘制函数
 199          
 200          输入参数:X、Y    :位图绘制的起始X、Y坐标;
 201                    *map    :位图点阵数据;
 202                    Pix_x   :位图像素(长)
 203                    Pix_y   :位图像素(宽)
 204          
 205          编写日期          :2004-8-13
 206          最后修改日期      :2004-8-13 
 207          -----------------------------------------------------------------------*/
 208          void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
 209                            unsigned char Pix_x,unsigned char Pix_y)
 210            {
 211   1          unsigned int i,n;
 212   1          unsigned char row;
 213   1          
 214   1          if (Pix_y%8==0) row=Pix_y/8;      //计算位图所占行数
 215   1            else
 216   1              row=Pix_y/8+1;
 217   1          
 218   1          for (n=0;n<row;n++)
 219   1            {
 220   2              LCD_set_XY(X,Y);
 221   2              for(i=0; i<Pix_x; i++)
 222   2                {
 223   3                  LCD_write_byte(map[i+n*Pix_x], 1);
 224   3                }
 225   2              Y++;                         //换行
 226   2            }      
 227   1        }
 228          
 229          /*-----------------------------------------------------------------------
 230          LCD_write_byte    : 使用SPI接口写数据到LCD
 231          
 232          输入参数:data    :写入的数据;
 233                    command :写数据/命令选择;
 234          
 235          编写日期          :2004-8-10 
 236          最后修改日期      :2004-8-13 
 237          -----------------------------------------------------------------------*/
 238          void LCD_write_byte(unsigned char Byte,unsigned char command)
 239          {
 240   1       unsigned char i;
 241   1       P0&=~LCD_CE;//使能LCD
C51 COMPILER V7.50   3310LCD_FUNCTION                                                      06/22/2008 14:16:05 PAGE 5   

 242   1       if(command==0)
 243   1       P0&=~LCD_DC;// 传送命令
 244   1       else P0|=LCD_DC;// 传送数据
 245   1       for(i=0;i<8;i++)
 246   1       {
 247   2        P0&=~SPI_CLK;
 248   2        if((Byte&0x80)==0)P0&=~SPI_MOSI;
 249   2        else P0|=SPI_MOSI;
 250   2        P0|=SPI_CLK;
 251   2        Byte<<=1;
 252   2       }
 253   1       P0|=LCD_CE;// 关闭LCD
 254   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1059    ----
   CONSTANT SIZE    =    864    ----
   XDATA SIZE       =    170      37
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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