📄 128x64lcm_main.c
字号:
#pragma ot(11,size)
#include <reg51.h>
#include <intrins.h>
sbit RS = P2^0;
sbit RW = P2^1;
sbit E = P2^2;
sbit PSB = P2^3;//PSB
sbit RST = P2^4;// /REST
sbit BUSY= P2^5;
////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
//P0=DATA;
unsigned char COUNT3,COUNT2,COUNT1,COUNT,LCD_X,LCD_Y,LCD_DATA1,LCD_DATA2,LCD_DATA,F3,R1,F_0;
code unsigned char TU_TAB1[]={
// 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x01,0xC0,0x00,0x00,0x18,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x0C,0x01,0xC0,0x03,0xF8,0x3C,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x1E,0x7F,0xFF,0x83,0xFC,0x7E,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x1F,0xFF,0xFF,0x83,0xFC,0x7F,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x07,0x81,0xC0,0x03,0xB8,0xFF,0x80,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x03,0x3F,0xFF,0x03,0xBB,0xE7,0xC0,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x3F,0xFF,0x03,0xBF,0xC3,0xF0,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x1C,0x7F,0xFF,0x83,0xBF,0xFF,0xF0,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x1E,0x7F,0xFF,0x83,0xBF,0xFF,0xE0,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x1F,0x7F,0xFF,0x83,0xB0,0xFF,0x80,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x0F,0x1F,0xFF,0x03,0xF8,0x1C,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x03,0x3F,0xFF,0x03,0xBB,0xFF,0xE0,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x3F,0xFF,0x03,0xBB,0xFF,0xE0,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x38,0x07,0x03,0x9F,0xFF,0xE0,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x03,0xBF,0xFF,0x03,0x9C,0x1C,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x03,0xBF,0xFF,0x03,0x9D,0xDD,0x80,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x07,0xB8,0x07,0x03,0xFD,0xDF,0xC0,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x07,0x3F,0xFF,0x03,0xFB,0xDD,0xC0,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x0F,0x3F,0xFF,0x03,0xF7,0x9D,0xE0,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x0E,0x38,0x07,0x03,0x8F,0x9C,0xE0,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x1E,0x38,0x3F,0x03,0x87,0xFC,0xE0,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x1C,0x38,0x1F,0x03,0x80,0xFC,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x04,0x38,0x1E,0x03,0x80,0xF8,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};
#define RelayTime 50
//*************delay_ms********************************
void delay_2us(unsigned char x)
{
//2*x + 5 个指令周期
do{
}while(--x);
}
void delay_ms(unsigned char cnt)
{
unsigned char i;
do {
i = 4;
do {
delay_2us(120);
} while(--i);
} while(--cnt);
}
//***********检查是否LCD忙碌的子程序**********************
void check_busy(void)
{
delay_2us(50);
return;
P1=0xff;
RS=0;
RW=1;
while (1)
{
_nop_();_nop_();_nop_();
E =1;
_nop_();_nop_();_nop_();
if (P1^7==0) break;
_nop_();_nop_();_nop_();
E =0;
}
E =0;
BUSY=!BUSY;
//delay_ms(50);
}
//**********数据写命令***************************
void send_com(unsigned char command )
{
check_busy();
RS=0;
RW=0;
P1=command;
E =1;
_nop_();
_nop_();
E =0;
// delay_2us(RelayTime);
}
//**********LCD初始化时的送命令******************
void send_com_init(unsigned char command_init )
{
RS=0;
RW=0;
P1=command_init;
E =1;
_nop_();
_nop_();
E =0;
delay_2us(RelayTime);
}
//**********写数据***************************
void send_data(unsigned char Data)
{
check_busy();
RS=1;
RW=0;
P1=Data;
E =1;
_nop_();
_nop_();
E =0;
}
//***********读数据****************************
unsigned char read_data(void)
{
unsigned char read_data;
check_busy();
RS=1;
RW=1;
E =1;
_nop_();
read_data=P1;
E =0;
return (read_data);
}
//***********清屏*****************************
void clear_LCD(void)
{
send_com(0x01); //清屏
send_com(0x34); //选择扩展指令并使绘图单元OFF
send_com(0x30); //选择基本指令集
}
//**********LCD初始化************************
void initial_LCD(void)
{
delay_ms(50);
send_com_init(0x30);//30H--8位元组
delay_2us(50);
send_com_init(0x30);//30H--基本指令操作
delay_2us(20);
send_com_init(0x0C);//开显示,关光标,不闪烁。
delay_2us(50);
send_com_init(0x01);//清除显示
delay_ms(10);
send_com_init(0x06);//指定在资料写入或读取时,光标的移动方向,DDRAM的地址计数器(AC)加1。
}
//**********写准备***************************
void WR_ZB(void)
{
send_com(0x34); //选择扩充指令集
send_com(LCD_Y);
send_com(LCD_X);
send_com(0x30); //基本指令集
}
//*********取数送显示******************************
void QUSHU(const unsigned char *shu)
{
for (;COUNT!=0;COUNT--)
{
send_data(*shu++);
delay_2us(80);
}
}
//*********Flash(闪烁)******************************
void flash(void)
{
send_com(0x08);//关闭显示,关光标,不闪烁。
delay_ms(250);
send_com(0x0c);//开显示,关光标,不闪烁。
delay_ms(250);
send_com(0x08);//关闭显示
delay_ms(250);
send_com(0x0c);//开显示,关光标,不闪烁。
delay_ms(250);
send_com(0x08);//关闭显示
delay_ms(250);
}
//**********显示图形子程序*********************
void PHO_DISP(const unsigned char *s)
{
COUNT3=0X02;
LCD_X=0X80;
for (;COUNT3!=0;COUNT3--)
{
LCD_Y=0X80;
COUNT2=0X20;//32
for (;COUNT2!=0;COUNT2--)
{
COUNT1=0X10;//16
WR_ZB();
for (;COUNT1!=0;COUNT1--)
{
send_data(*s++);
}
LCD_Y++;
}
LCD_X=0X88;
}
send_com(0x36); // 绘图ON
send_com(0x30); // 使用基本指令
}
//******************显示点阵子程序************
void LAT_DISP(void)
{
COUNT3=0X02;
LCD_X=0X80;
for (;COUNT3!=0;COUNT--)
{
LCD_Y=0X80;
F0=0;
COUNT2=0X20;
for (;COUNT2!=0;COUNT--)
{
COUNT1=0X10;
WR_ZB();
if (F0!=0)
LCD_DATA=LCD_DATA2;
else
LCD_DATA=LCD_DATA1;
for (;COUNT1!=0;COUNT1--)
{
send_data(LCD_DATA);
}
LCD_Y+=1;
F0=!F0;
}
LCD_X=0X88;
}
send_com(0x36);
send_com(0x30);
}
void sendstring(unsigned char code *pstr)
{
while(*pstr)
{
send_data(*pstr);
pstr++;
}
}
void main(void)
{
char data delay=10;
unsigned char code *pStr = "中华人民共和国";
P1=0X00;
initial_LCD();
// P3=0;
while (1)
{
clear_LCD();
send_com(0x80);
delay_ms(10);
sendstring(pStr);
// PHO_DISP(TU_TAB1);//显示图形
while(--delay)
delay_ms(250);
// send_com(0x34);
while (1);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -