💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
* 导师视频讲解:[**去听课**](https://www.bilibili.com/video/BV1k34y1D7Vz/) >[success] **技术支持说明:** >**1**.一般以自主学习为主 > **2**.可到官方问答社区中提问:[**去提问**](https://bbs.csdn.net/forums/zigbee) > **3**.工程师**会尽快**解答社区问题,但他们是一线开发,【**难以保证**】解答时效,解答辛苦,感谢理解! <br/> 在前面C51单片开发章节中已经讲解如果使用显示器,开发只需要将相关的驱动程序一直到HAL中即可通过HAL来使用使用显示器了。 <br/> ## **显示屏驱动移植** 在本节课配套的工程代码中,有一个“HAL更新”文件夹,如下图所示。 ![](https://img.kancloud.cn/f7/eb/f7ebbcd21679e48719148dd38dc7e4af_598x212.png =200x) ### 笔者已经把前面章节用到的OLED12864和TFT12864彩屏的驱动程序y移植到了HAL,移植后的代码就在hal文件夹中,如下图所示。 ![](https://img.kancloud.cn/ff/c9/ffc988b3159d26cf9b565396a23d0074_612x288.png =200x) <br/> 其使用方法是: 1. 删除协议栈中的hal文件夹,该文件夹在Z-Stack 3.0.1\\Components中 ### 2. 把HAL更新文件夹中的hal文件夹复制到Z-Stack 3.0.1\\Components中,即替换了协议栈中的hal文件夹,如下图所示。 ![](https://img.kancloud.cn/57/21/57218b96d07c60c4c0b0568deac30cb7_644x1198.png =200x) ### 3. 替换成功后,可以在目录Z-Stack 3.0.1\\Components\\hal\\target\\CC2530EB中找到显示器驱动程序,如图所示。 ![](https://img.kancloud.cn/07/e2/07e22a21b7939e87fa0f83f7968e1c34_338x262.png =120x) 这些驱动程序与前面章节用到的显示器驱动程序是一样的。 ### 4. **把驱动程序添加到工程中** A. 在HAL的Drivers下创建3个工程组,分别是Common、HW\_LCD和SPI,如图所示。 ![](https://img.kancloud.cn/54/8d/548de0d2cffdabe3eeed2e6b70bee613_384x416.png =250x) B. 把相关的驱动程序添加进来,如图所示。 ![](https://img.kancloud.cn/86/9b/869bc53b9e03f4b3fa8ce5c77c2aafbb_246x436.png =200x) ### 5. 添加路径到工程,下文将会详细说明。 <br/> ### **驱动程序说明** 上图中的SPI是前面章节讲解过的通用SPI驱动程序,Common中存放了延时函数和通用的IO配置程序,HW\_LCD中存放了字库、LCD的SPI适配程序和显示器的驱动。笔者移植过来的时候做了一些变量类型的兼容,主要是uint8和uint8\_t、uint16和uint\_16等类型兼容。 ### HW\_LCD的详细内容如下图所示。 ![](https://img.kancloud.cn/91/42/9142453e22ce243e72470f1c30635e22_510x420.png =300x) <br/> ### **添加路径到工程** 最后,需要把驱动程序的路径添加到工程中。在下图中的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 ``` ![](https://img.kancloud.cn/19/76/1976fc5e975aa4825f3a8ea5fd072c7e_772x740.png =600x) ### 至此,已经把显示器驱动程序移植到了HAL中了,然后可以使用HAL为开发者准备的LCD API了。 <br/> ## **HAL LCD API** HAL提供了完善的显示器驱动API,其定义在hal\_lcd.h和hal\_lcd.c中,如图所示。 ![](https://img.kancloud.cn/5a/ec/5aecd615f0cd72beea8ad3a274843625_242x392.png =200x) ![](https://img.kancloud.cn/fc/04/fc04009e1c5f2050aa3c331cd8318233_270x408.png =200x) ### ### 打开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 ); ``` <br/> ## **启用 LCD 功能** 使用显示器功能前,需要先开启宏,HAL\_LCD。 1.如果使用的是配套的0.96寸OLED屏幕,在下图中的Defined sybols中输入以下代码。 ``` HAL\_LCD=TRUE HAL\_LCD\_OLED12864 ``` ### 2.如果使用使用的是配套的0.96寸TFT屏幕,则输入 ``` HAL\_LCD=TRUE ``` 如下图所示。 ![](https://img.kancloud.cn/a1/d2/a1d29c40c925cd33da5a45f81f015020_832x824.png =600x) ### >[danger] 如何鉴别屏幕类型?请参考:[显示器实验](2482320) <br/> ## **调试仿真** 编译整个工程,然后把程序烧录到开发板中并全速运行,可以看到屏幕显示了Z-Stack相关的调试信息。 <br/> <br/> ## **项目定制** * 如需项目定制开发,可扫码添加项目经理好友(注明“**项目定制**”) * 定制范围:**NB-IoT**、**CATn(4G)**、**WiFi**、**ZigBee**、**BLE Mesh**以及**STM32**、**嵌入式Linux**等IoT技术方案 * 善学坊官网:[www.sxf-iot.com](https://www.sxf-iot.com/) ![](https://img.kancloud.cn/ca/73/ca739f92cab220a3059378642e3bd502_430x430.png =200x) * 非项目定制**勿扰**,此处**非**技术支持