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

📄 lcd12864.lst

📁 液晶WGM12864的驱动程序和显示
💻 LST
字号:
C51 COMPILER V7.50   LCD12864                                                              11/16/2007 13:50:57 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN lcd12864.obj
COMPILER INVOKED BY: E:\keil\C51\BIN\C51.EXE 程序\lcd12864.c BROWSE DEBUG OBJECTEXTEND PRINT(.\lcd12864.lst) OBJECT(lcd1
                    -2864.obj)

line level    source

   1          #include "lcd12864.h"
   2          
   3          
   4          void delay( int x )     //延时X乘10 个2ns
   5          {
   6   1             int i,j;
   7   1                 for(i = 0;i < x;i++)
   8   1                   {
   9   2                         for(j = 0;j < 10;j++);
  10   2                         }
  11   1        }
  12          
  13          /***********************************************************************
  14                  * * * * * * * * *   液晶写左半屏指令      * * * * * * * * * * 
  15          ***********************************************************************/
  16          void write_l_cmd(unsigned char cmd)
  17          {
  18   1          CSA = 0;//关闭右半屏
  19   1              CSB = 1;//选中左半屏
  20   1              DI = 0; //DB7~DB0送指令
  21   1              RW = 1; //指令在E下降沿到来时且RW下降沿有效时指令送入IR(指令寄存器)
  22   1              do{
  23   2                  dataline = 0xff;
  24   2                      E = 1;
  25   2                 }while( BUSY ); //等待液晶不忙
  26   1              E = 0;  //E下降沿到来(时序要求E下降沿先到)
  27   1              RW = 0; //RW下降沿到来
  28   1              dataline = cmd; //指令送入IR(指令寄存器)
  29   1              E = 1;  //此时RW=“H”,当E下降沿来时锁存DB7~DB0
  30   1              delay( 5 ); //E高电平450ns要求
  31   1              E = 0;  //E下降沿到来
  32   1        }
  33          
  34          /***********************************************************************
  35                  * * * * * * * * *   液晶写右半屏指令      * * * * * * * * * * 
  36          ***********************************************************************/
  37          void write_r_cmd(unsigned char cmd)
  38          {
  39   1           CSA = 1;//选中右半屏
  40   1               CSB = 0;//关闭左半屏
  41   1               DI = 0; //DB7~DB0送指令
  42   1               RW = 1; //指令在E下降沿到来时且RW下降沿有效时指令送入IR(指令寄存器)
  43   1               do{
  44   2                     dataline = 0xff;
  45   2                         E = 1;
  46   2                      }while( BUSY );//等待液晶不忙
  47   1               E = 0;         //E下降沿到来(时序要求E下降沿先到)
  48   1               RW = 0;        //RW下降沿到来
  49   1               dataline = cmd; //指令送入IR(指令寄存器)
  50   1               E = 1; //此时RW=“H”,当E下降沿来时锁存DB7~DB0
  51   1               delay( 5 );    //E高电平450ns要求
  52   1               E = 0; //E下降沿到来
  53   1       }
  54           
C51 COMPILER V7.50   LCD12864                                                              11/16/2007 13:50:57 PAGE 2   

  55          /***********************************************************************
  56                  * * * * * * * * *   液晶写左半屏数据      * * * * * * * * * * 
  57          ***********************************************************************/
  58          void write_l_dat( unsigned char dat )
  59          {
  60   1           CSA = 0;//关闭右半屏
  61   1               CSB = 1;//选中左半屏    
  62   1               DI = 0; //DI="L",DB7~DB0为指令数据      
  63   1               RW = 1; //E="H",RW="H",数据被读到DB7~DB0
  64   1               do{
  65   2                      dataline = 0xff;
  66   2                              E=1;
  67   2                      }while(BUSY);//等待液晶不忙
  68   1               E = 0; //先置E为低,为后面时序做准备
  69   1               DI = 1; //DI="H",DB7~DB0为显示数据
  70   1               RW = 0;
  71   1               dataline = dat;  //RW="L",E="H"--"L"数据送入DR(数据寄存器)
  72   1               E = 1;
  73   1               delay( 5 ); //E高电平450ns要求
  74   1               E = 0;
  75   1       }
  76          
  77          /***********************************************************************
  78                  * * * * * * * * *   液晶写右半屏数据      * * * * * * * * * * 
  79          ***********************************************************************/
  80          void write_r_dat( unsigned char dat )
  81          {
  82   1           CSA = 1;//选中右半屏
  83   1               CSB = 0;//关闭左半屏
  84   1               DI = 0;
  85   1               RW = 1;
  86   1               do{
  87   2                      dataline = 0xff;
  88   2                              E = 1;
  89   2                         
  90   2               }while( BUSY );
  91   1               E = 0;
  92   1               DI = 1;
  93   1               RW = 0;
  94   1               dataline = dat;
  95   1               E = 1;
  96   1               delay( 5 );
  97   1               E = 0;
  98   1       }
  99           /***********************************************************************
 100                  * * * * * * * * *   液晶写全屏数据      * * * * * * * * * * 
 101          ***********************************************************************/
 102          void write_dat( unsigned char xpos,unsigned char ypos,unsigned char lcddata )
 103          {       //定义xpos:数据显示行起始地址;ypos:数据显示列起始地址;lcddata:显示数据
 104   1          if( ( xpos & 0x40 ) == 0 ) //0x40=64,它是左半屏的结束地址
 105   1                {
 106   2                     write_l_cmd( 0xb8 | ypos );
 107   2                         write_l_cmd( 0x40 | xpos );
 108   2                         write_l_dat( lcddata );
 109   2                      }
 110   1              else
 111   1                {
 112   2                     write_r_cmd( 0xb8 | ypos );
 113   2                         write_r_cmd( 0x40 | xpos );
 114   2                         write_r_dat( lcddata );
 115   2                      }
 116   1        } 
C51 COMPILER V7.50   LCD12864                                                              11/16/2007 13:50:57 PAGE 3   

 117          /***********************************************************************
 118                  * * * * * * * * *   液晶汉字显示控制      * * * * * * * * * * 
 119          ***********************************************************************/
 120          void hz_disp( unsigned char x,unsigned char y,unsigned char *hz)
 121          {
 122   1         unsigned char i;
 123   1         for( i = 0;i < 16;i++ )      //定义一个字符显示长宽为16x16
 124   1          {
 125   2                write_dat( x+i,y,hz[i] );              //程序按照行列显示,循环16次共16列
 126   2                write_dat( x+i,y+1,hz[16+i] );
 127   2               }
 128   1      }
 129          
 130          
 131          /***********************************************************************
 132                  * * * * * * * * *   液晶显示12864图片    * * * * * * * * * * 
 133          ***********************************************************************/
 134          void disp_img(unsigned char code *img)
 135          {                                                                                
 136   1          unsigned char j,k,page = 0; 
 137   1          for( k = 0; k < 8; k++ )   //注,显示图片时,一页为整个屏的一行
 138   1          {   
 139   2              page = k;
 140   2              page |= 0xb8;
 141   2              write_l_cmd( page );
 142   2              write_l_cmd( 0x40 );
 143   2              for( j = 0; j < 64; j++ )
 144   2                      write_l_dat(img[k*128+j]);
 145   2              write_r_cmd( page );
 146   2              write_r_cmd( 0x40 );
 147   2              for(j=64;j<128;j++) 
 148   2                      write_r_dat(img[k*128+j]);
 149   2          }
 150   1      }
 151          
 152          /***********************************************************************
 153                  * * * * * * * * *   液晶清屏控制      * * * * * * * * * * 
 154          ***********************************************************************/
 155          void lcd_clr( void )
 156          {
 157   1          unsigned char i,n,page;       //液晶8行为一页,模块共64行8页
 158   1              for( i = 0;i < 8;i++ )
 159   1               {
 160   2                   page = i;
 161   2                       page |= 0xb8;  //页地址是"1 0 1 1 1 A2 A1 A0" A2~A0表示0~7页
 162   2                       write_l_cmd( page );
 163   2                       write_l_cmd( 0x40 );
 164   2                           for( n = 0;n < 64;n++ )    //从第0页开始,对左半屏地址0X00~0X40,64个地址置0
 165   2                               {
 166   3                                      write_l_dat( 0 );
 167   3                                }
 168   2                       write_r_cmd( page );
 169   2                       write_r_cmd( 0x40 );
 170   2                           for( n = 0;n < 64;n++ )
 171   2                               {
 172   3                                      write_r_dat( 0 );       //从第0页开始,对右半屏地址0X00~0X40,64个地址置0
 173   3                      }         }
 174   1        }
 175          /***********************************************************************
 176                  * * * * * * * * *   液晶初始化控制      * * * * * * * * * * 
 177          ***********************************************************************/
 178          void lcd_init( void )
C51 COMPILER V7.50   LCD12864                                                              11/16/2007 13:50:57 PAGE 4   

 179          {
 180   1            write_l_cmd( 0x3e );//显示开关控制(DISPLAY ON/OFF)代码地址0 0 1 1 1 1 1 D ,D=1开显示;D=0关显示
 181   1                write_r_cmd( 0x3e );
 182   1                write_l_cmd( 0xc0 );//起始行设置(DISPLAY START LINE)代码地址1 1 A5 A4 A3 A2 A1 A0
 183   1                write_r_cmd( 0xc0 );
 184   1                write_l_cmd( 0x3f );//开显示
 185   1                write_r_cmd( 0x3f );
 186   1                lcd_clr( );
 187   1       }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    491    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      14
   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 + -