风筝
发表于: 2021-2-22 15:29:45 | 显示全部楼层

本文是使用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个是用于对比度调整的引脚。

16x2-Alphanumeric-LCD-Display.jpg


上面显示的该LCD模块是通用的,与其他段式LCD相比,它使用的引脚最少。那么这些液晶屏的工作原理是什么?让我们看看该显示屏的引脚排列。

LCD-Display-Pinout.png


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作为项目名称。在项目类型和工具链下,将输出类型选择为静态库然后创建项目。

LCD-CCS-Library.png


在Project Explorer栏(左侧)中,在include文件夹中创建一个头文件,并将其命名为hd44780.h。然后将下载的hd44780.h文件的内容复制到这个新创建的文件中。


现在,通过将输出类型更改为可执行文件来创建主项目,并创建一个名为CCS_LCD的项目。


第2步:包括主项目的搜索路径

在hd44780项目的属性对话框中,并在MSP430编译器的include选项内,在搜索路径的文件中添加include文件夹。

LCD-CCS-Library-for-MSP430.png


然后,构建此项目以创建必要的链接器文件,例如.lib文件。构建此文件将在debug文件夹中创建hd44780.lib文件。


第3步:包括链接器的搜索路径

在CCS_LCD项目的属性对话框中,在“MSP430 Linker”选项卡的文件搜索路径中,包含位于hd44780项目的debug文件夹内的hd44780.lib。调试文件夹也包含在文件搜索路径中。


再次将include文件夹添加到CCS_LCD项目的MSP430编译器的include选项中。

16x2-LCD-CCS-Library.png


该库已成功编译并添加到主项目的链接器中。


用于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函数内部)。定期调用hd​​44780_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适配器为整个电路板供电。

Interfacing-LCD-with-MSP430.jpg


LED背光源的正极不能直接连接到5V电源。它应该连接到一个电阻上,以限制流过LCD模块的电流。我们使用万能板焊接LCD,然后使用跳线将LCD与MSP430开发板连接,从而建立了连接。我的设置如下所示,但您也可以简单地使用面包板进行连接。

LCD-Display-with-MSP430.jpg


使用Code Composer Studio对MSP430进行LCD编程

代码的使用说明如下。首先,打开头文件(hd44780.h),并在文件的第一部分包含微控制器的型号。

  1. #include "msp430g2553.h"
复制代码

首先看门狗定时器必须停止。 DCOCTL和BCSCTL1控制寄存器用于配置微控制器的振荡器。下面的代码将MCLK配置为1MHZ。

  1. WDTCTL = (WDTPW | WDTHOLD);
  2.   BCSCTL1 = CALBC1_1MHZ;
  3.   DCOCTL  = CALDCO_1MHZ;
复制代码

将端口1引脚设置为输出,该引脚将用于数据引脚。端口2的引脚0和引脚1也需要设置成输出,它将用于RS和R / W引脚。

  1. P1DIR = 0xFF;
  2. P2DIR = (0x01 | 0x02);
复制代码

内置计时器用于定期显示值。选择定时器A时,将SMCLK(1MHZ)作为时钟源,并将连续模式作为工作模式。

  1. TA0CCR1  = 32768;
  2. TA0CCTL1 = CCIE;
  3. TA0CTL   = (TASSEL_2 | MC_2 | TACLR);
复制代码

比较通道1和2的中断以及定时器溢出中断共享相同的中断向量(TIMER0_A1_VECTOR),但起始地址不同。捕获比较通道1(CCR1)使用2作为地址,该地址在swithcase中使用。

  1. #pragma vector = TIMER0_A1_VECTOR
  2. __interrupt void timer_0_a1_isr( void )
  3. {
  4.   switch( TA0IV )
  5.   {                     
  6.     case 2:
  7.     {
  8.     hd44780_timer_isr();
  9.    break;
  10.    }
  11. }
  12. }
复制代码

编译代码后,可以将其上载到MSP430开发板上。如果一切都按预期进行,那么您应该会在LCD显示屏上看到演示效果,如下所示。

LCD-Display-Interfacing-with-MSP430.jpg


如果您的显示屏非常暗淡,可以尝试调节电位器以获得更好的对比度。希望您喜欢这个项目,如果有任何疑问,请在本帖下面留下回复。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 3 | 回复: 3



手机版|

GMT+8, 2024-4-25 02:02 , Processed in 0.055621 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表