只需要2跟线就可以实现12864的串行显示,节约了io口,不过提醒大家,要串行显示首先要对液晶做手术,一般买来的都是默认的并行显示,要串行显示就要接上一个零欧姆电阻,我也不知道0欧姆电阻和没接有什么区别,但是就是必须焊接上去,具体哪个不同的液晶可能不同,不过应该都差不多的,我的液晶是R10.焊上去后就可以啦
下面是.c文件,另外还有两个.h文件,.h文件在下面
#include "lcd12864.h"
uchar table0[16]="您好,欢迎光临!";
uchar table1[16]="
电子信息工程学院";
uchar table2[16]="创新实验室 sj618";
uchar table3[16]="这是12864 液晶屏";
void main()
{
// Stop watchdog
timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
//主系统时钟切换为外部高速晶振
if (CALBC1_8MHZ == 0xFF || CALDCO_8MHZ == 0xFF)
{
while(1); // If calibration constants erased, trap CPU!!
}
// Configure Basic Clock
BCSCTL1 = CALBC1_8MHZ; // Set range
DCOCTL = CALDCO_8MHZ; // Set DCO step + modulation*/
init_lcd();//初始化液晶屏
delay(10);
while(1)
{
display_12864(1,0,table0);
display_12864(2,0,table1);
display_12864(3,0,table2);
display_12864(4,0,table3);
}
}
#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
);
}
}
#endif
#ifndef __DELAY_H__
#define __DELAY_H__
#define uchar unsigned char
#define uint unsigned int
//1ms延时程序 8M晶振
void delay(uint z)
{
unsigned int i,j;
for(i = 0;i<2200;i++)
for(j=0;j
{;;};
}
#endif