g2553 2线控制液晶128*64 怎么接线呢,包括每个引脚,谢谢
[复制链接]
#include "msp430g2553.h"
#define uchar unsigned char
/*=============================
#define SID P2.1;
#define CLCLK P2.0;
接线:LCD12864的5脚接P2.1
LCD12864的6脚接P2.0
LCD12864的4引脚直接接VCC
==============================*/
#define SID_1 P2OUT|=0x02;
#define SID_0 P2OUT&=~0x02;
#define CLK_1 P2OUT|=0x01;
#define CLK_0 P2OUT&=~0x01;
#define nop _NOP();
char tab[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
//#define nop __no_operation();//可以用这个代替的
void W_str(uchar x,uchar y,uchar *s);
void write_com(uchar x);
void write_data(uchar x);
void write_string(uchar x,uchar y,uchar *s);
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=20;y>0;y--);
}
void W_8bits(uchar W_bits)
{
uchar i,temp;
for(i=0;i<8;i++)
{
temp=W_bits;
temp<<=i;
if((temp&0x80)==0)
{
SID_0;
nop;
CLK_1;
nop;
nop;
CLK_0;
nop;
SID_0;
}
else
{
SID_1;
nop;
CLK_1;
nop;
nop;
CLK_0;
nop;
SID_0;
}
}
}
/*
rw=1 则表示读出
rw=0 则表示输入
rs=1 则表示写数据
rs=0 则表示写命令
W_byte(0,0,x)写命令x;
W_byte(0,1,y)写数据y;
*/
void W_byte(uchar rw,uchar rs,uchar W_data)
{
uchar H_data,L_data,s_id=0xf8;
if(rw==0)
{
s_id&=~0x04;
}
else
{
s_id|=0x04;
}
if(rs==0)
{
s_id&=~0x02;
}
else
{
s_id|=0x02;
}
H_data=W_data;
H_data&=0xf0;
L_data=W_data;
L_data&=0x0f;
L_data<<=4;
W_8bits(s_id);
W_8bits(H_data);
W_8bits(L_data);
}
void lcdinit()
{
delay(10);
W_byte(0,0,0x38);
delay(5);
W_byte(0,0,0x38);
delay(5);
W_byte(0,0,0x0c);
delay(5);
W_byte(0,0,0x01);
delay(5);
W_byte(0,0,0x02);
delay(5);
W_byte(0,0,0x80);
delay(5);
}
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
// unsigned int j;
// char i;
// SP=0x60;//51中必须要的,为什么?
P2DIR=0x03;//就是少了这条指令,导致研究好久!!!
// CS_0;
// P2OUT|=~BIT2;
CLK_0;
SID_0;
lcdinit();
// W_byte(0,1,0x30);说明,这个是说,LCD显示只认识ASCII码
W_str(0,0,"MSP430G2553");
// W_byte(0,0,0x88);//可以用这种方式写指令
// W_str(1,2,"22:52");
write_string(3,4,"Launch Pad");
W_str(0,2,"长江大学");
W_str(2,3,"创新基地");
write_com(0x98);
write_data(tab[2]);
while(1);
/* while(1)
{
for(i=0;i<16;i++);
{
W_byte(0,0,0x98);
for(j=0;j<60000;j++);
W_byte(0,1,tab);
for(j=0;j<60000;j++);
}
}*/
}
/*很神奇的一个函数,可以输入字符串,不管是汉字还是字母表*/
/*
x代表偏移量
y代表第几行
*S是字符串的指针
*/
void W_str(uchar x,uchar y,uchar *s)
{
switch(y)
{
case 1:W_byte(0,0,0x80+x);break;//0x80是第一行起始位置
case 2:W_byte(0,0,0x90+x);break;//0x90是第二行起始位置
case 3:W_byte(0,0,0x88+x);break;//0x88是第三行起始位置
case 4:W_byte(0,0,0x98+x);break;//0x98是第四行起始位置
default:W_byte(0,0,0x80+x);//否则都当成第一行处理
}
while(*s)
{
W_byte(0,1,*s);
s++;
}
}
void write_com(uchar x)
{
W_byte(0,0,x);
}
void write_data(uchar x)
{
W_byte(0,1,x);
}
void write_string(uchar x,uchar y,uchar *s)
{
switch(y)
{
case 1:W_byte(0,0,0x80+x);break;//0x80是第一行起始位置
case 2:W_byte(0,0,0x90+x);break;//0x90是第二行起始位置
case 3:W_byte(0,0,0x88+x);break;//0x88是第三行起始位置
case 4:W_byte(0,0,0x98+x);break;//0x98是第四行起始位置
default:W_byte(0,0,0x80+x);//否则都当成第一行处理
}
while(*s)
{
W_byte(0,1,*s);
s++;
}
}
|