📄 lcd.c
字号:
//
//YM12864R
//LCD: STN
//
//
#include "type.h"
#include "reg52.h"
#include "common.h"
/*
P1.0 RS(CS)
P1.1 R/W(SID)
P1.2 E(SCLK)
P1.3 PSB
P1.4 /RST
DB0~7 P0
*/
#define LCDCOM_CLEAR 0x01
#define LCDCOM_ADDR0 0x02
sbit RS = P1^0;
sbit RW = P1^1;
sbit E = P1^2;
sbit PSB = P1^3;
sbit RST = P1^4;
void LcdWriteCommand(S_BYTE command)
{
RS = 0x0;//command
RW = 0x1;
DelayUs(0);
RW = 0x0;//write
E = 0x1;
P0 = command;
DelayUs(0);
E = 0x0;
}
S_BYTE LcdReadCommand(void)
{
S_BYTE command;
RS = 0x0;//command
RW = 0x0;
DelayUs(0);
RW = 0x1;//read
E = 0x1;
P0 = 0xFF;
DelayUs(0);
command = P0;
E = 0x0;
return command;
}
void LcdWriteData(S_BYTE Data)
{
RS = 0x1;//data
RW = 0x1;
DelayUs(0);
RW = 0x0;//write
E = 0x1;
P0 = Data;
DelayUs(0);
E = 0x0;
}
S_BYTE LcdReadData(void)
{
S_BYTE Data;
RS = 0x1;//data
RW = 0x0;
DelayUs(0);
RW = 0x1;//read
DelayUs(0);
E = 0x1;
P0 = 0xFF;
DelayUs(0);
Data = P0;
E = 0x0;
return Data;
}
void LcdInit(void)
{
DelayMs(50);
// RST = 0x0;//reset
// DelayMs(1);
// RST = 0x1;
// DelayMs(50);
PSB = 0x1;//select parallel
LcdWriteCommand(0x30);//graphics mode
// LcdWriteCommand(0x34);//LCD off
LcdWriteCommand(0x36);//LCD on
E = 0x0;
}
void LcdWriteDRAM(S_BYTE x, S_BYTE y, S_WORD Data)
{
// LcdWriteCommand(0x34);//LCD off
LcdWriteCommand(0x80+y);
LcdWriteCommand(0x80+x);
LcdWriteData((S_BYTE)(Data>>8));
LcdWriteData((S_BYTE)Data);
// LcdWriteCommand(0x36);//LCD on
}
S_WORD LcdReadDRAM(S_BYTE x, S_BYTE y)
{
S_WORD Data;
LcdWriteCommand(0x80+y);
LcdWriteCommand(0x80+x);
LcdReadData();//dummy read
Data = LcdReadData();
Data <<= 8;
Data += LcdReadData();
return Data;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -