在前面C51单片开发章节中已经讲解如果使用显示器,开发只需要将相关的驱动程序一直到HAL中即可通过HAL来使用使用显示器了。
显示屏驱动移植
在本节课配套的工程代码中,有一个“HAL更新”文件夹,如下图所示。
笔者已经把前面章节用到的OLED12864和TFT12864彩屏的驱动程序y移植到了HAL,移植后的代码就在hal文件夹中,如下图所示。
其使用方法是:
- 删除协议栈中的hal文件夹,该文件夹在Z-Stack 3.0.1\Components中
- 把HAL更新文件夹中的hal文件夹复制到Z-Stack 3.0.1\Components中,即替换了协议栈中的hal文件夹,如下图所示。
- 替换成功后,可以在目录Z-Stack 3.0.1\Components\hal\target\CC2530EB中找到显示器驱动程序,如图所示。
这些驱动程序与前面章节用到的显示器驱动程序是一样的。
- 把驱动程序添加到工程中
A. 在HAL的Drivers下创建3个工程组,分别是Common、HW_LCD和SPI,如图所示。
B. 把相关的驱动程序添加进来,如图所示。
- 添加路径到工程,下文将会详细说明。
驱动程序说明
上图中的SPI是前面章节讲解过的通用SPI驱动程序,Common中存放了延时函数和通用的IO配置程序,HW_LCD中存放了字库、LCD的SPI适配程序和显示器的驱动。笔者移植过来的时候做了一些变量类型的兼容,主要是uint8和uint8_t、uint16和uint_16等类型兼容。
HW_LCD的详细内容如下图所示。
添加路径到工程
最后,需要把驱动程序的路径添加到工程中。在下图中的Preprocessor中输入以下代码:
$PROJ_DIR$\..\..\..\..\..\Components\hal\target\CC2530EB\Common
$PROJ_DIR$\..\..\..\..\..\Components\hal\target\CC2530EB\SPI
$PROJ_DIR$\..\..\..\..\..\Components\hal\target\CC2530EB\HW_LCD\Font
$PROJ_DIR$\..\..\..\..\..\Components\hal\target\CC2530EB\HW_LCD\HAL_LCD_SPI
$PROJ_DIR$\..\..\..\..\..\Components\hal\target\CC2530EB\HW_LCD\HAL_OLED
$PROJ_DIR$\..\..\..\..\..\Components\hal\target\CC2530EB\HW_LCD\HAL_TFT
至此,已经把显示器驱动程序移植到了HAL中了,然后可以使用HAL为开发者准备的LCD API了。
HAL LCD API
HAL提供了完善的显示器驱动API,其定义在hal_lcd.h和hal_lcd.c中,如图所示。
打开hal_lcd.h文件,可以找到如下显示器API:
/**
* 在指定的行中显示字符串
*
* @param str - 待显示的字符串
* @param option - 在哪一行显示数据
*
*/
void HalLcdWriteString ( char *str, uint8 option);
/**
* 在指定行用指定进制显示数值
*
* @param value - 待显示的数值
* @param radix - 指定的进制
* @param option - 在哪一行显示数据
*
*/
void HalLcdWriteValue ( uint32 value, const uint8 radix, uint8 option);
如果需要在在屏幕第一行显示”Hello World!”,可按如下方式调用HalLcdWriteString:
HalLcdWriteString( “Hello World!”, HAL_LCD_LINE_1 );
如果需要第一行用10进制显示一个变量的数值,可按如下方式调用HalLcdWriteValue:
1.uint8 val = 100;
2.HalLcdWriteValue ( val, 10, HAL_LCD_LINE_1 );
启用 LCD 功能
使用显示器功能前,需要先开启宏,HAL_LCD。
1.如果使用的是配套的0.96寸OLED屏幕,在下图中的Defined sybols中输入以下代码。
HAL\_LCD=TRUE
HAL\_LCD\_OLED12864
2.如果使用使用的是配套的0.96寸TFT屏幕,则输入
HAL\_LCD=TRUE
如下图所示。
如何鉴别屏幕类型?请参考:显示器实验
调试仿真
编译整个工程,然后把程序烧录到开发板中并全速运行,可以看到屏幕显示了Z-Stack相关的调试信息。