1602液晶顯示:1,16腳:地
本文引用地址:http://m.butianyuan.cn/article/201611/320416.htm2,15腳:+5
3腳:接滑動(dòng)變阻器,滑動(dòng)變阻器另一端接地
4腳:P4.5(RS)
5腳: P4.6 (RW)
6腳: P4.7(E)
7~14腳:接單片機(jī)的數(shù)據(jù)口P5(D0~D7)
#include<msp430x14x.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) //延時(shí)子程序
{
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) //設(shè)置光標(biāo),顯示狀態(tài)等
{ 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) //將待寫數(shù)據(jù)送到端口
{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) //設(shè)置光標(biāo)所在位置
{
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); //顯示模式設(shè)置
LcdWc(0x08); //顯示關(guān)閉
LcdWc(0x01); //顯示清屏
LcdWc(0x06); //顯示光標(biāo)移動(dòng)位置
LcdWc(0x0c); //顯示開及光標(biāo)設(shè)置
}
int main()
{
WDTCTL=WDTPW+WDTHOLD;
P4DIR=0xff;
RstLcd();
ClrLcd();
WriteString("welcome!",4,0);
}
評(píng)論