https://static.assets-stash.eet-china.com/album/old-resources/2008/9/20/49e8c80e-8530-4d1d-98eb-ef0d63b34dac.rar#ifndef _LCD12864_H_
#define _LCD12864_H_
/****------------------------------------------------****/
#include"intrins.h"
#define LCD_Data P0
sbit A0 = 0x94;
sbit EP = 0x93;
sbit RW = 0x92;
sbit RES =0x90;
#define Busy 0x80
/*
数据线接 P0
RESET P1_0
A0 P1_4
RW P1_2
EP P1_3
*/
//========================================================================
// 描述: 写一个字节的数据至LCD中的控制寄存器当中
// 参数: Command 写入的数据,低八位有效(byte)
//========================================================================
void sendorder(unsigned char Command)
{
// RES =1;
A0 = 0;
RW = 0;
LCD_Data = Command;
EP = 0;
EP = 1;
}
//========================================================================
// 描述: 写一个字节的显示数据至LCD中的显示缓冲RAM当中
// 参数: Data 写入的数据
//========================================================================
void senddata(unsigned char Dat)
{
// RES = 1;
A0 = 1;
RW = 0;
LCD_Data = Dat;
EP = 0;
EP = 1;
}
//========================================================================
// 描述: 从LCD中的显示缓冲RAM当中读一个字节的显示数据
//========================================================================
unsigned char Data_Read(void)
{
unsigned char Read_Data;
A0 = 1;
RW = 1;
EP = 0;
EP = 1;
LCD_Data = 0xff;
EP = 0;
EP = 1;
Read_Data = LCD_Data;
//SPLC501在读出数据时需要连续两次读操作方可读出
return Read_Data;
}
//========================================================
//页设置子函数
//========================================================
void setpage(unsigned char a)
{
a|=0xb0;
sendorder(a);
}
//========================================================
//列设置子函数
//========================================================
void setaddr(unsigned char addr)
{
unsigned char a,b;
a=addr;
a&=0x0f;
b=addr>>4;
b|=0x10;
sendorder(a);
sendorder(b);
}
//========================================================
//清屏子函数 fill ROM with 0 or 1
//========================================================
void ClearScreen( unsigned char a)
{
unsigned char z1,z2;
if(a!=0) a="0xff";
for(z1=0;z1<8;z1++)
{
setpage(z1);
setaddr(0);
for(z2=0;z2<128;z2++)
{
senddata(a);
}
}
}
/**-------------------------------------------------------------------------**/
//========================================================
//初始化LCD
//========================================================
void InitGraphic(void)
{
LCD_Data =0x00; //端口初始化
sendorder(0xaf); //LCD_ON /*显示开关指令 Display ON*/
sendorder(0x2f); //上电模式
sendorder(0x81); //电量设置模式(屏幕亮度) //0x81-0xff
sendorder(0x30); //指令数据
sendorder(0x27); //内部电压调节电阻设置 //0x20-0x27
sendorder(0xa2); //偏压设置 // 1/9偏压
sendorder(0xc8); //Com 扫描方式设置(0xc8反向)
sendorder(0xa0); //Segment方向选择(0xa1反向)
sendorder(0xa4); //全屏变亮(0xa5变亮)
sendorder(0xa6); //正相反相显示控制指令,RAM中数据不变(0xa7)
sendorder(0xac); //静态指示器控制指令(0xad为on)
sendorder(0x00);
sendorder(0x40); //设置显示起始行对应RAM行号
ClearScreen(0);
}
/*------------------------------------------------------------------------------------------------------*/
#endif
用户204701 2009-6-3 19:41