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

📄 lcd12864.lst

📁 LCD12864的嵌入式C程序 很有参考价值!
💻 LST
字号:
C51 COMPILER V6.12  LCD12864                                                               04/05/2008 19:37:21 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN Lcd12864.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Lcd12864.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*------------------------------------------
   2            lcd12864液晶显示驱动实
   3          ----------------------------------------------
   4            /CS1----选择IC1,低有效 即 (左)64列
   5            /CS2----选择IC2,低有效 即 (右)64列
   6          -----------------------------------------------
   7             RS:	 D/I=H,表示DB7~DB0为显示数据
   8                   D/I=L,表示DB7~DB0为显示指令数据
   9          -----------------------------------------------
  10             R/W:  R/W=H,E=H数据被读到DB7~DB0
  11                   R/W=L,E信号下降沿,DDRAM数据被写到IR或DR
  12          ----------------------------------------------------
  13             E:	R/W=L,E信号下降沿锁存DB7~DB0
  14          		R/W=H,E=H DDRAM数据读到DB7~DB0
  15          ----------------------------------------------------
  16          
  17             |9.  DB0-----P1.0 |13.  DB4-----P1.4 |1. CS1-------P3.2 |
  18             |10. DB1-----P1.1 |14.  DB5-----P1.5 |2. CS2-------P3.3 |
  19             |11. DB2-----P1.2 |15.  DB6-----P1.6 |6. RS--------P3.4 |
  20             |12. DB3-----P1.3 |16.  DB7-----P1.7 |7. RW--------P3.5 |
  21             |17  脚---A正电源 |18   脚------K地  |8. E---------P3.6 |
  22             |5.  VO--------0V | 3.  脚------	地	|4.	脚-------正电源|
  23          -----------------------------------------------------------*/
  24          
  25          #include <AT89X52.H>
  26          #include<stdio.h>
  27          #include<intrins.h>
  28          #include"zimo.h"						   
  29          
  30          #define  CS1  P2_2
  31          #define  CS2  P2_3
  32          #define  RS   P2_0
  33          #define  RW   P2_1
  34          #define  E	  P1_0  
  35          #define	 Data  P0
  36          
  37          #define  key  P3_1
  38          
  39          void  delay(void );							 //延时程序	
  40          void  lcdinitial(void);						 //初始化子程序
  41          void  clrram(void);							 //复位子程序 
  42          void  writeMI(unsigned char i);  	         //主驱动器发指
  43          void  writeSI(unsigned char i);		         //从驱动器发指
  44          void  writeMD(unsigned char i);              //主驱动器发数
  45          void  writeSD(unsigned char i);		         //从驱动器发数
  46          void  SetPage(unsigned char page1,page2);    //设置页地址
  47          void display(unsigned char word,unsigned char layer, unsigned char width,unsigned char code *array);
  48          
  49          unsigned char code  arrayadress0[];
  50          
  51          void main(void)
  52          {
  53   1       
  54   1        
  55   1         while (1)
C51 COMPILER V6.12  LCD12864                                                               04/05/2008 19:37:21 PAGE 2   

  56   1         {    
  57   2             lcdinitial();
  58   2             clrram();
  59   2      	   delay();
  60   2      	   display(1,0,8,arrayadress0+8);
  61   2      	   display(1,1,8,arrayadress0);
  62   2      	   delay();
  63   2      	 }
  64   1                 
  65   1         
  66   1      }
  67          
  68            
  69          
  70          /*-----------------------
  71          主控制器 发指令 
  72          函数 writMI(unsigned char i)  是内部函数
  73                     从i发指令
  74          --------------------------*/
  75          
  76          void writeMI(unsigned char i)
  77          {
  78   1        do{
  79   2           CS1=1; 
  80   2           CS2=1;
  81   2           E=0; 
  82   2           RS=0; RW=1;CS1=0;E=1;           //判断主控制器忙?//
  83   2          }while(P0&0x80);                    //
  84   1           
  85   1           CS1=1;
  86   1      	 E=0;
  87   1           RS=0;RW=0; Data=i;CS1=0; E=1; 
  88   1           _nop_();_nop_();E=0;                     //低电平时发指令
  89   1        } 
  90          
  91          /*-------------------------------------
  92          从控制器发指令--
  93            ?函数 writSI(unsigned char i)  是内部函数
  94             从i发指令
  95          -----------------------------------------*/
  96          
  97          void writeSI(unsigned char i)
  98          {
  99   1        do{
 100   2        	 CS1=1;
 101   2           CS2=1; 
 102   2           E=0; 
 103   2           RS=0; RW=1;CS2=0;E=1;           //判断从控制器忙?
 104   2          }while(P0&0x80);                    //
 105   1           
 106   1           CS2=1;
 107   1      	 E=0;
 108   1           RS=0;RW=0;Data=i;CS2=0; E=1; 
 109   1           _nop_();_nop_();E=0;                     //低电平时发指令
 110   1        } 
 111          
 112          /*-------------------------------------
 113            函数 writMD  (unsigned char i)  是内部函数
 114            从i发数据
 115          -----------------------------------------*/
 116          void  writeMD(unsigned char i)
 117          {
C51 COMPILER V6.12  LCD12864                                                               04/05/2008 19:37:21 PAGE 3   

 118   1        do{
 119   2           CS1=1;
 120   2           CS2=1;   
 121   2           E=0; 
 122   2           RS=0; RW=1;CS1=0;E=1;           //判断主控制器忙?//
 123   2          }while(P0&0x80);                    //
 124   1           
 125   1           CS1=1;
 126   1           E=0;
 127   1           RS=1;RW=0; Data=i;CS1=0; E=1; 
 128   1            _nop_();_nop_();E=0;
 129   1                         
 130   1        } 
 131          
 132          /*-------------------------------------
 133            函数 writiSD(unsigned char i)  是内部函数
 134             从i发数据
 135          -----------------------------------------*/
 136          void  writeSD(unsigned char i)
 137          {
 138   1        do{
 139   2           CS1=1;
 140   2           CS2=1;    
 141   2           E=0; 
 142   2           RS=0; RW=1;CS2=0;E=1;           //判断主控制器忙?//
 143   2          }while(P0&0x80);                    //
 144   1           
 145   1           CS2=1;
 146   1       	 E=0;
 147   1           RS=1;RW=0; Data=i;CS2=0; E=1; 
 148   1            _nop_();_nop_();E=0;              
 149   1        } 
 150           
 151           void SetPage(unsigned char page1,page2)
 152          
 153          {  writeMI(0xB8|page1);          //设置主窗口页面地址//                   
 154   1         writeSI(0xB8|page2);          //设置从窗口页面地址//
 155   1        }     
 156          /*-------------------------------
 157            清屏函数、
 158             设置页面地址、设置主窗口显示地址
 159          -----------------------------------*/
 160          
 161          void clrram(void)                       
 162           {
 163   1          unsigned char  line;
 164   1      	unsigned char  page;
 165   1      
 166   1      for (page=0;page<8;page++)
 167   1         {
 168   2          SetPage(page,page);//设置页面地址
 169   2          writeMI(0x40);          //、设置主窗口显示地址//              
 170   2          writeSI(0x40);           //设置从窗口显示地址//
 171   2          for(line=0;line<64;line++)
 172   2            { writeMD(0x00);             
 173   3              writeSD(0x00);
 174   3      		}
 175   2          }
 176   1       } 
 177          
 178          void display(unsigned char word,unsigned char layer, unsigned char width,unsigned char code *array)
 179          {
C51 COMPILER V6.12  LCD12864                                                               04/05/2008 19:37:21 PAGE 4   

 180   1         unsigned char  x;
 181   1         unsigned char  k=16 ;    
 182   1         unsigned char address;                  //address表示显存的物理地址
 183   1         unsigned char  p=0;     	   
 184   1         unsigned char  page;
 185   1         page=layer;
 186   1          
 187   1          address=64-(word*8)/2;
 188   1        
 189   1            writeMI(0xB8|page);                 //主控制器发页地址//
 190   1            writeMI(0x04);                   //主控制器发窗口地址//
 191   1           for(x=0;x<=width/2;x++)
 192   1      
 193   1      	  {	 if(k--)
 194   2               { writeMD(array[p]);            // (左-- 上)层数据输出
 195   3                p++;}
 196   2      		  else {k=16;
 197   3      		        p=p+16;
 198   3      			    }     
 199   2               }
 200   1            writeSI(0xB8|page);                       //从控制器发页地址//
 201   1      	  writeSI(0x04);                            //从控制器发窗口地址//
 202   1           for(x=0;x<=width/2;x++)
 203   1      	  { if(k--)
 204   2               { writeSD(array[p]);                 //(右--上)层数据输//                  
 205   3                 p++;}
 206   2      		  else {k=16;
 207   3      		        p=p+16;
 208   3      				}
 209   2                }     
 210   1             
 211   1         	}
 212          void display(unsigned char word,unsigned char  layer, unsigned char width,unsigned char code *array)
 213          {
 214   1         unsigned char  x;
 215   1         unsigned char  k=16 ;    
 216   1         unsigned char address;                  //address表示显存的物理地址
 217   1         unsigned char  p=0;     	   
 218   1         unsigned char  page;
 219   1         
 220   1          if (layer==0)                           //页地址
 221   1                page=0;
 222   1           if (layer==1)
 223   1                page=1;
 224   1           if (layer==2)
 225   1                page=2;
 226   1           if (layer==3)
 227   1                page=3;
 228   1      	
 229   1          address=61-(word*16)/2;
 230   1        
 231   1            writeMI(0xB8|page);                 //主控制器发页地址//
 232   1            writeMI(address);                   //主控制器发窗口地址//
 233   1           for(x=0;x<=width/2;x++)
 234   1      	  {	 if(k--)
 235   2               { writeMD(array[p]);            // (左-- 上)层数据输出
 236   3                p++;}
 237   2      		  else {k=16;
 238   3      		        p=p+16;
 239   3      			    }  
 240   2                
 241   2               }
C51 COMPILER V6.12  LCD12864                                                               04/05/2008 19:37:21 PAGE 5   

 242   1      
 243   1            writeSI(0xB8|page);                       //从控制器发页地址//
 244   1      	  writeSI(0x00);                            //从控制器发窗口地址//
 245   1           for(x=0;x<=width/2;x++)
 246   1      	  { if(k--)
 247   2               { writeSD(array[p]);                 //(右--下)层数据输//                  
 248   3                 p++;}
 249   2      		  else {k=16;
 250   3      		        p=p+16;
 251   3      				}
 252   2                }     
 253   1             
 254   1         	}
*** ERROR C237 IN LINE 254 OF LCD12864.C: '_display': function already has a body
 255          
 256          
 257          /*-------------------------------- 
 258             yan shi cheng xu
 259             ------------------------------*/                    //延时程序
 260          void delay(void )
 261           {
 262   1         unsigned int  i;
 263   1         unsigned int  j;
 264   1          for(i=0;i<=1000;i++)
 265   1            for(j=0;j<=250;j++);
 266   1         }
 267          /*---------------------
 268          初始化程序
 269          ----------------------*/
 270          void lcdinitial(void)			
 271           { 
 272   1          writeMI(0x3f);writeSI(0x3f);       //显示器开       
 273   1          //writeMI(0x3e);writeSI(0x3e);      //显示器关       
 274   1           writeMI(0xc0);writeSI(0xc0);      //设置显示起始行    
 275   1           writeMI(0xB8);writeSI(0xB8);      //设置DDRAM中的页地址(X地址)            
 276   1           writeMI(0x40);writeSI(0x40);       //设置DDRAM中的地址(Y地址)           
 277   1         
 278   1      }
 279           unsigned char code arrayadress0[]={
 280          
 281          
 282          0x00,0x00,0x00,0x18,0x1E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00//"1",0
 283          
 284          
 285          
 286          
 287           
 288           
 289           	
 290          /*0x00,0x02,0x42,0x42,0x42,0x42,0x42,0x7F,0x7F,0x43,0x42,0x42,0x42,0x42,0x42,0x02,
 291          0x02,0x02,0x06,0x0C,0x18,0x30,0xE0,0xC0,0xFC,0xFE,0x02,0x02,0x02,0x02,0x0E,0x0E,//"无",0
 292          
 293          0x02,0x06,0x1E,0xFB,0xE7,0x46,0x09,0x09,0x09,0xFF,0xFF,0x49,0x79,0x39,0x29,0x01,
 294          0x04,0x44,0xC4,0xCC,0x48,0x48,0x4C,0x04,0x0C,0xC8,0xF8,0x38,0x6C,0x46,0x1F,0x1F,//"线",1
 295          
 296          0x00,0x00,0x1F,0x1F,0x12,0x12,0x12,0xFF,0xFF,0x12,0x12,0x12,0x1F,0x1F,0x00,0x00,
 297          0x00,0x00,0xF0,0xF0,0x20,0x20,0x20,0xFC,0xFE,0x22,0x22,0x22,0xF2,0xF2,0x0E,0x0E,//"电",2
 298          
 299          0x08,0x08,0xFF,0xFF,0x08,0x08,0x1B,0x13,0x10,0xFF,0xFF,0x10,0x1F,0x1F,0x01,0x00,
 300          0x00,0x00,0xFE,0xFE,0x00,0xC2,0xC6,0x1C,0xF8,0xE0,0x04,0x06,0xFE,0xFC,0xC0,0xC0,//"协",3
 301          
 302          0x01,0x03,0x02,0x06,0x0E,0x1A,0x32,0xE2,0xE2,0x32,0x1A,0x0E,0x06,0x07,0x03,0x02,
C51 COMPILER V6.12  LCD12864                                                               04/05/2008 19:37:21 PAGE 6   

 303          0x00,0x00,0x42,0x47,0x4F,0x5A,0x72,0x66,0x46,0x44,0x54,0x5F,0x4F,0x46,0x00,0x00  //"会",4
 304          */
 305           } ;
 306          
 307           

C51 COMPILATION COMPLETE.  0 WARNING(S),  1 ERROR(S)

⌨️ 快捷键说明

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