📄 lcd12864.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 + -