#include<msp430x24x.h>
#include"lcd.h"
#include"clk.h"
#define SETCS1 P3OUT|=BIT0;
#define CLRCS1 P3OUT&=~BIT0;
#define SETCS2 P3OUT|=BIT1;
#define CLRCS2 P3OUT&=~BIT1;
#define SETRS P3OUT|=BIT2;
#define CLRRS P3OUT&=~BIT2;
#define SETRW P3OUT|=BIT3;
#define CLRRW P3OUT&=~BIT3;
#define SETE P3OUT|=BIT4;
#define CLRE P3OUT&=~BIT4;
#define SETRST P3OUT|=BIT5;
#define CLRRST P3OUT&=~BIT5;
/*LCD的相关初始化*/
void checkbusy()//读状态
{
P4DIR=0x00;//定一P4为输入
P3DIR=0XFF;
CLRRS;
SETRW;
_NOP();
SETE;
while((P4IN&0X90)!=0);
CLRE;
P4DIR=0XFF;
}
void wr(uchar flag,uchar shu)//flag为1写数据,为0写指令
{
checkbusy();
P4DIR=0XFF;
P3DIR=0XFF;
if(flag==1)
SETRS;
if(flag==0)
CLRRS;
CLRRW;
P4OUT=shu;
SETE;
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
CLRE;
}
void lat_disp(uchar dat1,uchar dat2)//点阵显示
{
uchar i,j;
P3DIR=0XFF;
CLRCS1;//左半屏
CLRCS2;//右半屏
wr(0,0x3f);//开显示
for(i=0;i<8;i++)
{
wr(0,0xb8+i);//页地址
wr(0,0xc0);//行起始显示
wr(0,0x40);//列显示
for(j=0;j<32;j++)
{
wr(1,dat1);
wr(1,dat2);
}
}
}
void disp_datl1(uchar dat1,uchar j)//点阵显示
{
//uchar i;
P3DIR=0XFF;
CLRCS1;//左半屏
SETCS2;//右半屏
wr(0,0x3f);//开显示
wr(0,0xb8+3);//页地址
wr(0,0xc0);//行起始显示
wr(0,0x40+j);//列显示
wr(1,dat1);
}
void disp_datl2(uchar dat1,uchar j)//点阵显示
{
//uchar i;
P3DIR=0XFF;
CLRCS1;//左半屏
SETCS2;//右半屏
wr(0,0x3f);//开显示
wr(0,0xb8+4);//页地址
wr(0,0xc0);//行起始显示
wr(0,0x40+j);//列显示
wr(1,dat1);
}
void disp_datl3(uchar dat1,uchar j)//点阵显示
{
P3DIR=0XFF;
CLRCS1;//左半屏
SETCS2;//右半屏
wr(0,0x3f);//开显示
wr(0,0xb8+5);//页地址
wr(0,0xc0);//行起始显示
wr(0,0x40+j);//列显示
wr(1,dat1);
}
void disp_datr1(uchar dat1,uchar j)//点阵显示
{
P3DIR=0XFF;
SETCS1;//左半屏
CLRCS2;//右半屏
wr(0,0x3f);//开显示
wr(0,0xb8+3);//页地址
wr(0,0xc0);//行起始显示
wr(0,0x40+j);//列显示
wr(1,dat1);
}
void disp_datr2(uchar dat1,uchar j)//点阵显示
{
P3DIR=0XFF;
CLRCS2;//左半屏
SETCS1;//右半屏
wr(0,0x3f);//开显示
wr(0,0xb8+4);//页地址
wr(0,0xc0);//行起始显示
wr(0,0x40+j);//列显示
wr(1,dat1);
}
void disp_datr3(uchar dat1,uchar j)//点阵显示
{
P3DIR=0XFF;
CLRCS2;//左半屏
SETCS1;//右半屏
wr(0,0x3f);//开显示
wr(0,0xb8+5);//页地址
wr(0,0xc0);//行起始显示
wr(0,0x40+j);//列显示
wr(1,dat1);
}
void dispx(uchar dat1,uchar dat2,uchar dat3,uchar dat4)//点阵显示坐标轴x
{
uchar k,n;
P3DIR=0XFF;
CLRCS1;//左半屏
CLRCS2;//右半屏
wr(0,0x3f);//开显示
for(k=0;k<3;k++)
{
wr(0,0xb8+k);//页地址
wr(0,0xc0);//行起始显示
wr(0,0x40);//列显示
for(n=0;n<63;n++)
{
wr(1,dat1);
}
}
for(k=4;k<8;k++)
{
wr(0,0xb8+k);//页地址
wr(0,0xc0);//行起始显示
wr(0,0x40);//列显示
for(n=0;n<63;n++)
{
wr(1,dat1);
}
}
wr(0,0xb8+3);//页地址3
wr(0,0xc0);//行起始显示
wr(0,0x40);//列显示
for(n=0;n<32;n++)
{
wr(1,dat3);
wr(1,dat4);
}
}
void dispy(uchar dat3,uchar dat4,uchar dat5,uchar dat6)//显示坐标轴x
{
uchar m;
for(m=0;m<8;m++)
{
CLRCS1;
SETCS2;
wr(0,0xb8+m);
wr(0,0xc0);
wr(0,0x7f);
wr(1,dat3);
}
}
void wr_char(uchar x,uchar y,uchar x1,uchar y1,uchar *ch)//显示汉字
{
uchar i,j,k,l,a;
wr(0,0x3f);
CLRCS1;
SETCS2;
for(l=0;l<x1;l++)
{
for(k=0;k<y1;k++)
{
for(j=0;j<x;j++)
{
wr(0,0xb8+l*x+j);
wr(0,0xc0);
wr(0,0x40+k*y);
a=l*x*y*y1+k*x*y+j*y;
for(i=0;i<y;i++)
wr(1,ch[a+i]);
}
}
}
}
void wr_shu(uchar x1,uchar x2,uchar x3,uchar x4,uchar *ch)//显示shu字
{
uchar i,j;
wr(0,0x3f);
SETCS1;
CLRCS2;
for(i=0;i<4;i++)
{ wr(0,0xb8);
wr(0,0xc0);
wr(0,0x40+5*i);
for(j=0;j<5;j++)
switch (i)
{
case 0:wr(1,ch[5*x1+j]);break;
case 1:wr(1,ch[5*x2+j]);break;
case 2:wr(1,ch[5*x3+j]);break;
case 3:wr(1,ch[5*x4+j]);break;
}
}
}
void init_lcd()//初始化
{
P3DIR=0XFF;
CLRRST;
delay(0x64);
SETRST;
CLRCS1;
CLRCS2;
wr(0,0x3e);
wr(0,0x3f);
}