1602液晶显示:
1,16脚:地
2,15脚:+5
3脚:接滑动变阻器,滑动变阻器另一端接地
4脚:P4.5(RS)
5脚: P4.6 (RW)
6脚: P4.7(E)
7~14脚:接单片机的数据口P5(D0~D7)
#includemsp430x14x.h>
#define RS_HIGN P4OUT|=BIT5 //P4.5
#define RS_LOW P4OUT&=~BIT5
#define RW_HIGN P4OUT|=BIT6 //P4.6
#define RW_LOW P4OUT&=~BIT6
#define E_HIGN P4OUT|=BIT7 //P4.7
#define E_LOW P4OUT&=~BIT7
void LcdPos(char,char);
void LcdWd(char);
void LcdWc(char);
void LcdWcn(char);
void Delay(char);
void WaitIdle();
void Delay(char wDelay) //延时子程序
{
while(wDelay!=0)
wDelay--;
}
void WriteChar(char c,char x,char y)
{
LcdPos(x,y);
LcdWd(c);
}
void WriteString(char *s,char x,char y)
{
char i;
if(*s==0)
return;
for(i=0;;i++)
{
if(*(s+i)==0)
break;
WriteChar(*(s+i),x,y);
x++;
if(x>15)
break;
}
}
void SetCur(char Para) //设置光标,显示状态等
{ Delay(2);
switch(Para)
{case 0:
{LcdWc(0x08);
break;}
case 1:
{LcdWc(0x0c);
break;}
case 2:
{LcdWc(0x0e);
break;}
case 3:
{LcdWc(0x0f);
break;}
default:
break;
}
}
void ClrLcd()
{
LcdWc(0x01);
}
void WaitIdle()
{
char temp;
P5DIR &=0;
RS_LOW;//RS=0;
RW_HIGN;//RW=1;
Delay(1000);
for(;;)
{
E_HIGN;//E=1;
temp=P5IN;
E_LOW;//E=0
temp&=0x80;
if(temp==0)
{P5DIR=0xff;
break;}
}
}
void LcdWd(char c) //将待写数据送到端口
{WaitIdle();
P5DIR=0xff;
RS_HIGN;//RS=1;
RW_LOW;//RW=0;
P5OUT=c;
E_HIGN;//E=1;
Delay(2000);
E_LOW;//E=0;
}
void LcdWc(char c)
{
WaitIdle();
LcdWcn(c);
}
void LcdWcn(char c ) //送控制字子程序
{ P5DIR=0xff;
RS_LOW;//RS=0;
RW_LOW;//RW=0;
P5OUT=c;
E_HIGN;//E=1;
Delay(1000);
E_LOW;//E=0;
}
void LcdPos(char x,char y) //设置光标所在位置
{
unsigned char temp;
x &=0x0f;
y &=0x01;
if(y==0)
temp=x;
else
temp=x+0x40;
temp |=0x80;
LcdWc(temp);
}
void RstLcd()
{ Delay(10000);
LcdWc(0x38); //显示模式设置
LcdWc(0x08); //显示关闭
LcdWc(0x01); //显示清屏
LcdWc(0x06); //显示光标移动位置
LcdWc(0x0c); //显示开及光标设置
}
int main()
{
WDTCTL=WDTPW+WDTHOLD;
P4DIR=0xff;
RstLcd();
ClrLcd();
WriteString("welcome!",4,0);
}