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

📄 display.lst

📁 通过车载终端采集GPS数据
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.09   DISPLAY                                                               09/25/2008 11:56:15 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE DISPLAY
OBJECT MODULE PLACED IN .\output\bin\display.obj
COMPILER INVOKED BY: C:\Keil709\C51\BIN\C51.EXE menu\display.c LARGE BROWSE INCDIR(audio\;eeprom\;extendUART\;flash\;gps
                    -\;inter\;key\;mcu\;menu\;usb\;gprs\;main\;1wire\) DEBUG OBJECTEXTEND PRINT(.\output\display.lst) OBJECT(.\output\bin\dis
                    -play.obj)

line level    source

   1          /*********************************************
   2          *LCD液晶显示程序
   3          *支持松山的CA12864K的串行接口LCD
   4          *此LCD支持8X4个汉字的显示。
   5          **********************************************/
   6          
   7          
   8          #include "w77e532.h"
   9          #include <intrins.h>
  10          
  11          #include "display.h"
  12          
  13          #define LCD_WIDTH       16          /*液晶屏的列数*/
  14          #define LCD_LINES       4           /*液晶屏的行数*/
  15          #define LCD_SIZE        64          /*液晶屏的总字符数*/
  16          
  17          /************************/
  18          #define LCD_CMD_CLS     0x01    /*清屏命令*/
  19          #define LCD_CMD_ZERO    0x02    /*显示位置清0*/
  20          #define LCD_CMD_INC     0x06    /*指定计数器增加*/
  21          #define LCD_CMD_NORMAL  0x0C    /*打开显示,无光标,显示正常*/
  22          #define LCD_CMD_REVERSE 0x0D    /*打开显示,无光标,反显*/
  23          #define LCD_CMD_BASE    0x10    /*采用基本指令集*/
  24          #define LCD_CMD_CGRAM   0x40    /*设置自定义字库的位置*/
  25          #define LCD_CMD_DDRAM   0x80    /*设置显示位置*/
  26          
  27          unsigned char code bitmap_gps_up[16][2]={{0x00,0x00},{0x01,0x00},{0x01,0x04},{0x01,0x88},
  28                                                                          {0x10,0x90},{0x30,0x20},{0x3f,0x80},{0x30,0xb0},
  29                                                                          {0x18,0x9c},{0x18,0x80},{0x3e,0x80},{0x37,0xe0},
  30                                                                          {0x21,0xc0},{0x38,0x00},{0x7e,0x00},{0x00,0x00}};
  31          unsigned char code bitmap_gprs_up[16][2]={{0x00,0x00},{0x00,0x00},{0x20,0x80},{0x40,0x40},
  32                                                                          {0x40,0x44},{0x51,0x44},{0x4a,0x44},{0x44,0x54},
  33                                                                          {0x24,0x94},{0x04,0x14},{0x04,0x54},{0x04,0x54},
  34                                                                          {0x04,0x54},{0x0e,0x54},{0x3f,0xd4},{0x00,0x00}};
  35          unsigned char code bitmap_message[16][2]={{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x7f,0xfc},
  36                                                                          {0x60,0x0c},{0x50,0x14},{0x48,0x24},{0x44,0x44},
  37                                                                          {0x4a,0xa4},{0x49,0x24},{0x50,0x14},{0x50,0x14},
  38                                                                          {0x60,0x0c},{0x7f,0xfc},{0x00,0x00},{0x00,0x00}};
  39          unsigned char code bitmap_warning[16][2]={{0x00,0x00},{0x00,0x00},{0x01,0x80},{0x03,0xc0},
  40                                          {0x06,0x60},{0x0c,0x30},{0x18,0x18},{0x30,0x0c},
  41                                          {0x60,0x06},{0x7f,0xfe},{0x0c,0x30},{0x04,0x20},
  42                                          {0x06,0x60},{0x03,0xc0},{0x00,0x00},{0x00,0x00}};
  43          
  44          
  45          
  46          #if 1
  47          #define LCD_SDA P3_4
  48          #define LCD_SCL P3_5
  49          
  50          #define LCD_HIGH    {                                           \
  51                                  LCD_SCL=0;                /*SCL=0*/   \
  52                                  _nop_();_nop_();_nop_();                \
  53                                  LCD_SDA=1;             /*SCL=0,SDA=1*/ \
C51 COMPILER V7.09   DISPLAY                                                               09/25/2008 11:56:15 PAGE 2   

  54                                  LCD_SCL=1;                 /*SCL=1*/   \
  55                                  _nop_();_nop_();_nop_();                \
  56                              }
  57          
  58          #define LCD_LOW     {                                           \
  59                                  LCD_SCL=0;                /*SCL=0*/   \
  60                                  _nop_();_nop_();_nop_();                \
  61                                  LCD_SDA=0;             /*SCL=0,SDA=0*/\
  62                                  LCD_SCL=1;                 /*SCL=1*/   \
  63                                  _nop_();_nop_();_nop_();                \
  64                              }
  65          
  66          #else
              #define LCD_HIGH    {                                           \
                                      P4 &= ~0x01;                /*SCL=0*/   \
                                      _nop_();_nop_();_nop_();                \
                                      P4 |= 0x02;             /*SCL=0,SDA=1*/ \
                                      P4 |= 0x01;                 /*SCL=1*/   \
                                      _nop_();_nop_();_nop_();                \
                                  }
              
              #define LCD_LOW     {                                           \
                                      P4 &= ~0x01;                /*SCL=0*/   \
                                      _nop_();_nop_();_nop_();                \
                                      P4 &= ~0x03;             /*SCL=0,SDA=0*/\
                                      P4 |= 0x01;                 /*SCL=1*/   \
                                      _nop_();_nop_();_nop_();                \
                                  }
              
              #endif
  84          
  85          
  86          /********************************以上是与具体的液晶屏驱动程序*****************************/
  87          
  88          void lcd_delay(void)
  89          {
  90   1          unsigned int loop;
  91   1      
  92   1          loop = 10000;
  93   1          while(loop) loop--;
  94   1      }
  95          
  96          
  97          void lcd_serial_send(unsigned char value)
  98          {
  99   1          unsigned char i;
 100   1      
 101   1          for(i=0; i<8; i++)
 102   1          {
 103   2              if( value & 0x80 )
 104   2                  LCD_HIGH
 105   2              else
 106   2                  LCD_LOW
 107   2      
 108   2              value <<= 1;
 109   2          }
 110   1      //lcd_delay();
 111   1      }
 112          
 113          void lcd_write_command(unsigned char value)
 114          {
 115   1          unsigned char tmp;
C51 COMPILER V7.09   DISPLAY                                                               09/25/2008 11:56:15 PAGE 3   

 116   1      
 117   1          lcd_serial_send(0xF8);  /*RW=0, RS=0*/
 118   1      
 119   1          tmp = value & 0xF0;
 120   1          lcd_serial_send(tmp);
 121   1          tmp = (value & 0x0F) * 16;
 122   1          lcd_serial_send(tmp);
 123   1      //lcd_delay();
 124   1      }
 125          
 126          void lcd_write_data(unsigned char value)
 127          {
 128   1          unsigned char tmp;
 129   1      
 130   1          lcd_serial_send(0xFA);  /*RW=0, RS=0*/
 131   1      
 132   1          tmp = value & 0xF0;
 133   1          lcd_serial_send(tmp);
 134   1          tmp = (value & 0x0F) * 16;
 135   1          lcd_serial_send(tmp);
 136   1      }
 137          
 138          void lcd_set_cgram_site(unsigned char lcd_col,unsigned char lcd_line)   // set gdram address to AC,bit7=1,bi
             -t6~0:address
 139          {                                       // need set RE=1 to extern command mode, first set y_addr(AC6...AC0),then set x_addr(AC3...AC0)
 140   1              unsigned char lcd_site;
 141   1              if(lcd_col==0)
 142   1                      lcd_site=0x40;
 143   1              if(lcd_col==1)
 144   1                      lcd_site=0x50;
 145   1              if(lcd_col==2)
 146   1                      lcd_site=0x60;
 147   1              if(lcd_col==3)
 148   1                      lcd_site=0x70;
 149   1      
 150   1              lcd_write_command(lcd_site | lcd_line);
 151   1      //lcd_delay();
 152   1      }
 153          
 154          /*向自定义字库中写入点阵数据,一共有4个自定义字,每个字32个字节*/
 155          /*void lcd_write_cgram(char index, char *ptr)
 156          {
 157              unsigned char i;
 158          
 159              for(i=0; i<32; i++)
 160              {
 161          
 162              }
 163          }
 164          */
 165          
 166          /****************************************************
 167          *移动显示位置到指定的行和列
 168          *column 0-15列
 169          *line   0-3行
 170          *flag   0:正常显示,1:反显
 171          *****************************************************/
 172          static volatile unsigned char display_column,display_row, display_flag;
 173          static char displayBuffer[16*4];
 174          static char *dispBufPtr;
 175          char display_attribute(unsigned char column, unsigned char row, unsigned char flag)
 176          {
C51 COMPILER V7.09   DISPLAY                                                               09/25/2008 11:56:15 PAGE 4   

 177   1          unsigned char tmp;
 178   1      
 179   1          if( (column >= LCD_WIDTH) || (row >= LCD_LINES) )
 180   1              return(-1);
 181   1      
 182   1          display_column = column;
 183   1          display_row = row;
 184   1      
 185   1          switch( row )
 186   1          {
 187   2              case 0:
 188   2                  tmp = 0;
 189   2                  break;
 190   2      
 191   2              case 1:
 192   2                  tmp = 0x10;
 193   2                  break;
 194   2      
 195   2              case 2:
 196   2                  tmp = 8;
 197   2                  break;
 198   2      
 199   2              case 3:
 200   2              default:
 201   2                  tmp = 0x18;
 202   2                  break;
 203   2          }
 204   1      
 205   1          tmp |= (column>>1) | LCD_CMD_DDRAM;
 206   1      
 207   1          lcd_write_command(tmp);
 208   1          dispBufPtr = displayBuffer + display_row*16 + (display_column&0xFE);
 209   1      
 210   1          display_flag = flag;

⌨️ 快捷键说明

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