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

📄 lcd12864.lst

📁 lcd12864的驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   LCD12864                                                              05/31/2007 14:34:54 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN lcd12864.OBJ
COMPILER INVOKED BY: E:\Program Files\C51\BIN\C51.EXE lcd12864.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*****************************************************************/ 
   2          /*                                                               */                                       
             -                         
   3          /*名称:                LCD12864显示程序                         */                                       
             -                                                                                                                        
             -            
   4          /*功能:           显示英文,数字,符号,图片。                  */                                       
             -             
   5          /*难度等级:                   高                                */                                       
             -                              
   6          /* 作者:                  zengrenliang                          */
   7          /* 版权:           http://www.51kaifa.com                       */
   8          /*编写日期:        2006.05.20                                   */                                       
             -                                                                                                                        
             -                                              
   9          /*****************************************************************/
  10          
  11          #include <reg52.h>
  12          #include  <string.h>
  13          
  14          #define uchar unsigned char
  15          
  16          /**********引脚定义*********/
  17          
  18          sbit lck = P3^5;//锁存信号
  19          sbit CSA = P2^4;//又区选择
  20          sbit CSB = P2^5;//左区选择
  21          sbit RW = P2^7;//LCD片选
  22          sbit DI = P2^6;//数据/命令选择
  23          
  24          /********常用命令及参数定义********/
  25          #define DISPON     0x3f
  26          #define DISPOFF    0x3e
  27          #define DISPFIRST  0xc0
  28          #define SETX       0x40
  29          #define SETY       0xb8
  30          #define LCDBUZY    0x80
  31          #define L          0x00
  32          #define R          0x40
  33          #define LIMIT      0x80
  34          
  35          
  36          /**********全局变量************/
  37          uchar  cbyte;
  38          uchar data statu;
  39          bit xy;
  40          
  41          /**************函数声明******************/
  42          
  43          void WrL(uchar x);
  44          void WrR(uchar x);
  45          void Lcmcls(void);
  46          void delay1s(void);
  47          void Lcminit (void);
  48          void Putpicture(uchar flag);
C51 COMPILER V7.06   LCD12864                                                              05/31/2007 14:34:54 PAGE 2   

  49          void delay(unsigned int time);
  50          void VtoH8x16change(uchar *hzbuf);
  51          void Puthalf(uchar *strch,uchar row,uchar col);
  52          void Wrdata(uchar x,uchar row,uchar col);
  53          void Locatexy(uchar row,uchar col);
  54          void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag);
  55          void vWrite8x16String(uchar  *str,uchar col, uchar row, bit flag);
  56          
  57          
  58          extern uchar  code picture1[];
  59          extern uchar  code picture2[];
  60          extern uchar  code  char_Table[95][16];
  61          
  62          /***********主程序***************/
  63          void main(void)
  64          {      
  65   1           P1 = 0x20;//"液晶"指示灯亮
  66   1          Lcminit();
  67   1          while(1){
  68   2           Putpicture(0);
  69   2           delay1s();
  70   2           Lcmcls();
  71   2           Putpicture(1);
  72   2           delay1s();
  73   2           Lcmcls();
  74   2           vWrite8x16String("abcdefghijklmn" ,0, 8,0);
  75   2           vWrite8x16String("ABCDEFGHIJKLMN", 2, 8,0);
  76   2           vWrite8x16String("12345678901234", 4, 8,0);
  77   2           vWrite8x16String("+-*/!@#$%^&*()", 6, 8,0);
  78   2           delay1s();
  79   2           Lcmcls();
  80   2          }   
  81   1      
  82   1      }
  83          
  84          
  85          /***************微秒级延时*****************/
  86          void delay(unsigned int  time)
  87          { unsigned int i;
  88   1          for(i=0;i<time;i++);
  89   1       }
  90          
  91          /***************约5S延时********************/
  92          void delay1s(void)
  93          {
  94   1          delay(50000);
  95   1          delay(50000);
  96   1          delay(50000);
  97   1          delay(50000);
  98   1          delay(50000);
  99   1          delay(50000);
 100   1          delay(50000);
 101   1          delay(50000);
 102   1          delay(50000);
 103   1          delay(50000);
 104   1          delay(50000);
 105   1          delay(50000);
 106   1          delay(50000);
 107   1          delay(50000);
 108   1          delay(50000);
 109   1      }
 110          
C51 COMPILER V7.06   LCD12864                                                              05/31/2007 14:34:54 PAGE 3   

 111          //***********初始化LCD*******************/
 112          
 113          void Lcminit (void)
 114          { 
 115   1          cbyte=DISPOFF;
 116   1          WrL(cbyte);
 117   1          WrR(cbyte);
 118   1          cbyte=DISPON;
 119   1          WrL(cbyte);
 120   1          WrR(cbyte);
 121   1          cbyte=DISPFIRST;
 122   1          WrL(cbyte);
 123   1          WrR(cbyte);
 124   1          Lcmcls();
 125   1          Locatexy(0,0);
 126   1      }
 127          
 128          
 129          /***************LCD清屏********************/
 130          void Lcmcls(void)
 131          { uchar  i,j;
 132   1          for(i=0;i<8;i++){
 133   2            delay(6);
 134   2              for(j=0;j<LIMIT;j++){
 135   3                delay(6);
 136   3                Wrdata(0x0,i,j);
 137   3               }
 138   2           }
 139   1      }
 140          
 141          /*****************写左区******************/
 142          
 143          void WrL(uchar x)
 144          {
 145   1         
 146   1         RW = 1;//RW=1(读)
 147   1         CSA = 0;
 148   1         CSB = 1;
 149   1         DI = 0;//命令操作
 150   1         lck = 0;
 151   1         P1 = 0xff;//ELCD=1,使能LCD
 152   1         lck = 1;
 153   1         while(P0 & LCDBUZY);//最高位为1,表示忙,则循环检测
 154   1         lck = 0;
 155   1         P1 = 0xef;//ELCD=1,使能LCD
 156   1         lck = 1;
 157   1         RW = 0;//RW=0(写)
 158   1         P0 = x;   //数据送到P0口
 159   1      
 160   1         CSA = 0;
 161   1         CSB = 1;
 162   1         DI = 0;
 163   1      
 164   1         lck = 0;
 165   1         P1 = 0xff;//ELCD=1,使能LCD,把数据打入LCD
 166   1         lck = 1;
 167   1         delay(3);  
 168   1         lck = 0;
 169   1         P1 = 0xef;//ELCD=0
 170   1         lck = 1;
 171   1      
 172   1      }
C51 COMPILER V7.06   LCD12864                                                              05/31/2007 14:34:54 PAGE 4   

 173          
 174          /**************写右区**************/
 175          void WrR(uchar data x)
 176          {
 177   1         RW = 1;//R/W=1读
 178   1         CSA = 1;
 179   1         CSB = 0;
 180   1         DI = 0;//命令操作
 181   1         lck = 0;
 182   1         P1 = 0xff;
 183   1         lck = 1;
 184   1       //EN = 1;//使能LCD
 185   1         while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
 186   1         lck = 0;
 187   1         P1 = 0xe;
 188   1         lck = 1;
 189   1         RW = 0;//RW = 0写
 190   1      
 191   1         P0=x;     //数据送到P0口
 192   1      
 193   1         CSA = 1;
 194   1         CSB = 0;
 195   1         DI = 0;
 196   1         lck = 0;
 197   1         P1 = 0xff;
 198   1         lck = 1;//使能LCD,把数据打入LCD
 199   1         delay(3);  
 200   1         lck = 0;
 201   1         P1 = 0xef;
 202   1         lck = 1;
 203   1          
 204   1      }
 205          
 206          
 207          /*************定位*****************/
 208          void Locatexy(uchar  row,uchar  col)
 209          {
 210   1         uchar  x, y, right;
 211   1         switch(col&0xc0)
 212   1          {
 213   2          case 0:{//右半屏
 214   3                 RW = 1;//R/W=1(读)
 215   3                 CSA = 1;
 216   3                 CSB = 0;
 217   3                 DI = 0;//命令操作
 218   3                 lck = 0;
 219   3                 P1 = 0xff;
 220   3                 lck = 1;; //使能LCD        
 221   3                 while(P0 & LCDBUZY);//最高位为1,表示忙,则循环  
 222   3                 lck = 0;
 223   3                 P1 = 0xef;

⌨️ 快捷键说明

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