12864_lcd.lst

来自「用单片机实现LCD显示字符和图形」· LST 代码 · 共 371 行 · 第 1/2 页

LST
371
字号
C51 COMPILER V7.09   12864_LCD                                                             04/14/2009 09:36:32 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE 12864_LCD
OBJECT MODULE PLACED IN 12864_LCD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 12864_LCD.c OMF2 OPTIMIZE(9,SIZE) BROWSE DEBUG

line level    source

   1          #include "reg52.h"
   2          #include "declare.h"
   3          unsigned char COUNT3,COUNT2,COUNT1,LCD_X,LCD_Y;
   4          /**********************************************************
   5          RT12864M LCD DISPLAY
   6          建立时间:2007年5月25号
   7          修改日期:2007年5月30号
   8          
   9          **********************************************************/
  10          void LCD_init(void)
  11            {                       //----先复位一下,然后再开始工作
  12   1         
  13   1              P2 &= ~LCD_RST      ; //p2_3-复位信号
  14   1              delay_nms(20)       ; //延时一会
  15   1              P2 |=  LCD_RST      ; 
  16   1              delay_nms(1)        ;
  17   1              P2 |=  LCD_PSB      ; //通讯方式为8位数据并口
  18   1              LCD_write_char(0x34,0);      //34H--扩充指令操作
  19   1              LCD_write_char(0x30,0);      //30H--基本指令操作
  20   1              LCD_write_char(0x01,0);      //显示清屏
  21   1          LCD_write_char(0x06,0);      //指定在资料写入或读取时,光标的移动方向
  22   1          LCD_write_char(0x0C,0);      //显示开,开显示,关光标,不闪烁
  23   1      //  LCD_write_char(0x80,0);      //显示光标移动设置
  24   1        }
  25          
  26          void LCD_en_write(void)        //EN端产生一个高电平脉冲,写LCD
  27            {
  28   1         
  29   1          P2 |= LCD_EN;    //EN=1
  30   1          delay_nus(1);
  31   1          P2 &= ~LCD_EN;   //EN=0
  32   1        }
  33          
  34          /*-----------------------------------------------------------------------
  35          LCD_write_char    : 中英文字符串显示函数
  36          LCD_write函数功能:当command=0时,向LCD写入数据,否则向LCD写
  37                             入命令
  38          输入参数:*s      :中英文字符串指针;
  39                    X、Y    : 显示字符串的位置,X:0-15,Y:0-1
  40                              LCD第一行显示寄存器地址:0X80-0X87
  41                                                  LCD第二行显示寄存器地址:0X90-0X9F
  42                                                  LCD第三行显示寄存器地址:0X88-0X8F
  43                              LCD第四行显示寄存器地址:0X98-0X9F
  44          -----------------------------------------------------------------------*/
  45          
  46          void LCD_write_char(unsigned char command,unsigned char data11)
  47            {
  48   1         unsigned char command_temp;
  49   1         unsigned char data_temp;        
  50   1          command_temp = command;
  51   1          data_temp = data11;//数据和命令都给临时积存器
  52   1              //接下来判断忙不忙呢?
  53   1          LCD_wait_Ready();
  54   1       //    LCD_BUSY();
  55   1           if (command == 0)//如果是命令
C51 COMPILER V7.09   12864_LCD                                                             04/14/2009 09:36:32 PAGE 2   

  56   1            {
  57   2                P2 &= ~LCD_EN; //EN=0高电平有效
  58   2                P2 |= LCD_RS;  //RS=1命令有效 
  59   2                P2 &= ~LCD_RW;      //RW=0写入LCD
  60   2                P0 = data_temp;   //send 8bit 把数据传给端口
  61   2                LCD_en_write();              //给一个脉冲,写入LCD
  62   2            }
  63   1          else 
  64   1            {
  65   2                P2 &= ~LCD_EN;  //EN=0
  66   2                P2 &= ~LCD_RS; //RS=0数据有效
  67   2                P2 &= ~LCD_RW; //RW=0  写      
  68   2                P0 = command_temp;//send command
  69   2                LCD_en_write();
  70   2            }
  71   1                P2 |=  LCD_RW; //read state
  72   1            P2 ^=  LCD_RS;    
  73   1        }
  74           
  75          
  76          
  77          void LCD_wait_Ready(void)                  //等待LCD空闲
  78            {
  79   1          P2 &= ~LCD_RS;                //RS=0
  80   1              P2 |= LCD_RW;                 //RW=1
  81   1          P2 |= LCD_EN;                 //EN=1
  82   1          while (!( P0&0x80 ) == 0);   
  83   1          P2 &= ~LCD_EN;                //EN=0
  84   1        }
  85          
  86          
  87             
  88          /*-----------------------------------------------------------------------
  89          LCD_set_xy        : 设置LCD显示的起始位置
  90          
  91          输入参数:x、y    : 显示字符串的位置,X:0-15,Y:0-4
  92                              LCD第一行显示寄存器地址:0X80-0X8F
  93                              LCD第一行显示寄存器地址:0XC0-0XCF
  94          
  95          编写日期          :2005
  96          最后修改日期      :2005        
  97          -----------------------------------------------------------------------*/
  98          
  99          
 100          void LCD_set_xy( unsigned char x, unsigned char y )
 101            {
 102   1          unsigned char address;
 103   1              switch(y)
 104   1              {
 105   2              case 0: 
 106   2                 address = 0x80 + x;
 107   2                  break; 
 108   2          case 1: 
 109   2                  address = 0x90 + x;
 110   2                      break; 
 111   2              case 2: 
 112   2                      address = 0x88 + x;
 113   2                      break; 
 114   2          case 3: 
 115   2                      address = 0x98 + x;
 116   2                      break; 
 117   2              default:address = 0x80 + x;
C51 COMPILER V7.09   12864_LCD                                                             04/14/2009 09:36:32 PAGE 3   

 118   2               }
 119   1      
 120   1          LCD_write_char( address, 0 );
 121   1              
 122   1        }
 123           
 124          /*-----------------------------------------------------------------------
 125          LCD_write_string  : 中英文字符串显示函数
 126          
 127          输入参数:*s      :英文字符串指针;
 128                    X、Y    : 显示字符串的位置 
 129          
 130          编写日期          :2005
 131          最后修改日期      :2005        
 132          -----------------------------------------------------------------------*/
 133          
 134          void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
 135            {
 136   1        LCD_set_xy( X, Y );
 137   1          while (*s) 
 138   1            {
 139   2              LCD_write_char( 0, *s );
 140   2                  s ++;
 141   2                      delay_nms(1);
 142   2                }
 143   1        }
 144          
 145          //----------------------------图形显示
 146          void PHOTO_DISP(const unsigned char *s) 
 147          { 
 148   1              COUNT3=0X02; 
 149   1              LCD_X=0X80; 
 150   1              for (;COUNT3!=0;COUNT3--) 
 151   1              { 
 152   2              LCD_Y=0X80; 
 153   2              COUNT2=0X20;//32 
 154   2              for (;COUNT2!=0;COUNT2--) 
 155   2                      { 
 156   3                      COUNT1=0X10;//16 
 157   3                      WR_READY(); 
 158   3                      for (;COUNT1!=0;COUNT1--) 
 159   3                              { 
 160   4      //                      send_data(*s++); 
 161   4                              LCD_write_char(0,*s++);
 162   4                              } 
 163   3                      LCD_Y+=1; 
 164   3                      } 
 165   2                      LCD_X=0X88; 
 166   2              } 
 167   1      
 168   1              LCD_write_char(0x36,0);
 169   1              LCD_write_char(0x30,0);
 170   1      } 
 171          
 172          //********************************************************************
 173          

⌨️ 快捷键说明

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