- 16x2字母数字液晶显示器
- 适用于MSP430的16x2 LCD CCS库
- 用于MSP430的16x2 LCD显示的LCD功能
- 与MSP430连接LCD的电路图
- 使用Code Composer Studio对MSP430进行LCD编程
本文是我们使用Code Composer Studio对MSP430进行编程的系列教程的延续。上一教程基于 使用GPIO引脚的MSP430上的 外部中断。本教程是关于 将显示器与MSP430接口的,当要显示 16 * 2 LCD显示器时, 它是任何电子爱好者的首选。以前,我们还使用Arduino IDE将LCD与MSP430进行接口连接,在本教程中,我们将使用本机Code Composer Studio平台而不是使用Arduino IDE,这样作为设计者,我们将获得更大的灵活性。
要了解有关16x2 LCD显示屏以及将其与其他微控制器一起使用的更多信息,请参见以下教程。
- LCD与ATmega16的接口
- LCD与Raspberry Pi的接口
- LCD与PIC微控制器的接口
- LCD与ARM7-LPC2148的接口
- LCD与NodeMCU接口
- LCD与STM32接口
- 将LCD与MSP430G2连接
- LCD与STM8接口
它具有内置IC hd44780,可以存储传递给它的命令和数据。LCD模块具有约16个引脚。其中的8个是数据引脚,其中的4个是背光LED和整个LCD模块的电源引脚,另外3个是控制操作的引脚,还有1个用于对比度调整的引脚。本教程基于Dennis Eichmann创建的库。使用具有单独功能的库来打印不同的数据类型非常容易。它还提供了以不同的形式显示数据的方式,这些数据带有前导零,空白和删除的零。它是一个相当广泛的综合库,并且可以针对不同的连接进行配置。在此,头文件被修改为容纳用于数据通信的8针并行配置。
16x2字母数字液晶显示器
通用的16x2显示器具有 内置的hd44780 IC (下面用红色圆圈圈出),可以存储传递给它的命令和数据。LCD模块具有约16个引脚。其中的8个是数据引脚,其中的4个是背光LED和整个LCD模块的电源引脚,另外3个是控制操作的引脚,还有1个用于对比度调整的引脚。
上面显示的该LCD模块是通用的,与其他分段LCD相比,它使用的引脚最少。如果您想知道所有这些工作原理是什么,您应该查看16x2 LCD显示器的工作原理,在此我们已经详细讨论了LCD的工作原理。
RS引脚: RS = 1 将启用LCD中的数据寄存器,该寄存器用于将值写入LCD中的数据寄存器。 RS = 0 将启用LCD的指令寄存器。
使能引脚: 负边沿触发;当引脚从“高”状态变为“低”状态时,LCD提示写入数据引脚。正边沿触发;当引脚从LOW状态变为HIGH状态时,LCD提示从数据引脚读取。
R / W引脚: R / W = 0 将根据RS引脚的选择写入指令寄存器或数据寄存器。 根据RS引脚的选择,将从IR或DR读取R / W = 1。
RS R / W操作
0 0 IR写入作为内部操作(显示清除等)
0 1读取繁忙标志(DB7)和地址计数器(DB0至DB6)
1 0 DR写入作为内部操作(DR到DDRAM或CGRAM)
1 1 DR作为内部操作读取(从DDRAM或CGRAM到DR)
D0-D7引脚: 通过这些引脚在命令和数据寄存器之间来回传输数据。
电源引脚: V ss,V dd 引脚用于为LCD模块供电。A,K引脚将为LED背光供电。V 0 引脚用于控制对比度。
适用于MSP430的16x2 LCD CCS库
本教程基于Dennis Eichmann创建的库。使用具有单独功能的库来打印不同的数据类型非常容易。它还提供了以不同的形式显示数据的方式,这些数据带有前导零,空白和删除的零。它是一个相当广泛的综合库,并且可以针对不同的连接进行配置。在此,头文件被修改为容纳用于数据通信的8针并行配置。可以从下面的链接下载该库,下载后,请按照以下步骤将库添加到CCS。
下载适用于MSP430的16x2库– Code Composer Studio
步骤1:创建文件和项目
使用文件菜单创建默认的CCS项目。在“创建项目”对话框中,选择设备并给hd44780作为项目名称。在项目类型和工具链下,将输出类型选择为静态库并创建项目。
在Project Explorer通道(左侧)中,在include文件夹中创建一个头文件,并将其命名为 hd44780.h 。然后将下载的 hd44780.h文件 的内容复制 到这个新创建的 文件中 。
现在,通过将输出类型更改为可执行文件来创建主项目,并创建一个名为 CCS_LCD 的项目 。
步骤2:包括主项目的搜索路径
在hd44780项目的属性对话框中,并在MSP430编译器的include选项内,在搜索路径的文件中添加include文件夹。
然后, 构建该项目 以创建必要的链接器文件,例如 .lib文件 。构建此 文件将在debug文件夹中创建 hd44780.lib 文件。
步骤3:包括链接器的搜索路径
在属性对话框框 CCS_LCD 项目,并在MSP430 Linker选项卡的文件搜索路径,包括 hd44780.lib 位于内侧 debug文件夹 的HD44780项目。调试文件夹也包含在文件搜索路径中。
再次将include文件夹添加到 CCS_LCD 项目的MSP430编译器的include选项中 。
该库已成功编译并添加到主项目的链接器中。
用于MSP430的16x2 LCD显示的LCD功能
void hd44780_timer_isr(void): 在定时器A的ISR中定期调用它。定时器A用于周期性地执行LCD功能,例如清除屏幕,设置光标和显示数据。该功能将在ISR中使用。它什么也不返回。
uint8_t hd44780_write_string(char * ch__string,uint8_t u8__row,uint8_t u8__column,uint8_t u8__cr_lf): 它将写入第一个参数中指定的字符串。
char * ch__string: 要写入数据缓冲区的字符串(在hd44780_timer_isr 函数内部 )。定期调用 hd44780_timer_isr 时,数据将被复制到LCD IC的数据寄存器和指令寄存器 。
uint8_t u8__row: 它定义将在其中写入字符串的行。
uint8_t u8__column: 它定义将在其中写入字符串的列。
uint8_t u8__cr_lf: 如果设置为1,则该行将继续到下一个。如果为0,则打印在同一行停止。
hd44780_clear_screen(void): 此功能将清除整个屏幕。它什么也不返回。
uint8_t hd44780_output_unsigned_16bit_value(uint16_t u16__value,uint8_t u8__leading_zero_handling,uint8_t u8__row,uint8_t u8__column,uint8_t u8__cr_lf): 该函数将在所需位置的LCD上显示未签名的16位值。
uint16_t u16__value: 要显示的整数在第一个参数中给出。
uint8_t u8__leading_zero_handling: 如果传递了0,则将显示前导零到整数值。如果通过1,则零将被清除。如果将2作为参数传递,则仅显示有效数字。
uint8_t u8__row: 选择显示整数的行。
uint8_t u8__column: 使用参数选择要打印的列。
uint8_t u8__cr_lf: 如果设置为1,则该行将继续到下一个。如果为0,则打印在同一行停止。
与MSP430连接LCD的电路图
下图显示了完整的电路图。如您所见,硬件连接非常简单,我们使用5V适配器为整个电路板供电。
根据上述草图进行连接。请查看下表以了解详细的连接。
VS | 5V电源接地 |
Vdd | 5伏 |
V0 | 电位计输出 |
RS | P2.1 |
读/写 | 地面 |
Ë | P2.0 |
D0 | P1.0 |
D1 | P1.1 |
D2 | P1.2 |
D3 | P1.3 |
D4 | P1.4 |
D5 | P1.5 |
D6 | P1.6 |
D7 | P1.7 |
一种 | 220欧姆电阻 |
ķ | 地面 |
LED背光源的阳极不能直接连接到5V电源。它应该连接到一个电阻上,以最小化流过LCD模块的电流。我已经使用穿孔板焊接LCD,然后使用跳线将LCD与MSP430板连接,从而建立了连接。我的设置如下所示,但您也可以简单地使用面包板进行连接。
使用Code Composer Studio对MSP430进行LCD编程
该项目使用的完整代码在本页底部。使用代码的说明如下。首先,打开头文件(hd44780.h),并在文件的第一部分包含微控制器的部件号。
#include“ msp430g2553.h”
看门狗定时器必须首先停止。 DCOCTL和BCSCTL1 控制寄存器用于配置微控制器的振荡器。下面的行将MCLK配置 为1MHZ。
WDTCTL =(WDTPW-WDTHOLD); BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ;
必须提到端口1引脚作为输出,该引脚将用于数据引脚。端口2的输出也必须提到引脚0和引脚1,它将用于RS和R / W引脚。
P1DIR = 0xFF; P2DIR =(0x01-0x02);
内置计时器用于定期显示值。选择定时器A时,将SMCLK(1MHZ)作为时钟源,并将连续模式作为工作模式。
TA0CCR1 = 32768; TA0CCTL1 = CCIE; TA0CTL =(TASSEL_2-MC_2-TACLR);
比较通道1和2的中断以及定时器溢出中断共享相同的中断向量( TIMER0_A1_VECTOR ),但起始地址不同。捕获比较通道1(CCR1) 使用 2 作为地址,该地址在开关盒中使用。
#pragma vector = TIMER0_A1_VECTOR __interrupt void timer_0_a1_isr(void) { switch(TA0IV) { 情况2: { hd44780_timer_isr(); 打破; } } }
编译代码后,可以将其上载到MSP430板上,如MSP430教程入门中所述。如果一切都按预期进行,那么您应该会在LCD显示屏上看到一些对比,如下所示。
如果您的测试非常暗淡,可以尝试调节电位器以获得更好的对比度。您也可以在下面的视频中找到该项目的完整工作。希望您喜欢这个项目,并发现构建自己的项目很有趣。如果您有任何疑问,请留在下面的评论部分。您也可以在论坛上写下所有技术问题,以得到解答或开始讨论。