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

📄 128064.c

📁 LCD12864资料
💻 C
字号:
#include <reg51.h>
#include <intrins.h>
sbit di=P2^2; // 数据\指令 选择
sbit rw=P2^1; // 读\写 选择
sbit e=P2^0; // 读\写使能
sbit cs1=P2^4; // 片选1
sbit cs2=P2^3; // 片选2
#define start_page 184
#define start_column 64
#define uchar unsigned char

uchar code HZ[]={
                 0x80,0x90,0x8C,0x84,0x84,0xF4,0xA5,0x86,0x84,0x84,0x84,0x84,0x94,0x8C,0x84,0x00,
                 0x80,0x80,0x80,0x40,0x47,0x28,0x28,0x10,0x28,0x24,0x43,0xC0,0x40,0x00,0x00,0x00,

                 0x00,0xFE,0x02,0x0A,0x8A,0x8A,0x8A,0xFA,0x8A,0x8A,0x8A,0x0A,0x02,0xFE,0x00,0x00,
                 0x00,0xFF,0x40,0x48,0x48,0x48,0x48,0x4F,0x48,0x49,0x4E,0x48,0x40,0xFF,0x00,0x00,

				 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20
                };       
        		  
void checkbusy()
{
   unsigned char dat;
   di=0;
   rw=1;
   do{
      P0=0x00;
      e=1; 
      dat=P0;
      dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号)
      }while(!(dat==0x00));
    e=0;
     }
sendcommandtolcd(unsigned char command)
{
   checkbusy();
   rw=0;
   P0=command;
   e=1; 
   e=0;
}
void writebyte(unsigned char dat)
{
   checkbusy();
   di=1; rw=0;
   P0=dat;
   e=1; 
   e=0;
  }
void  set_page(uchar page1)
{
  sendcommandtolcd(start_page+page1); 
}
void set_column(uchar column1)
{
 sendcommandtolcd(start_column+column1);
}

void pattern(uchar column,uchar *p, uchar page)
{
  uchar i;
  if(column<64)
  {
   set_page(page);
   set_column(column);
  }
  else
 {
  set_page(page);
  set_column(column-64); 
 }
  if(column>128)
   return ;
  if(column<64)
    {
     cs1=1;
     cs2=0;
     for(i=0;i<8;i++)
      {
        writebyte(*p);
        p++;
      }
    }
   else
     {
      cs1=0;
      cs2=1;
      for(i=0;i<8;i++)
         {
           writebyte(*p);
           p++;
         }
     } 
    
}
void display(uchar *pt)
{
  uchar i,gy=0;
  for(i=0;i<2;i++)
     {
     pattern(gy,pt,0);
     pattern(gy+8,pt+8,0);
     pattern(gy,pt+16,1);
     pattern(gy+8,pt+24,1);
     gy=gy+16;
     pt=pt+32;
     }
	 gy=0;
	 pattern(gy,pt,2);
	 pattern(gy,pt+8,3);
	
}
void clearlcd()
{
 uchar i,j;
 cs1=0;
 cs2=1;
 for(i=0;i<8;i++)
    {
      for(j=0;j<64;j++)
       {
           writebyte(0x00);
       }
    }
 cs1=0;
 cs2=1;
 for(i=0;i<8;i++)
    {
     for(j=0;j<64;j++)
       {
           writebyte(0x00);
       }
     }
}

//设定列地址--Y 0-63
void SetColumn(unsigned char column)
{
  column=column &0x3f; // 0=<column<=63
  column=column | 0x40; //01xx xxxx
  sendcommandtolcd(column);
}
/*----------------------------------------------------------------------------------------------------*/
//设定显示开始行--XX
void SetStartLine(unsigned char startline) //0--63
{
  startline=startline & 0x07;
  startline=startline|0xc0; //1100 0000
 sendcommandtolcd(startline);
 }
/*----------------------------------------------------------------------------------------------------*/
//开关显示
void SetOnOff(unsigned char onoff)
{
onoff=0x3e | onoff; //0011 111x
sendcommandtolcd(onoff);
}
/*---------------------------------------------------------------------------------------------------*/
//选择屏幕
//screen: 0-全屏,1-左屏,2-右屏
void SelectScreen(unsigned char screen)
{ //cs1: 1--左; cs2: 1--右
   switch(screen)
   { case 0: cs1=0;//全屏
             _nop_(); _nop_(); _nop_(); 
             cs2=0; 
             _nop_(); _nop_(); _nop_(); 
             break; 
     case 1: cs1=0;//左屏
             _nop_(); _nop_(); _nop_(); 
             cs2=1;
             _nop_(); _nop_(); _nop_(); 
             break;
     case 2: cs1=1;//右屏
             _nop_(); _nop_(); _nop_(); 
             cs2=0;
             _nop_(); _nop_(); _nop_(); 
             break;
   }
}
void ClearScreen(unsigned char screen)
   { unsigned char i,j;
     SelectScreen(screen);
     for(i=0;i<8;i++){
            set_page(i);
              for(j=0;j<128;j++){
                          writebyte(0x00);
                           }
                     }
            		 
    }
GDM12864delay()
   {
    unsigned int i=500;
    while(i--) {;}
    }
void InitLCD() 
{ unsigned char i=250; //延时
while(i--);

SelectScreen(0);
SetOnOff(0); //关显示

ClearScreen(0);//清屏

SelectScreen(0);
SetOnOff(1); //开显示
SelectScreen(0);
SetStartLine(0); //开始行:0
} 
void main()
{
 GDM12864delay();
 InitLCD();
 set_page(0);
 set_column(0);
 SetStartLine(0);
 display(&HZ);
 while(1);
}

⌨️ 快捷键说明

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