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

📄 nokia_5110.lst

📁 nokia5510 lcd 的8051单片机驱动代码
💻 LST
字号:
C51 COMPILER V7.06   NOKIA_5110                                                            02/16/2008 18:49:51 PAGE 1   


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

stmt 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.06   NOKIA_5110                                                            02/16/2008 18:49:51 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.06   NOKIA_5110                                                            02/16/2008 18:49:51 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          
 173          /*-----------------------------------------------------------------------
 174          LCD_draw_map      : 位图绘制函数
 175          
 176          输入参数:X、Y    :位图绘制的起始X、Y坐标;
 177                    *map    :位图点阵数据;
 178                    Pix_x   :位图像素(长)
 179                    Pix_y   :位图像素(宽)
C51 COMPILER V7.06   NOKIA_5110                                                            02/16/2008 18:49:51 PAGE 4   

 180          
 181          编写日期          :2004-8-13
 182          最后修改日期      :2004-8-13 
 183          -----------------------------------------------------------------------*/
 184          void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
 185                            unsigned char Pix_x,unsigned char Pix_y)
 186            {
 187   1          unsigned int i,n;
 188   1          unsigned char row;
 189   1          
 190   1          if (Pix_y%8==0) row=Pix_y/8;      //计算位图所占行数
 191   1            else
 192   1              row=Pix_y/8+1;
 193   1          
 194   1          for (n=0;n<row;n++)
 195   1            {
 196   2              LCD_set_XY(X,Y);
 197   2              for(i=0; i<Pix_x; i++)
 198   2                {
 199   3                  LCD_write_byte(map[i+n*Pix_x], 1);
 200   3                }
 201   2              Y++;                         //换行
 202   2            }      
 203   1        }
 204          
 205          /*-----------------------------------------------------------------------
 206          LCD_write_byte    : 使用SPI接口写数据到LCD
 207          
 208          输入参数:data    :写入的数据;
 209                    command :写数据/命令选择;
 210          
 211          编写日期          :2004-8-10 
 212          最后修改日期      :2004-8-13 
 213          -----------------------------------------------------------------------*/
 214          void LCD_write_byte(unsigned char dat, unsigned char command)
 215            {
 216   1          unsigned char i;
 217   1          //PORTB &= ~LCD_CE ;                        // 使能LCD
 218   1          LCD_CE = 0;
 219   1          
 220   1          if (command == 0)
 221   1           // PORTB &= ~LCD_DC ;              // 传送命令
 222   1           LCD_DC = 0;
 223   1          else
 224   1           // PORTB |= LCD_DC ;                       // 传送数据
 225   1           LCD_DC = 1;
 226   1                      for(i=0;i<8;i++)
 227   1                      {
 228   2                              if(dat&0x80)
 229   2                                      SDIN = 1;
 230   2                              else
 231   2                                      SDIN = 0;
 232   2                              SCLK = 0;
 233   2                              dat = dat << 1;
 234   2                              SCLK = 1;
 235   2                      }
 236   1         // SPDR = data;                      // 传送数据到SPI寄存器
 237   1      
 238   1          //while ((SPSR & 0x80) == 0);         // 等待数据传送完毕
 239   1              
 240   1          //PORTB |= LCD_CE ;                 // 关闭LCD
 241   1           LCD_CE = 1;
C51 COMPILER V7.06   NOKIA_5110                                                            02/16/2008 18:49:51 PAGE 5   

 242   1        }
 243          
 244          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    758    ----
   CONSTANT SIZE    =    840    ----
   XDATA SIZE       =   ----      28
   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 + -