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