lcd.c

来自「基于8051的驱动源码.包括STN LCD driver, I2C driver」· C语言 代码 · 共 129 行

C
129
字号
//
//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 + =
减小字号Ctrl + -
显示快捷键?