//sed1335指令代码
#define SYSTEM_SET 0x40
#define SLEEP_IN 0x53
#define DISPON 0x59
#define DISPOFF 0x58
#define SCROLL 0x44
#define CSRFORM 0x5D
#define CGRAMADR 0x5C
#define CSRDIR_UP 0x4E
#define CSRDIR_DOWN 0x4F
#define CSRDIR_LEFT 0x4D
#define CSRDIR_RIGHT 0x4C
#define HDOTSCR 0x5A
#define OVLAY 0x5B
#define CSRW 0x46
#define CSRR 0x47
#define MWRITE 0x42
#define MREAD 0x43
#define SAD1 0x0000 /*定义显示一区首址*/
#define SAD1L 0x00 /*定义显示一区首址低8位*/
#define SAD1H 0x00 /*定义显示一区首址高8位*/
#define SL1 239 /*定义显示一区所占显示屏幕的行数*/
#define SAD2 0x4000 /*定义显示二区首址*/
#define SAD2L 0x00 /*定义显示二区首址低8位*/
#define SAD2H 0x40 /*定义显示二区首址高8位*/
#define SL2 239 /*定义显示二区所占显示屏幕的行数*/
#define SAD3 0x8000 /*定义显示三区首址*/
#define SAD3L 0x00 /*定义显示三区首址低8位*/
#define SAD3H 0x00 /*定义显示三区首址高8位*/
#define SAD4 0x0000 /*定义显示四区首址*/
#define SAD4L 0x00 /*定义显示四区首址低8位*/
#define SAD4H 0x00 /*定义显示四区首址高8位*/
//间接控制信号定义
sbit RS = P3^0;
sbit RD = P3^1;
sbit WR = P3^2;
//SYSTME SET参数
uchar code SYSTEM_SET_CODE[8] = {0x30,0x87,0x07,0x27,0x42,0xF0,0x30,0x00};
//SCROLL参数
uchar code SCROLL_SET_CODE[10] =
{SAD1L,SAD1H,SL1,SAD2L,SAD2H,SL2,SAD3L,SAD3H,SAD4L,SAD4H};
void main(void);
void LCDInit(void);
void LCDClear(void);
void WCODE(uchar COM);
void WDATA(uchar DAT1);
uchar RDATA();
void Delay(uint tt);
void main()
{
WDTCN = 0xDE; //关看门狗定时器
WDTCN = 0xAD;
SFRPAGE = CONFIG_PAGE;
XBR2 = 0x40;
OSCICN = 0xC0; //设置系统时钟为3Mhz
CLKSEL = 0x00;
Delay(1000);
LCDInit();
LCDClear();
}
void Delay(uint tt) /* 延时函数 */
{
uchar i;
do
{
for (i=0;i <125;i++);
}
while((tt--)!=0);
}
//初始化子程序
void LCDInit(void)
{
int j ;
WCODE(SYSTEM_SET); //写SYSTEM SET指令和参数
for (j=0; j <8; j++)
{
WDATA(SYSTEM_SET_CODE[j]);
}
WCODE(SCROLL); //写SCOLL指令和参数
for (j=0; j <10; j++)
{
WDATA(SCROLL_SET_CODE[j]);
}
WCODE(HDOTSCR); //写HDOTSCR指令和参数
WDATA(0x00);
WCODE(OVLAY); //写OVLAY指令和参数
WDATA(0x00);
WCODE(DISPON); //写DISPON指令和参数
WDATA(0x54);
}
//清屏子程序
void LCDClear(void)
{
int i, k; //设置循环量
WCODE(CSRDIR_RIGHT); //写入CSRDIR指令
WCODE(CSRW); //写入CSRW指令
WDATA(0x00); //写入参数CSRL
WDATA(0x00); //写入参数CSRH
WCODE(MWRITE); //写入MWRITE指令
for (i=0; i <127; i++) //循环
{
for (k=0; k <127; k++)
WDATA(0x00); //写入显示数据为0
}
}
//写指令代码子程序
void WCODE(uchar COM)
{
P1 = COM;
RS = 1;
WR = 0;
WR = 1;
}
//写参数及显示数据子程序
void WDATA(uchar DAT1)
{
P1 = DAT1;
RS = 0;
WR = 0;
WR = 1;
}
//读参数及显示数据子程序
uchar RDATA()
{
uchar DAT1;
RS = 1;
P1 = 0xFF;
RD = 0;
DAT1 = P1;
RD = 1;
return (DAT1);
}