本文是使用Code Composer Studio对MSP430进行编程的系列教程的延续。在上一篇文章中介绍了使用MSP430上GPIO引脚的外部中断。本篇文章将主要介绍如何将关于将显示屏连接到MSP430,我们选择的是1602图形点阵液晶屏,这是电子爱好者的首选。在之前的帖子中,我们介绍了使用Arduino IDE将液晶屏连接到MSP430,在本文中,我们将使用Code Composer Studio平台而不是使用Arduino IDE,这样作为设计者,我们将获得更大的灵活性。
1602字符型液晶显示屏 通用的1602显示屏内置了驱动芯片hd44780(下图用红色圆圈圈出),可以存储传递给它的命令和数据。 LCD模块具有16个引脚。其中8个是数据引脚、4个是用于背光LED和整个LCD模块的电源引脚,另外3个是用于控制操作的引脚,另外1个是用于对比度调整的引脚。
上面显示的该LCD模块是通用的,与其他段式LCD相比,它使用的引脚最少。那么这些液晶屏的工作原理是什么?让我们看看该显示屏的引脚排列。
RS引脚:RS = 1将启用LCD中的数据寄存器,该寄存器用于将值写入LCD中的数据寄存器。 RS = 0将启用LCD的指令寄存器。 Enable引脚:下降沿触发;当引脚从“高”状态变为“低”状态时,LCD提示写入数据引脚。上升沿触发;当引脚从LOW状态变为HIGH状态时,LCD提示从数据引脚读取。 R / W引脚:R / W = 0时将根据RS引脚的选择写入指令寄存器或数据寄存器。R / W = 1时,根据RS引脚的选择,将从IR或DR读取数据。 D0-D7引脚:通过这些引脚在命令和数据寄存器之间来回传输数据。 电源引脚:Vss、Vdd引脚用于为LCD模块供电。 A、K引脚将为LED背光供电。 V0引脚用于控制对比度。
适用于MSP430的16x2 LCD CCS库 本篇文章基于Dennis Eichmann创建的库。使用具有独立函数的库来打印不同的数据类型非常容易。它还提供了以不同的形式显示数据的方式,这些数据带有前导零、空白和删除零。它是一个相当广泛的综合库,并且可以针对不同的连接进行配置。在此,头文件被修改为容纳用于数据通信的8引脚并行配置。可以从下面的链接下载该库,下载后,请按照以下步骤将库添加到CCS。
下载适用于MSP430的1602库– Code Composer Studio
第1步:创建文件和项目 使用文件菜单创建默认的CCS项目。在“Create Project”对话框中,选择器件并使用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项目的debug文件夹内的hd44780.lib。调试文件夹也包含在文件搜索路径中。
再次将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,则打印在同一行停止。
LCD连接到MSP430的电路图 下图显示了完整的电路图。如您所见,硬件连接非常简单,我们使用5V适配器为整个电路板供电。
LED背光源的正极不能直接连接到5V电源。它应该连接到一个电阻上,以限制流过LCD模块的电流。我们使用万能板焊接LCD,然后使用跳线将LCD与MSP430开发板连接,从而建立了连接。我的设置如下所示,但您也可以简单地使用面包板进行连接。
使用Code Composer Studio对MSP430进行LCD编程 代码的使用说明如下。首先,打开头文件(hd44780.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作为地址,该地址在swithcase中使用。 - #pragma vector = TIMER0_A1_VECTOR
- __interrupt void timer_0_a1_isr( void )
- {
- switch( TA0IV )
- {
- case 2:
- {
- hd44780_timer_isr();
- break;
- }
- }
- }
复制代码
编译代码后,可以将其上载到MSP430开发板上。如果一切都按预期进行,那么您应该会在LCD显示屏上看到演示效果,如下所示。
如果您的显示屏非常暗淡,可以尝试调节电位器以获得更好的对比度。希望您喜欢这个项目,如果有任何疑问,请在本帖下面留下回复。 |