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

📄 nokia_5110.lst

📁 诺基亚5110液晶屏幕的资料和典型驱动程序。
💻 LST
字号:
C51 COMPILER V7.10   NOKIA_5110                                                            05/09/2007 19:46:55 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE NOKIA_5110
OBJECT MODULE PLACED IN nokia_5110.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE nokia_5110.c LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          
   3          #include "nokia_5110.h"
   4          #include "english_6x8_pixel.h"
   5          #include "write_chinese_string_pixel.h"
   6          #include "move_chinese_string_pixel.h"
   7          
   8          
   9          /*-----------------------------------------------------------------------
  10          LCD_init          : 3310LCD初始化
  11          
  12          编写日期          :2004-8-10 
  13          最后修改日期      :2004-8-10 
  14          -----------------------------------------------------------------------*/
  15          
  16          void delay_1us(void)                 //1us延时函数
  17            {
  18   1         unsigned int i;
  19   1        for(i=0;i<1000;i++);
  20   1        }
  21          
  22            void delay_1ms(void)                 //1ms延时函数
  23            {
  24   1         unsigned int i;
  25   1         for (i=0;i<1140;i++);
  26   1        }
  27            
  28          void delay_nms(unsigned int n)       //N ms延时函数
  29            {
  30   1         unsigned int i=0;
  31   1         for (i=0;i<n;i++)
  32   1         delay_1ms();
  33   1        }
  34          
  35          
  36          void LCD_init(void)
  37            {
  38   1                  // 产生一个让LCD复位的低电平脉冲
  39   1         LCD_RST = 0;
  40   1          delay_1us();
  41   1      
  42   1         LCD_RST = 1;
  43   1          
  44   1                      // 关闭LCD
  45   1         LCD_CE = 0;
  46   1          delay_1us();
  47   1                      // 使能LCD
  48   1         LCD_CE = 1;
  49   1          delay_1us();
  50   1      
  51   1          LCD_write_byte(0x21, 0);    // 使用扩展命令设置LCD模式
  52   1          LCD_write_byte(0xc8, 0);    // 设置偏置电压
  53   1          LCD_write_byte(0x06, 0);    // 温度校正
  54   1          LCD_write_byte(0x13, 0);    // 1:48
  55   1          LCD_write_byte(0x20, 0);    // 使用基本命令
C51 COMPILER V7.10   NOKIA_5110                                                            05/09/2007 19:46:55 PAGE 2   

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

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

 180          void chinese_string (unsigned char X, unsigned char Y, unsigned char T)
 181            {
 182   1          unsigned char i,n,j=0;
 183   1          unsigned char buffer_h[84]={0};
 184   1          unsigned char buffer_l[84]={0};
 185   1            
 186   1          for (i=0; i<156; i++)
 187   1            {
 188   2              buffer_h[83] = move_chinese_string[i/12][j];
 189   2              buffer_l[83] = move_chinese_string[i/12][j+12];
 190   2              j++;
 191   2              if (j==12) j=0;
 192   2              
 193   2              for (n=0; n<83; n++)
 194   2                { 
 195   3                  buffer_h[n]=buffer_h[n+1];
 196   3                  buffer_l[n]=buffer_l[n+1];
 197   3                } 
 198   2              
 199   2              LCD_set_XY(X,Y);
 200   2              for (n=0; n<83; n++)
 201   2                { 
 202   3                  LCD_write_byte(buffer_h[n],1);
 203   3                } 
 204   2              
 205   2              LCD_set_XY(X,Y+1); 
 206   2              for (n=0; n<83; n++)
 207   2                { 
 208   3                  LCD_write_byte(buffer_l[n],1);
 209   3                } 
 210   2                
 211   2             delay_nms(T);
 212   2            }
 213   1      }
 214          
 215          /*-----------------------------------------------------------------------
 216          LCD_draw_map      : 位图绘制函数
 217          
 218          输入参数:X、Y    :位图绘制的起始X、Y坐标;
 219                    *map    :位图点阵数据;
 220                    Pix_x   :位图像素(长)
 221                    Pix_y   :位图像素(宽)
 222          
 223          编写日期          :2004-8-13
 224          最后修改日期      :2004-8-13 
 225          -----------------------------------------------------------------------*/
 226          void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
 227                            unsigned char Pix_x,unsigned char Pix_y)
 228            {
 229   1          unsigned int i,n;
 230   1          unsigned char row;
 231   1          
 232   1          if (Pix_y%8==0) row=Pix_y/8;      //计算位图所占行数
 233   1            else
 234   1              row=Pix_y/8+1;
 235   1          
 236   1          for (n=0;n<row;n++)
 237   1            {
 238   2              LCD_set_XY(X,Y);
 239   2              for(i=0; i<Pix_x; i++)
 240   2                {
 241   3                  LCD_write_byte(map[i+n*Pix_x], 1);
C51 COMPILER V7.10   NOKIA_5110                                                            05/09/2007 19:46:55 PAGE 5   

 242   3                }
 243   2              Y++;                         //换行
 244   2            }      
 245   1        }
 246          
 247          /*-----------------------------------------------------------------------
 248          LCD_write_byte    : 使用SPI接口写数据到LCD
 249          
 250          输入参数:data    :写入的数据;
 251                    command :写数据/命令选择;
 252          
 253          编写日期          :2004-8-10 
 254          最后修改日期      :2004-8-13 
 255          -----------------------------------------------------------------------*/
 256          void LCD_write_byte(unsigned char dat, unsigned char command)
 257            {
 258   1          unsigned char i;
 259   1          //PORTB &= ~LCD_CE ;                        // 使能LCD
 260   1          LCD_CE = 0;
 261   1          
 262   1          if (command == 0)
 263   1           // PORTB &= ~LCD_DC ;              // 传送命令
 264   1           LCD_DC = 0;
 265   1          else
 266   1           // PORTB |= LCD_DC ;                       // 传送数据
 267   1           LCD_DC = 1;
 268   1                      for(i=0;i<8;i++)
 269   1                      {
 270   2                              if(dat&0x80)
 271   2                                      SDIN = 1;
 272   2                              else
 273   2                                      SDIN = 0;
 274   2                              SCLK = 0;
 275   2                              dat = dat << 1;
 276   2                              SCLK = 1;
 277   2                      }
 278   1         // SPDR = data;                      // 传送数据到SPI寄存器
 279   1      
 280   1          //while ((SPSR & 0x80) == 0);         // 等待数据传送完毕
 281   1              
 282   1          //PORTB |= LCD_CE ;                 // 关闭LCD
 283   1           LCD_CE = 1;
 284   1        }
 285          
 286          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1111    ----
   CONSTANT SIZE    =   1176    ----
   XDATA SIZE       =   ----     202
   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 + -