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

📄 lcd12231.c

📁 lcd12232.c LCD12232液晶显示驱动程序。
💻 C
字号:

//XDM9602@SINA.COM
/*------------------------------------------------------------------------------------------------------------------------------------
接口端:1:VDD、2:GND、3:VLCD、4:RET、5:CS1、6:CS2、7、R/W、8:A0、
                9~16:D0~D7、17:背光电压   18:背光电压。(A是正电压、K 
----------------------------------------------------------------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------------------------------
  LCD12232液晶显示驱动实验
  目的:学习C语言编程
   // E1:主驱动器使能信号,写操作时低电平有效,读操作时高电平有效;//负电压)
   // E2: 从驱动器使能信号,写操作时低电平有效,读操作时高电平有效;//  
   // RW: 读写选择信号,低电平时写,高电平时读;//
   // RS: 数据/指令选择信号/
   
   |DB0-----P1.0 | DB4-----P1.4 | RW-------P3.4 |
   |DB1-----P1.1 | DB5-----P1.5 | RS-------P3.5 |
   |DB2-----P1.2 | DB6-----P1.6 | E1-------P3.2 |
   |DB3-----P1.3 | DB7-----P1.7 | E2-------P3.3 |
   
-------------------------------------------------------------------------------------------------------------*/

#include<at89x51.h>
#include<stdio.h>
#include<intrins.h>


#define  E1  P3_2
#define  E2  P3_3
#define  RW  P3_4
#define  RS  P3_5

void delay(void);                  //延时子程序//
void lcdinitial(void);              //初始化子程序//
void clrram(void );                 //复位子程序//
void writeMI(unsigned char i);       //主驱动器发指令//
void writeSI(unsigned char i);       //从驱动器发指令//
void writeMD(unsigned char i);        //主驱动器发数据//
void writeSD(unsigned char i);         //从驱动器发数据//
void SetPage(unsigned char page1,page2);  //设置页地址。//
void display(unsigned char word,unsigned char layer  ,unsigned char width, unsigned char code *array);
unsigned char code arrayadress1[];
unsigned char code arrayadress2[];
unsigned char code arrayadress3[];
unsigned char code arrayadress4[];

/*----------------------------
    主函数
-------------------------------*/
void main(void)
 {    
   do {
      delay();
	  lcdinitial();                   //初始化程序//     
	  clrram();                        //清屏子程序//
	  display(6,0,96,arrayadress3);
      display(6,1,96,arrayadress3+16);                 
      
	  display(5,2,80,arrayadress4);
	  display(5,3,80,arrayadress4+16);
	  delay();
	  clrram();
	  display(6,0,96,arrayadress1);
      display(6,1,96,arrayadress1+16);
      
	  display(7,2,114,arrayadress2);
      display(7,3,114,arrayadress2+16);
	  delay();
	 
	 }
	  while(1); 
  }
/*----------------------------
    初始化函数
-----------------------------*/

 void lcdinitial(void)			
 { 
   writeMI(0xE2);writeSI(0xE2);                //复位指令//
   writeMI(0xAE);writeSI(0xAE);                //显示开关指令//
   writeMI(0xA4);writeSI(0xA4);                //休闲工作状态设置关//
   writeMI(0xA9);writeSI(0xA9);                 //占空比1/32//     
   writeMI(0xEE);writeSI(0xEE);                 //指令改写方式//
   
   writeMI(0x00);writeMI(0xC0);                //设置主控制器地址//
   writeSI(0x00);writeSI(0xC0);                //设置从控制器地址//
   writeMI(0xAF);writeSI(0xAF);                  //休闲工作状态设置开//                 
  }
/*-------------------------------------
  函数 writMI(unsigned char i)  是内部函数
  从i发指令
-----------------------------------------*/
  
void writeMI(unsigned char i)
 {
  do {
     E1=0;   
     E2=0; 
     RS=0; RW=1; E1=1;_nop_();           //判断主控制器忙?//
    }while(P1&0x80);                    //
     
     E1=0;
     RW=0;RS=0;E1=1;_nop_();
     P1=i;_nop_(); E1=0;                       //低电平时发指令
  } 
/*-------------------------------------
  函数 writSI(unsigned char i)  是内部函数
   从i发指令
-----------------------------------------*/
void writeSI(unsigned char i)
  {
     do{
        E1=0;
        E2=0;
        RS=0; RW=1; E2=1; _nop_();              //判断从控制器忙?//
        }while(P1&0x80);                  
      
        E2=0;
        RW=0; RS=0; E2=1;_nop_();
        P1=i; _nop_();E2=0;                             //低电平时发指令
   }
/*-------------------------------------
  函数 writMD  (unsigned char i)  是内部函数
  从i发数据
-----------------------------------------*/
void  writeMD(unsigned char i)

{  do{
      E1=0;
      E2=0;
      RS=0; RW=1; E1=1; _nop_();          //判断主控制器忙?//   
     }while(P1&0x80); 
      
     E1=0;
     RW=0; RS=1; E1=1;_nop_();
     P1=i; _nop_();E1=0;                           //低电平时发数据//
     }  
/*-------------------------------------
  函数 writiSD(unsigned char i)  是内部函数
   从i发数据
-----------------------------------------*/
void  writeSD(unsigned char i)

{  do{
      E1=0;
      E2=0;
      RS=0; RW=1; E1=1; _nop_();               //判断从控制器忙?//
     }while(P1&0x80);
      
     E2=0;
     RW=0; RS=1; E2=1;_nop_();
     P1=i; _nop_();E2=0;                              //低电平时发数据//
     }  
       
/*-------------------------------
  清屏函数、
   设置页面地址、设置主窗口显示地址
-----------------------------------*/


void clrram(void)                       
 {
    unsigned char  line;
	unsigned char  page;

for (page=0;page<4;page++)
   {
    SetPage(page,page);//设置页面地址
    writeMI(0x00);          //、设置主窗口显示地址//              
    writeSI(0x00);           //设置从窗口显示地址//
    for(line=0;line<62;line++)
      { writeMD(0x00);             
        writeSD(0x00);
		}
    }
 } 

void SetPage(unsigned char page1,page2)

{  writeMI(0xB8|page1);          //设置主窗口页面地址//                   
   writeSI(0xB8|page2);          //设置从窗口页面地址//
  }

void display(unsigned char word,unsigned char  layer, unsigned char width,unsigned char code *array)
{
   unsigned char  x;
   unsigned char  k=16 ;    
   unsigned char address;                  //address表示显存的物理地址
   unsigned char  p=0;     	   
   unsigned char  page;
   
    if (layer==0)                           //页地址
          page=0;
     if (layer==1)
          page=1;
     if (layer==2)
          page=2;
     if (layer==3)
          page=3;
	
    address=61-(word*16)/2;
  
      writeMI(0xB8|page);                 //主控制器发页地址//
      writeMI(address);                   //主控制器发窗口地址//
     for(x=0;x<=width/2;x++)
	  {	 if(k--)
         { writeMD(array[p]);            // (左-- 上)层数据输出
          p++;}
		  else {k=16;
		        p=p+16;
			    }  
          
         }

      writeSI(0xB8|page);                       //从控制器发页地址//
	  writeSI(0x00);                            //从控制器发窗口地址//
     for(x=0;x<=width/2;x++)
	  { if(k--)
         { writeSD(array[p]);                 //(右--下)层数据输//                  
           p++;}
		  else {k=16;
		        p=p+16;
				}
          }     
       
   	}
/*-------------------------------- 
   yan shi cheng xu
   ------------------------------*/                    //延时程序
void delay(void )
 {
   unsigned int  i;
   unsigned int  j;
    for(i=0;i<=1000;i++)
      for(j=0;j<=150;j++);
   }
   
unsigned char code arrayadress1[]={
/* 点阵:16x16
   提取点阵方向:纵向
   字节掉转:是
   字节方式:C语言 */
0x04,0x34,0xC4,0x04,0xC4,0x3C,0x20,0x10,    // 欢
0x0F,0xE8,0x08,0x08,0x28,0x18,0x00,0x00,
0x10,0x08,0x06,0x01,0x82,0x8C,0x40,0x30,
0x0C,0x03,0x0C,0x10,0x60,0xC0,0x40,0x00,

0x40,0x42,0x44,0xC8,0x00,0xFC,0x04,0x02,    // 迎
0x82,0xFC,0x04,0x04,0x04,0xFE,0x04,0x00,
0x00,0x40,0x20,0x1F,0x20,0x47,0x42,0x41,
0x40,0x7F,0x40,0x42,0x44,0x63,0x20,0x00,

0x40,0x40,0x42,0x44,0x58,0xC0,0x40,0x7F,    // 光
0x40,0xC0,0x50,0x48,0x46,0x64,0x40,0x00,
0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x00,
0x00,0x3F,0x40,0x40,0x40,0x40,0x70,0x00,

0x00,0xFC,0x00,0xFF,0x40,0x20,0x10,0x0C,    // 临
0x2B,0x48,0xC8,0x08,0x08,0x8C,0x08,0x00,
0x00,0x1F,0x00,0xFF,0x00,0xFF,0x41,0x41,
0x41,0x7F,0x41,0x41,0x41,0xFF,0x01,0x00,

0x10,0x10,0x10,0xFF,0x90,0x50,0x00,0x3F,    // 指
0x48,0x48,0x48,0x44,0x46,0xC4,0x70,0x00,
0x02,0x42,0x81,0x7F,0x00,0x00,0x00,0xFF,
0x49,0x49,0x49,0x49,0x49,0xFF,0x01,0x00,

0x00,0x00,0x7E,0x92,0x92,0x92,0x92,0x92,    // 导
0x92,0x92,0x92,0xBF,0x82,0xE0,0x00,0x00,
0x04,0x04,0x04,0x04,0x14,0x24,0x04,0x04,
0x44,0x84,0x7F,0x04,0x04,0x06,0x04,0x00,




};

unsigned char code arrayadress2[]={

/* 点阵:16x16
   提取点阵方向:纵向
   字节掉转:是
   字节方式:C语言 */
0x40,0x60,0x5E,0x48,0x48,0xFF,0x48,0x4C,    // 制
0x68,0x40,0xF8,0x00,0x00,0xFF,0x00,0x00,
0x00,0x00,0x3F,0x01,0x01,0xFF,0x11,0x21,
0x1F,0x00,0x07,0x40,0x80,0x7F,0x00,0x00,

0x80,0x40,0x20,0xF8,0x87,0x40,0x30,0x0F,    // 作
0xF8,0x88,0x88,0xC8,0x88,0x0C,0x08,0x00,
0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,
0xFF,0x08,0x08,0x08,0x0C,0x08,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x7F,    // 人
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,
0x03,0x0C,0x10,0x20,0x40,0xC0,0x40,0x00,

0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x80,    // :
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x31,0x7B,0x7B,0x31,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x02,0xE2,0x22,0x22,0x3F,0x82,0x80,0xFF,    // 张
0x80,0xA0,0x90,0x88,0x86,0xC0,0x80,0x00,
0x00,0x43,0x82,0x42,0x3E,0x00,0x00,0xFF,
0x40,0x23,0x0C,0x10,0x20,0x60,0x20,0x00,

0x08,0x08,0x88,0x88,0x88,0x88,0x88,0xFF,    // 志
0x88,0x88,0x88,0xC8,0x88,0x0C,0x08,0x00,
0x20,0x18,0x00,0x3C,0x40,0x40,0x42,0x44,
0x4C,0x40,0x40,0x70,0x00,0x08,0x30,0x00,

0x40,0x20,0x38,0xE7,0x24,0x24,0x24,0x10,    // 铭
0x1C,0xA7,0x44,0x24,0x14,0x0C,0x00,0x00,
0x00,0x01,0x01,0x7F,0x21,0x11,0x04,0x02,
0xFF,0x42,0x42,0x42,0x42,0xFF,0x02,0x00,




};

unsigned char code arrayadress3[]={
 /* 点阵:16x16
   提取点阵方向:纵向
   字节掉转:是
   字节方式:C语言   */
0x10,0x22,0x64,0x0C,0x80,0x04,0xC4,0x34,    // 液
0x05,0xC6,0xBC,0x24,0x24,0xE6,0x04,0x00,
0x04,0x04,0xFE,0x01,0x02,0x01,0xFF,0x42,
0x21,0x16,0x08,0x15,0x23,0x60,0x20,0x00,

0x00,0x00,0x00,0x00,0xFF,0x49,0x49,0x49,    // 晶
0x49,0x49,0xFF,0x00,0x00,0x80,0x00,0x00,
0x00,0xFF,0x49,0x49,0x49,0x49,0xFF,0x00,
0xFF,0x49,0x49,0x49,0x49,0xFF,0x01,0x00,

0x00,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,    // 显
0x92,0x92,0x92,0xFF,0x02,0x00,0x00,0x00,
0x40,0x42,0x44,0x4D,0x40,0x7F,0x40,0x40,
0x40,0x7F,0x40,0x49,0x44,0x66,0x40,0x00,

0x40,0x40,0x42,0x42,0x42,0x42,0x42,0xC2,    // 示
0x42,0x42,0x42,0x43,0x42,0x60,0x40,0x00,
0x00,0x10,0x08,0x04,0x06,0x40,0x80,0x7F,
0x00,0x00,0x02,0x04,0x0C,0x18,0x00,0x00,

0x10,0x0C,0x04,0x44,0x8C,0x94,0x35,0x06,    // 实
0xF4,0x04,0x04,0x04,0x04,0x14,0x0C,0x00,
0x02,0x82,0x82,0x42,0x42,0x23,0x12,0x0E,
0x03,0x0A,0x12,0x22,0x42,0xC3,0x02,0x00,

0x02,0xFA,0x02,0x02,0xFF,0x42,0x20,0x50,    // 验
0x4C,0x43,0x4C,0x50,0x20,0x60,0x20,0x00,
0x10,0x31,0x11,0x49,0x89,0x7F,0x42,0x5C,
0x40,0x4F,0x60,0x58,0x47,0x60,0x40,0x00,

};

unsigned char code arrayadress4[]={
/* 点阵:16x16
   提取点阵方向:纵向
   字节掉转:是
   字节方式:C语 */      
0x00,0x40,0x42,0x42,0x42,0x42,0xFE,0x42,    // 无
0xC2,0x42,0x43,0x42,0x60,0x40,0x00,0x00,
0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,
0x3F,0x40,0x40,0x40,0x40,0x40,0x70,0x00,

0x00,0x20,0x30,0xAC,0x63,0x20,0x30,0x20,    // 线
0x20,0xFF,0x90,0x92,0x94,0xD0,0x80,0x00,
0x20,0x62,0x23,0x12,0x12,0x12,0x41,0x41,
0x21,0x17,0x18,0x24,0x42,0x80,0xE0,0x00,

0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,    // 电
0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,
0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42,
0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00,

0x10,0x10,0xFF,0x10,0x10,0x80,0x10,0x10,    // 协
0xFF,0x10,0x10,0x10,0xF8,0x90,0x00,0x00,
0x00,0x00,0xFF,0x00,0x04,0x43,0x20,0x1C,
0x03,0x00,0x40,0x80,0x7F,0x00,0x03,0x00,

0x80,0x80,0x40,0x20,0x50,0x48,0x44,0x43,    // 会
0x44,0x48,0x50,0x20,0x40,0xC0,0x40,0x00,
0x00,0x00,0x02,0x42,0x62,0x52,0x4E,0x42,
0x42,0x52,0x62,0xC3,0x02,0x00,0x00,0x00,

};







⌨️ 快捷键说明

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