MSP430F5529与LCD1602显示模块(上)

发布者:姑苏清风泉源客最新更新时间:2020-02-24 来源: eefocus关键字:MSP430F5529  LCD1602  显示模块 手机看文章 扫描二维码
随时随地手机看文章

LCD1602介绍

外观

LCD1602外观1

LCD1602外观2

主要技术参数

显示容量: 16X2个字符


芯片工作电压: 4.5~5.5V


工作电流: 2.0mA(5.0V)


模块最佳工作电压: 5.0V


字符尺寸: 2.95X4.35(WXH)mm


接口说明

并口传输模式

VSS 电源地


VDD 电源正极(5V)


V0 液晶显示偏压信号


RS 数据/命令选择端(H/L)


RW 读/写选择端(H/L)


E 使能信号


D0 Data I/O


D1 Data I/O


D2 Data I/O


D3 Data I/O


D4 Data I/O


D5 Data I/O


D6 Data I/O


D7 Data I/O


A 背光源正极


K 背光源负极


IIC/I2C模式

GND 电源地


VCC 电源正极(5V)


SDA 数据I/O口


SCL 数据时钟


单片机实现

并口传输模式

基本操作时序:

读状态:


输入:RS=L,RW=H,E=H


输出:D0~D7=状态字


写指令:


输入:RS=L,RW=L,D0~D7=指令码,E=高脉冲


输出:无


读数据:


输入:RS=H,RW=H,E=H


输出:DO~D7=数据


写数据:


输入:RS=H,RW=L,D0~D7=数据,E=高脉冲


输出:无


RAM地址映射图:

RAM地址映射图

指令说明

1、清屏指令(clear display) RS=L,RW=L,D0~D7=0000_0001


功能:


清除液晶显示器,即将DDRAM中的内容全部填入20H(空白字符)


光标撤回至显示屏左上角


将地址计数器(AC)设为0


光标移动方向为从左向右,并且DDRAM的自增量为1(I/D=1)

清屏指令

2、光标归位指令(Return Home)RS=L,RW=L,D0~D7=0000_001X


功能:


将地址计数器(AC)设为00H


DDRAM内容保持不变,光标移至左上角

光标归位指令

3、进入模式设置指令(Entry Mode Set)


功能:


设定每次写入1位数据后光标移位方向并且设定光标每次写入一个字符后是否移动 。


I/D = 0时光标左移,DDRAM地址自增1


I/D = 1时光标右移,DDRAM地址自增1(当从CGRAM中读取或写入数据时,CGRAM操作与DDRAM相同)


SH = 0 且 DDRAM是读操作(CGRAM读或写),整个屏幕不移动


SH = 1 且DDRAM是写操作,整个屏幕移动,移动方向由I/D决定。

进入模式设置指令

4、显示开关控制(Display ON/OFF Control)


功能:


D = 1 , 显示功能开


D = 0 , 显示功能关,但是DDRAM中的数据依然保留


C = 1 , 有光标


C = 0 , 没有光标


B = 1 , 光标闪烁


B = 0 , 光标不闪烁

显示开关控制

5、设置显示屏或光标移动方向的指令


功能:


整屏的移动或光标移动

S/C =0 R/L =0 光标左移 ,地址计数器减1(即显示内容和光标一起左移)


S/C =0 R/L =1 光标右移 ,地址计数器加1(即显示内容和光标一起右移)


S/C =1 R/L =0 显示内容左移 ,光标不移动


S/C =1 R/L =1 显示内容右移 ,光标不移动

设置显示屏或光标移动方向的指令

6、功能设定指令


功能:


设定数据总线位数、显示的行数及字形。


DL=1 ,数据总线是8位


DL=0 ,数据总线是4位


N=0 ,显示一行


N=1 ,显示两行


F=0 ,5*8 点阵/字符


F=1 ,5*11点阵/字符

功能设定指令

7.设置DDRAM(光标)地址

设置DDRAM(光标)地址

功能:


设置地址计数器AC的值,实则上是设置光标所在的位置。


DDRAM的地址与显示屏对照关系(N=LOW)

DDRAM的地址与显示屏对照关系

八线模式单片机实现代码

非常感谢MSP430F5529&LCD1602程序的作者Aliqiji提供思路和代码!


端口操作宏定义

#define DataDir     P3DIR //D0~D7分别对应P3.0-P3.7

#define DataPort    P3OUT


#define CLR_RS P1OUT&=~BIT3;    //RS = P1.3

#define SET_RS P1OUT|=BIT3;

#define CLR_RW P1OUT&=~BIT4;    //RW = P1.4

#define SET_RW P1OUT|=BIT4;

#define CLR_EN P1OUT&=~BIT5;    //EN = P1.5

#define SET_EN P1OUT|=BIT5;


初始化端口

void GPIO_init(){


        P1DIR |= BIT3+BIT4+BIT5;        //控制线端口设为输出状态

        DataDir  = 0xFF;


}


精确延时

void delay_ms(unsigned int ms){ //For MSP430F5529

    for(;ms>0;ms--) __delay_cycles(1000);

}


写指令

void LCD1602_WriteCMD(unsigned char cmd)

{

        CLR_EN;

        CLR_RS;     //指令

        CLR_RW;     //写

        DataPort=cmd;   //指令数据传到P0口待发送给LCD1602

        SET_EN;     

        CLR_EN;     //产生下降沿

delay_ms(1);

}


写数据

void LCD1602_WriteDATA(unsigned char Data)

    {

        CLR_EN;

        SET_RS; //数据

        CLR_RW; //写

        DataPort=Data;

        SET_EN;

        CLR_EN; //产生下降沿

        delay_ms(1);

    }


LCD1602初始化

void LCD1602_Init()

    {

        GPIO_init();

LCD1602_WriteCMD(0x38); //  置功能,8位总线,双行显示,显示5X7的点阵字符

        LCD1602_WriteCMD(0x0f); //  显示开关控制,开显示, 有光标,闪烁

        LCD1602_WriteCMD(0x06); //  光标和显示位置设置,  光标移动方向右移,屏幕上所有文字不动

        LCD1602_WriteCMD(0x01); //  清显示,指令码01H,光标复位到地址00H位置

delay_ms(10);

    }


在当前指针位置显示单个字符

void DispChar(unsigned char data)

{

    LCD1602_WriteDATA(data);

}


在当前指针位置显示字符串

void DispStr(unsigned char *str)

{

while(*str != 0){

        DispChar(*str++);

    }

}


设置指针位置

这部分的内容在前文指令说明中***设置DDRAM(光标)地址*** 处有所提及。


设置指针在第一行最左端


    LCD1602_WriteCMD(0x80);


设置指针在第二行最左端


    LCD1602_WriteCMD(0x80 + 0x40);


四线模式单片机实现代码

在显示速度要求不高的情况下,八线并口模式占用了过多的单片机管脚,如果管脚资源紧张,可以试一试使用四线模式。


四线模式是指只使用数据端口D4~D7完成与八线模式一样的操作,但不同的是,四线模式只能写而不能读。


四线模式的时序操作与八线模式不同点在于,一个指令或者一个数据,需要传输两次,也就是EN产生两次下降沿,第一次下降沿的时候传输高四位数据,第二次下降沿的时候传输低四位数据。


那么,我们应该怎么修改上述代码来实现四线模式呢~请看下文


端口操作宏定义

#define DataDir     P3DIR 

#define DataPort    P3OUT


#define CLR_RS P1OUT&=~BIT3;    //RS = P1.3

#define SET_RS P1OUT|=BIT3;

#define CLR_RW P1OUT&=~BIT4;    //RW = P1.4

#define SET_RW P1OUT|=BIT4;

#define CLR_EN P1OUT&=~BIT5;    //EN = P1.5

#define SET_EN P1OUT|=BIT5;


初始化端口

由于我当时写的综合代码中,P3.4端口被占用,所以我采用了P3.0,P3.5,P3.6,P3.7四个端口作为数据口。


void GPIO_init(){


        P1DIR |= BIT3+BIT4+BIT5;        //控制线端口设为输出状态

        DataDir  = BIT0+BIT5+BIT6+BIT7;


}


设置数据端口

void Set_DataPort(unsigned char Data){

    if(Data&BIT4) P3OUT |= BIT0;

    else P3OUT &= ~BIT0;

    if(Data&BIT5) P3OUT |= BIT5;

    else P3OUT &= ~BIT5;

    if(Data&BIT6) P3OUT |= BIT6;

    else P3OUT &= ~BIT6;

    if(Data&BIT7) P3OUT |= BIT7;

    else P3OUT &= ~BIT7;

}


写指令

void LCD1602_WriteCMD(unsigned char cmd)

{

        CLR_EN;

        CLR_RS;     //指令

        Set_DataPort(cmd&0b11110000);   //指令数据传到P0口待发送给LCD1602

        SET_EN;     //LCD1602使能口

        CLR_EN;     //产生下降沿

        Set_DataPort((cmd&0b00001111)<<4);   //指令数据传到P0口待发送给LCD1602

        SET_EN;

        CLR_EN

        delay_ms(1);

}


写数据

void LCD1602_WriteDATA(unsigned char data)

{

        CLR_EN;

        SET_RS;     //指令

        Set_DataPort(data&0b11110000);   //数据传到P0口待发送给LCD1602

        SET_EN;     //LCD1602使能口

        CLR_EN;     //产生下降沿

        Set_DataPort((data&0b00001111)<<4);   //数据传到P0口待发送给LCD1602

        SET_EN;

        CLR_EN

        delay_ms(1);

}


LCD1602初始化

void LCD1602_Init()

    {

        GPIO_init();

        LCD1602_WriteCMD(0b00101000); //  置功能,4位总线,双行显示,显示5X7的点阵字符  //00101000

        LCD1602_WriteCMD(0b00001100); //  显示开关控制,开显示, 有光标,闪烁

        LCD1602_WriteCMD(0b00000110); //  光标和显示位置设置,  光标移动方向右移,屏幕上所有文字不动

        LCD1602_WriteCMD(0b00000001); //  清显示,指令码01H,光标复位到地址00H位置

delay_ms(10);

    }


单片机接线

接线按照1.3接口说明以及代码中所选择的端口接即可,背光源A、K一般情况下是不用接的。


特别要说明的是,V0(液晶显示偏压信号)的接线,数据手册中说它要接一个电位器到地以调节对比度,如下图所示。

调节对比度

所以我们可以把它接到MSP430F5529的拨码电位器(P6.5)上,接上之后就可以通过拨动拨码电位器调节屏幕的对比度啦!


结语

通过学习LCD1602的操作,我们可以了解到单片机与外设间进行并口通信的一般原理。并口通信速度快,但是占用的管脚多,接线麻烦,在管脚资源紧张的情况下还会导致很多其他的问题,虽然LCD1602提供的四线模式可以在一定程度上缓和这种矛盾,但是有没有其他更省管脚资源的方法呢?答案是有的,那就是采用串口通信,下篇文章我将讲讲利用I2C协议与LCD1602进行串口通信~

关键字:MSP430F5529  LCD1602  显示模块 引用地址:MSP430F5529与LCD1602显示模块(上)

上一篇:MSP430G2553、F5529、FR5994+LCD1602八位液晶显示程序
下一篇:LCD1602动态显示--基于MSP430F149单片机

推荐阅读最新更新时间:2024-11-03 16:10

3G手机显示屏和照相机模块的ESD保护
丰富多媒体业务推动3G手机中LCD显示屏和照相机的分辨率走上一个又一个新台阶。不过,将显示屏和照相模块连接到基带电路或者多媒体处理器之间的接口设计将面临更严重的ESD、EMI问题。下面讨论的来自意法半导体(ST)的方案将有助于解决这个问题。 丰富多媒体业务推动3G手机中LCD显示屏和照相机的分辨率走上一个又一个新台阶。不过,将显示屏和照相模块连接到基带电路或者多媒体处理器之间的接口设计将面临更严重的ESD、EMI问题。下面讨论的来自意法半导体(ST)的方案将有助于解决这个问题。 为解决这些问题,有些显示器厂商、半导体厂商和相机模块厂商都开发了高速串行总量技术来帮助设计工程师从繁杂的并行总线设计中解脱出来。
[手机便携]
3G手机<font color='red'>显示</font>屏和照相机<font color='red'>模块</font>的ESD保护
单片机学习——lcd1602显示实验之二
题目:在LCD1602显示屏上显示满足条件: 1、在第一行显示 000-999 CLOCK 2、在第二行末尾显示 BY XIAO WU 3、在第二行起首用三位显示000-999跑表 4、循环下去 解决方案:(C语言编程) #include reg52.h #define uchar unsigned char #define uint unsigned int uchar code table = 000-999 CLOCK ; uchar code table1 = BY XIAO WU ; uchar code tabledu ={0x30
[单片机]
pic单片机两个IO口四线驱动LCD1602
经过多天调式,优化程序。只用两个IO端口驱动74LS164扩展成并口驱动LCD1602(四线模式),这是个完整简单的例子,可实现字符串左移200次,右移200次,不停的循环。现上传与大家共享成果!//引入头文件********************************************************* #include pic.h #include pic12f6x.h #include delay.h #include delay.c //熔丝配置*********************************************************** __CONFIG(P
[单片机]
pic单片机两个IO口四线驱动<font color='red'>LCD1602</font>
MSP430F5529-MPU6050陀螺仪
这里使用的是维特智能的JY61陀螺仪,具体信息可以参考官网mpu6050三轴六轴加速度计姿态角度传感器模块维特智能JY61 JY61型陀螺仪可以通过I2C或者串口模式向开发板传输数据,但是I2C通信传过来的数据是原始数据,未经处理,需要自己解算姿态。串口通信传过来的数据是经过陀螺仪内部解算后的结果。以下为串口输出结果: 一般串口输出取用角度输出值。 I2C通信可以选择硬件通信或者模拟通信。硬件通信需要在开发板上配置相关的I2C引脚,模拟通信只要随意选择两个普通GPIO口即可。 串口接收数据仅需让陀螺仪的TX口,即发送口,接开发板的RX口,即接收口。供电3.3V与正常接地
[单片机]
MSP430F5529-MPU6050陀螺仪
AVR M16 实验之二 LCD1602显示
/********************************************************************** * 文件名称: main.c * 程序作者: kidcao1987 * 程序版本: V1.0 * 功能描述: 装好LCD1602,用在LCD1602上显示,这里建议再外接上电源。 This a LCD demo! www.CEPARK.com Keep moving!! By:kicao1987 * 编译器:WinAVR-20090313 * 芯片:ATmega16,外部11.0592MHZ晶振 * 技术支持:http://bbs.cepark.com *****************
[单片机]
点阵式液晶图形显示模块画图功能的实现
点阵式液晶显示模块相对于段码式LCD或LED的区别在于不仅它可以显示字符,更重要的是可以画图。在很多的测试类设备中,需要设备能够实时的显示曲线以判断被测设备的工作状况,如果采用先保存数据然后送给上位机处理,会加重成本,而且很不方便,而采用段码式LCD或LED显然不能胜任,用点阵式图形液晶显示器可以方便的实现这些功能。 本文介绍的点阵式液晶显示模块是信利公司的MPG240128A1-7型,它的控制芯片是东芝公司的T6963C。 模块的特点 T6963C是点阵式液晶图形显示器,可以图形方式、字符方式、图形和字符合成方式显示,以及实现字符方式下的特征方式显示,还可以象CAD一样进行屏拷贝操作。本文中的液晶模
[电源管理]
MSP430F5529 DriverLib 库函数学习笔记(十二)I2C实战
平台:Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) 上机实战 I2C给 DAC 芯片 DAC7571 写入数字量 DAC7571 介绍 DAC7571 是低功耗,单通道 12 位 DA 转换器.DAC7571 兼容 I2C 接口,通过这两条数据线和外部通信,时钟的最高速度为 3.4Mbps. DAC7571 的外观图和引脚定义 如上图所示: 1 脚:模拟电压输出脚. 2 脚:接地. 3 脚:电源输入脚. 4 脚:串行数据输入引脚. 5 脚:串行时钟输入引脚. 6 脚:地址选择脚. DAC
[单片机]
<font color='red'>MSP430F5529</font> DriverLib 库函数学习笔记(十二)I2C实战
MSP430f5529模拟IIC协议
读取数据之前需要释放总线,被这问题卡了好久 #include msp430f5529.h //P8.1 SCL //P8.2 SDA #define SCL_HIGH P8OUT|=BIT1 #define SCL_LOW P8OUT&=~BIT1 #define SDA_HIGH P8OUT|=BIT2 #define SDA_LOW P8OUT&=~BIT2 #define SDA_OUT P8DIR|=BIT2 #define SDA_IN P8DIR&=~BIT2 #define SCL_OUT P8DIR|=BIT1 #define SDA P8IN&BIT2 v
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved