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

📄 lcd12864.txt

📁 12864lcd程序 串行控制 控制器为st7920 绝对实用
💻 TXT
字号:
#include<reg52.h>
#include<absacc.h>
#define COM XBYTE[0x0100]  //命令口
#define PA XBYTE[0x0101]
#define PB XBYTE[0x0102]
#define HIGH XBYTE[0x0105]
#define LOW XBYTE [0x0104]
 
/*
PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0
      RW ECK RST SCK SDA
*/ 
/*************************************************************************
NOTE: 小板子8155
*************************************************************************/
/*
 #define CLRRST    COM=COM|0x02;PB=PB&0xfb
 #define SETBRST   COM=COM|0x02;PB=PB|0x04


 #define CLRSCKLCD   PB=PB&0xf7
 #define SETBSCKLCD  PB=PB|0x08
            
            
 #define CLRSDALCD     PB=PB&0xef
 #define SETBSDALCD    PB=PB|0x10
*/
 
 
/*************************************************************************
NOTE:大板子
*************************************************************************/

 #define CLRRST    PB=PB&0xfe
 #define SETBRST   PB=PB|0x01


 #define CLRSCKLCD   PB=PB&0xfd
 #define SETBSCKLCD  PB=PB|0x02
            
            
 #define CLRSDALCD     PB=PB&0xfb
 #define SETBSDALCD    PB=PB|0x04


/********************************************
File: lcd.h
Description:  LCD12864 驱动 ,采用串行方式,
Author: kassey@126.com July,22th,2005
********************************************/




#include <intrins.h>

unsigned char code AC_TABLE[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,      //第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,      //第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,      //第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,      //第四行汉字位置
};
void delay1MS(uchar x)
{  
   uchar k,j;
   x=x<<1;
 for(k=0;k<x;k++)
  for(j=0;j<255;j++)_nop_();
 

}


/*****************************************
Fucntion: delay10US(char x)
Description: delay for 10 us
Parameter: x
Author: kassey@126.com
Date:   July,7th,2005
*****************************************/


void delay10US(uchar x)
{
   uchar k;
 for(k=0;k<x;k++);
 
}

void SendByteLCD(uchar WLCDData)
{
uchar i;
for(i=0;i<8;i++)
{
 if((WLCDData<<i)&0x80){SETBSDALCD ;}
 else {CLRSDALCD  ; }
 CLRSCKLCD ;
 SETBSCKLCD ;
}
}




 SPIWR(uchar Wdata,uchar RS)
 {
   SendByteLCD(0xf8+(RS<<1));
   SendByteLCD(Wdata&0xf0);
   SendByteLCD((Wdata<<4)&0xf0);

 }

 void SendCMD(uchar CMD)
{
SPIWR(CMD,0);
delay10US(90);//8155来模拟串行通信,所以,加上8155的延时,

}

 void SendData(uchar Data)
{

SPIWR(Data,1);
}




/*****************************************
Fucntion: LCDInit()
Description:严格按pdf上的初始化程序   test ok
Parameter: 
Author: kassey@126.com
Date:   July,7th,2005
*****************************************/
/*void LCDInit()
{

RST=0;
delay1MS(50);
RST=1;

 
     SendCMD(0x30);//功能设置,一次送8位数据,基本指令集  功能设定  1
  SendCMD(0x30); //               2
     SendCMD(0x0f);//0000,1100  整体显示,游标off,游标位置off 显示设置  3
  SendCMD(0x01);//0000,0001 清DDRAM       清DDRAM   4
     SendCMD(0x04);//点设定,显示字符/光标从左到右移位,DDRAM地址加 一//   entity mode 5


  
}
*/
/*****************************************
Fucntion: LCDInittest()
Description:  test 
Parameter: 
Author: kassey@126.com
Date:   July,7th,2005
*****************************************/
void LCDInittest()
{


CLRRST;//RST=0;
delay10US(100);
SETBRST;//RST=1;

 
     SendCMD(0x30);//功能设置,一次送8位数据,基本指令集  功能设定  1
  SendCMD(0x30); //功能设定 一次送8位数据,基本指令集  功能设定               2
     SendCMD(0x0c);//0000,1100  整体显示,游标off,游标位置off 显示设置  3
  SendCMD(0x01);//0000,0001 清DDRAM       清DDRAM   4
     SendCMD(0x06);//点设定,显示字符/光标从左到右移位,DDRAM地址加 一//   entity mode 5

  //SendCMD(0x07);换页
  
}
  


/*****************************
清文本区
*****************************/
void LcmClearTXT( void )
{
     unsigned char i;
     SendCMD(0x30);      //8BitMCU,基本指令集合
     SendCMD(0x80);      //AC归起始位
     for(i=0;i<64;i++)
        SendData(0x20);
}

/*****************************
发送字符串
*****************************/
void PutStr(unsigned char row,unsigned char col,unsigned char *puts)
{
     SendCMD(0x30);      //8BitMCU,基本指令集合
     SendCMD(AC_TABLE[8*row+col]);      //起始位置
     while(*puts != '\0')      //判断字符串是否显示完毕
     {
           if(col==8)            //判断换行
           {            //若不判断,则自动从第一行到第三行
                 col=0;
                 row++;
           }
           if(row==4) row=0;      //一屏显示完,回到屏左上角
           SendCMD(AC_TABLE[8*row+col]);
           SendData(*puts);      //一个汉字要写两次
           puts++;
           SendData(*puts);
           puts++;
           col++;
     }
}

/*****************************
绘图
*****************************/

void PutBMP(unsigned char *puts)
{
     unsigned int x=0;
     unsigned char i,j;
     SendCMD(0x34);      //8Bit扩充指令集,即使是36H也要写两次
     SendCMD(0x36);      //绘图ON,基本指令集里面36H不能开绘图
     for(i=0;i<32;i++)            //12864实际为256x32
     {
           SendCMD(0x80|i);      //行位置
           SendCMD(0x80);      //列位置
           for(j=0;j<32;j++)      //256/8=32 byte
           {            //列位置每行自动增加
                 SendData(puts[x]);
                 x++;
           }
     }
}


void LcmClearBMP( void )
{
     unsigned char i,j;
     SendCMD(0x34);      //8Bit扩充指令集,即使是36H也要写两次
     SendCMD(0x36);      //绘图ON,基本指令集里面36H不能开绘图
     for(i=0;i<32;i++)            //12864实际为256x32
     {
           SendCMD(0x80|i);      //行位置
           SendCMD(0x80);      //列位置
           for(j=0;j<32;j++)            //256/8=32 byte
                SendData(0);
     }
}


 void  ClearScreen()
{    uchar  i,j,x,y;
     LCDInittest();
   SendCMD(0x3e);// ;RE=1  扩展指令选择  G=1  开图形显示 
      x=0x80;
      y=0x80;
      for(j=0;j<64;j++)
      {
      y=0x80;
     SendCMD(x);
     SendCMD(y);
       for(i=0;i<32;i++)
      {
       SendData(0x00);
      
      }
      x=x+1;
      }
     
}

void Sendint(uint dd)
{
SendData(dd>>8);
SendData(dd);
}

/*****************************
打点  x=0:128;  y=0:64;
*****************************/
void Gra(uchar x,uchar y)
{
uchar xx,yy;
SendCMD(0x34);
SendCMD(0x36);
xx=x/16;
yy=63-y;
if(yy>=32){xx=xx+8;yy-=32;}
SendCMD(0x80+yy);
SendCMD(0x80+xx);
Sendint(0x8000>>(x%16));


}




#include<8155.h>
#define CLEARLCD {SendCMD(0x01);delay1MS(5);}

/*
#include<math.h>
 画正弦波
 void sinwave()
 {
 float zz;
uchar z;
 for(zz=0;zz<6.28;zz+=0.1)
{
Gra(z,sin(zz)*32+32);
z++;
}
for(zz=0;zz<6.28;zz+=0.1)
{
Gra(z,sin(zz)*32+32);
z++;
}

 }


  */
sbit SA=P1^2;sbit SB=P1^3;sbit SC=P1^4;
/*
111  null
110  cs1,TLC5620
101  cs2
100  ad0820
011  da7528
010  ram
001  rom
000  8155 
*/
#define GAL(sa,sb,sc)  {SA=sa;SB=sb;SC=sc;}


  
 uchar code my[]=
{
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xF0,0x00,0xFF,0xFF,0xE0,0x00,0x07,0xFF,0xFE,
0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xF0,0x00,0xFF,0xFF,0xE0,0x00,0x0F,0xFF,0xFE,
0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xF8,0x00,0xFF,0xFF,0xE0,0x00,0x0F,0xFF,0xFE,
0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFC,0x00,0xFF,0xFF,0xF0,0x00,0x1F,0xFF,0xFE,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xF8,0x00,0x3F,0xFF,0xFE,
0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFE,
0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFE,
0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFE,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x03,0xFF,0xFE,0x01,0xFF,0xFF,0x00,
0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x03,0xFF,0xFF,0x01,0xFF,0xFF,0x00,
0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x03,0xFF,0xFF,0x03,0xFF,0xFF,0x00,
0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0x80,0x03,0xFF,0xFF,0x83,0xFF,0xFF,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0xCF,0xFF,0xFF,0x00,
0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFE,0x00,0x03,0xFF,0xFF,0xEF,0xFF,0xFF,0x00,
0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFE,0x00,0x03,0xFF,0xFF,0xEF,0xFF,0xFF,0x00,
0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFC,0x00,0x03,0xFF,0xBF,0xFF,0xFB,0xFF,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFC,0x00,0x03,0xFF,0x8F,0xFF,0xF3,0xFF,0x00,
0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFE,0x00,0x03,0xFF,0x87,0xFF,0xE3,0xFF,0x00,
0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFE,0x00,0x03,0xFF,0x87,0xFF,0xE3,0xFF,0x00,
0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFF,0x00,0x03,0xFF,0x87,0xFF,0xC3,0xFF,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0x80,0x01,0xFF,0x83,0xFF,0x83,0xFF,0x00,
0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x01,0xFF,0x81,0xFF,0x03,0xFF,0x00,
0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x01,0xFF,0x81,0xFF,0x03,0xFF,0x00,
0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x01,0xFF,0x80,0xFF,0x03,0xFF,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xC0,0x7E,0x03,0xFF,0xFE,
0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xC0,0x7C,0x03,0xFF,0xFE,
0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xC0,0x3C,0x03,0xFF,0xFE,
0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xC0,0x3C,0x03,0xFF,0xFE,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFE,0x00,0xFF,0xFF,0xC0,0x18,0x03,0xFF,0xFE,
0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFE,0x00,0xFF,0xFF,0xC0,0x18,0x03,0xFF,0xFE,
0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFC,0x00,0xFF,0xFF,0xC0,0x08,0x03,0xFF,0xFE,
0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xF8,0x00,0xFF,0xFF,0xC0,0x00,0x03,0xFF,0xFE,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


};

uchar code zh[]=
{
//0x01,0x00,0x01,0x00,0x21,0x08,0x3F,0xFC,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,
//0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,

0x04,0x40,0x04,0x40,0xFF,0xFE,0x04,0x40,0x04,0x40,0x3F,0xFC,0x09,0x20,0xFF,0xFE,
0x09,0x20,0x09,0x20,0x7F,0xFC,0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00

};

void putone(uchar *p)
{
uchar xx,yy;
for(yy=0;yy<16;yy++)
for(xx=0;xx<1;xx++)
{
SendCMD(0x80+yy);
SendCMD(0x80+xx);
SendData(*p);
p++;
SendData(*p);
p++;
}
}


void Put(uchar *p)

{
    uchar xx,yy ;

  for(yy=0;yy<32;yy++)
 for(xx=0;xx<8;xx++)
 {
 SendCMD(0x80+yy);   //y 按位
 SendCMD(0x80+xx);//x 按16位
 SendData(*p);
 p++;
 SendData(*p);
 p++;
 }

 
 for(yy=0;yy<32;yy++)
 for(xx=8;xx<16;xx++)
 {
 SendCMD(0x80+yy);   //y 按位
 SendCMD(0x80+xx);//x 按16位
 SendData(*p);
 p++;
 SendData(*p);
 p++;
 }
 
 

 
}


void  Clear()
{    uchar  i,j;
     LCDInittest();
  SendCMD(0x34);
   SendCMD(0x3e);// ;RE=1  扩展指令选择  G=1  开图形显示 
      
     for(j=0;j<16;j++)
     for(i=0;i<32;i++)
 
  {
  SendCMD(0x80+i);
  SendCMD(0x80+j);
  SendData(0x00);
  SendData(0x00);
  }
     
}




void main()
{ 

uchar i;

GAL(0,0,0);
COM=0x0f;
LCDInittest();
// LcmClearTXT(); 


 
 LcmClearBMP();
// Put(my);

putone(zh);
while(1)
{

}

}

  

⌨️ 快捷键说明

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