////*****重庆三峡学院
电子与信息工程学院 创新实验室 唐老鸭*****////
#ifndef __LCD12864_H__
#define __LCD12864_H__
#include "msp430g2553.h"
#include "delay.h"
#define rw_out P1DIR|=BIT0
#define rw_h P1OUT|=BIT0
#define rw_l P1OUT&=~BIT0
#define en_out P1DIR|=BIT1
#define en_h P1OUT|=BIT1
#define en_l P1OUT&=~BIT1
uint Strlen(uchar *p)
{
uint i;
for(i=0;*(p+i);i++);
return i;
}
void WriteBytes(uchar *p)
{
uchar i,j,temp;
en_out;
rw_out;
en_l;
for(j=0;j<3;j++)
{
temp=p[j];
for(i=0;i<8;i++)
{
if(temp & 0x80)
rw_h;
else rw_l;
en_h;
delay(1);
en_l;
temp<<=1;
}
}
rw_h;
}
void SerialWriteData(uchar send)
{
uchar data[3];
data[0]=0xfa ; //1111 1010向液晶写数据
data[1]=send & 0xf0; //取高4位
data[2]=(send<<4)&0xf0; //取低4位
WriteBytes(data);
}
void SerialWriteCmd(uchar send)
{
uchar data[3];
data[0]=0xf8 ; //1111 1000向液晶写命令
data[1]=send & 0xf0; //取高4位
data[2]=(send<<4) & 0xf0; //取低4位
WriteBytes(data);
}
void init_lcd()
{
en_out;
rw_out;
SerialWriteCmd(0x0C);//显示开,关闭游标和游标位置
SerialWriteCmd(0x06);
SerialWriteCmd(0x01);//清除显示,等待命令
}
void display_12864(uchar hang,uchar lie,uchar *p)
{
uchar i;
switch(hang)
{
case 1:SerialWriteCmd(0x80+lie);break;
case 2:SerialWriteCmd(0x90+lie);break;
case 3:SerialWriteCmd(0x88+lie);break;
case 4:SerialWriteCmd(0x98+lie);break;
}
for(i=0;i<16;i++)
{
SerialWriteData(p[i]);
}
}
#endif
5