字符型 LCD1602 通常有 14 条引脚线或 16 条引脚线的 LCD , 多出来的 2 条线是背光电
源线 VCC(15 脚 ) 和地线 GND(16 脚 ) , 其控制原理与 14 脚的 LCD 完全一样 , 引脚定义如下表
所示:
在这里要特别注意了:MSP430端口输出电压是3.3v的,不是5v的,所以2和15脚要另找5伏电压接上,否则虽然能显示但不清楚而且会出现乱码。
2脚相当于清晰度调节,一般接地就可以,但最好接上可变电阻调节一下。
下面是端口连接:
不多解释了,接上线就行了,下面是C语言程序:
#include <msp430x14x.h>
/*
必要操作:正确连接1602
*/
#define uint unsigned int //定义常用数据类型替代码
#define uchar unsigned char
#define dat P2OUT //定义LCD1602的数据口为P2
#define CLR_RS P1OUT&=~BIT0; //置零P1.0位,也就是置零RS
#define SET_RS P1OUT|=BIT0; //置壹P1.0位,也就是置壹RS
#define CLR_RW P1OUT&=~BIT1; //置零P1.1位,也就是置零RW
#define SET_RW P1OUT|=BIT1; //置壹P1.1位,也就是置壹RW
#define CLR_EN P1OUT&=~BIT2; //置零P1.2位,也就是置零EN
#define SET_EN P1OUT|=BIT2; //置壹P1.2位,也就是置壹EN
uchar busy; //1602判忙标志
void delay_1ms(void); //延时程序
void delay_1s(void); //延时程序
void display(void); //显示程序
void busy_1602(void); //液晶查忙程序
void shj_1602(uchar a); //液晶写数据程序
void init_1602(void); //液晶初始化
void zhl_1602(uchar a); //液晶写指令程序
void main(void) //主程序开始
{
WDTCTL=WDTPW+WDTHOLD;
P1DIR=0xff;
P2DIR=0xff;
while(1)
{
display(); //在大循环内调用显示函数,一直显示
}
}
void delay_1ms(void) //延时程序
{
uchar i,j;
for(i=0;i<10;i++)
for(j=0;j<20;j++);
}
void delay_1s(void) //延时程序
{
int i,j;
for(i=0;i<10;i++)
for(j=0;j<1000;j++);
}
void display(void) //液晶显示程序
{
uchar i; //定义计数值
uchar table0[16]={"What do you want"}; //定义LCD1602显示2行的字符
uchar table1[16]={"I want you now.."};
init_1602(); //初始化1602
zhl_1602(0x80); //写指令
for(i=0;i<16;i++) //发送数据第一行
{
shj_1602(table0[i]);
}
zhl_1602(0xc0);
for(i=0;i<16;i++) //发送数据第二行
{
shj_1602(table1[i]);
}
}
void busy_1602(void) //查询忙碌标志信号程序
{
do
{
CLR_EN;
SET_RW;
CLR_RS;
SET_EN;
busy=dat;
CLR_EN;
delay_1ms();
}
while(busy&&0x10==1);
}
void zhl_1602(uchar a) //写指令到LCM程序
{
busy_1602();
CLR_EN;
CLR_RW;
CLR_RS;
SET_EN;
dat=a;
CLR_EN;
}
void shj_1602(uchar a) //写数据到LCM程序
{
busy_1602();
CLR_EN;
CLR_RW;
SET_RS;
SET_EN;
dat=a;
CLR_EN;
}
void init_1602(void) //启动LCM程序
{
zhl_1602(0x38);
zhl_1602(0x0c);
zhl_1602(0x06);
}