作为在开发板上最显眼的LCD屏幕,自然而然也是每年的必考考点。国信长天开发板使用的是一块2.4寸(240*320)的TFT-LCD液晶屏,其引脚占用如下:

其中,CS为片选信号引脚,RS为数据/命令选择引脚,WR为写入控制引脚,RD为读取控制引脚,RST为复位控制引脚,D0~D15为数据线。
通过观察底层驱动(比赛提供)可以发现,其实单论LCD驱动来说这一步是并不需要的,因为在官方给的驱动文件就已经实现了对LCD的GPIO配置,如下所示:

其中配置引脚为PA8,PB5、8、9,PC0~PC15,所有引脚均配置为推挽输出模式,因此CubeMX配置可以省略。
LCD初始化
函数内部实现了GPIO的对应初始化及液晶寄存器配置
void LCD_Init(void);
设置显示颜色
文本默认颜色为黑色
文本背景默认颜色为黑色(不同于背景色,这里指的是文本的所在背景色)
void LCD_SetTextColor(vu16 Color); //设置文本颜色
void LCD_SetBackColor(vu16 Color); //设置文本背景颜色
参数:颜色,其宏定义如下:
| 颜色 | 地址值 |
|---|---|
| White | 0xFFFF |
| Black | 0x0000 |
| Grey | 0xF7DE |
| Blue | 0x001F |
| Blue2 | 0x051F |
| Red | 0xF800 |
| Magenta | 0xF81F |
| Green | 0x07E0 |
| Cyan | 0x7FFF |
| Yellow | 0xFFE0 |
清除显示
void LCD_ClearLine(u8 Line); //清除一行显示
void LCD_Clear(u16 Color); //清除全屏显示
LCD_ClearLine参数:清除行号
LCD_Clear参数:清除后的背景色
绘制类函数
void LCD_SetCursor(u8 Xpos, u16 Ypos); //设置绘制起始坐标
void LCD_DrawChar(u8 Xpos, u16 Ypos, uc16 *c); //绘制字符(未使用字库)
void LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii); //绘制字符
void LCD_DisplayStringLine(u8 Line, u8 *ptr); //显示一行字符串
void LCD_SetDisplayWindow(u8 Xpos, u16 Ypos, u8 Height, u16 Width); //设置一个显示窗口,后面的绘制以该窗口为坐标系
void LCD_WindowModeDisable(void); //禁用窗口模式,重新以全屏为坐标系
void LCD_DrawLine(u8 Xpos, u16 Ypos, u16 Length, u8 Direction); //绘制线段
void LCD_DrawRect(u8 Xpos, u16 Ypos, u8 Height, u16 Width); //绘制矩形
void LCD_DrawCircle(u8 Xpos, u16 Ypos, u16 Radius); //绘制圆形
void LCD_DrawMonoPict(uc32 *Pict); //显示单色图
void LCD_WriteBMP(u32 BmpAddress); //从Flash中读取图片显示
void LCD_DrawBMP(u32 BmpAddress); //未实现
void LCD_DrawPicture(const u8* picture); //显示16色图片
绘制类函数参数列表:
Xpos:X坐标,取值为0~240;
Ypos:Y坐标,取值为0~320;
c :字符数据,注意此处为字模数组;
Line :行,取值Line0~Line9;
Column:同Ypos;
Ascii:ASCII字符,取值 0x20~0x7E;
ptr :字符串;
Height:窗口高度;
Width:窗口宽度;
Length:线段长度;
Direction:线段方向,取值Horizontal(水平)或其他(竖直);
Radius:圆形半径;
Pict:图片取模数组数据
字符流函数
int sprintf( char *buffer, const char *format [, argument,…] );
参数1:写入的字符串数组;
参数2:字符串及格式符;
参数3:格式符中对应的变量数据
API还算得上丰富(主要题目使用难度不大),通俗易懂,直接使用即可。
显示两行数据并清除:
LCD_Init();
LCD_Clear(White);
LCD_SetBackColor(White);
LCD_SetTextColor(Blue);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
int num = 1;
char text[30];
sprintf(text,"%d Hello World!",num);
LCD_DisplayStringLine(Line4, (u8*)text);
LCD_DisplayStringLine(Line5, (u8*)text);
HAL_Delay(1000);
LCD_ClearLine(Line4);
HAL_Delay(1000);
LCD_Clear(White);
HAL_Delay(1000);
}
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
目录前言: 一、ASC分析代码实现二、 卡片分析代码实现三、 直线分析代码实现四、货物摆放分析代码实现小结:前言: 在刷题的过程中,发现蓝桥杯的题目和力扣的差别很大。让人有一种不一样的感觉,蓝桥杯题目偏向对于实际问题用编程去的解决,而力扣给人感觉很锻炼自己的编程思维,逻辑能力。两者结合去刷,相信会有不一样的收获。 一、ASC 已知大写字母A的ASCII码为65,请问大写字母L的ASCII码是多少?分析 这道题目看上去很简单,我们需确定自己计算的准确,所以我建议用编程去解决。代码实现publicclassTest8{publicstaticvoidmain(String[]args){Sy
LL库和HAL库简介LL:Low-Layer,底层库HAL:HardwareAbstractionLayer,硬件抽象层库LL库和hal库对比,很精简,这实际上是一个精简的库。LL库的配置选择如下:在STM32CUBEMX中,点击菜单的“ProjectManager”–>“AdvancedSettings”,在下面的界面中选择“AdvancedSettings”,然后在每个模块后面选择使用的库总结:1、如果使用的MCU是小容量的,那么STM32CubeLL将是最佳选择;2、如果结合可移植性和优化,使用STM32CubeHAL并使用特定的优化实现替换一些调用,可保持最大的可移植性。另外HAL和L
?作者主页:静Yu?简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者?社区地址:前端知识交流社区?博主的个人博客:静Yu的个人博客?博主的个人笔记本:前端面试题个人笔记本只记录前端领域的面试题目,项目总结,面试技巧等等。接下来会更新蓝桥杯官方系统基础练习的VIP试题,依然包括解题思路,源代码等等。问题描述:给定当前的时间,请用英文的读法将它读出来。时间用时h和分m表示,在英文的读法中,读一个时间的方法是: 如果m为0,则将时读出来,然后加上“o’clock”,如3:00读作“threeo’clock”。 如果m不为0,则将时读出来,然后将分读出来,如5
目录一、ESP32简单介绍二、ESP32Wi-Fi模块介绍三、ESP32Wi-Fi编程模型四、ESP32Wi-Fi事件处理流程 五、ESP32Wi-Fi开发环境六、ESP32Wi-Fi具体代码七、ESP32Wi-Fi代码解读6.1主程序app_main7.2自定义代码wifi_init_sta()八、ESP32Wi-Fi连接验证8.1测试方法8.2服务器模拟工具sscom58.3测试代码8.4测试结果前言为了开发一款亚马逊物联网产品,开始入手ESP32模块。为了能够记录自己的学习过程,特记录如下操作过程。一、ESP32简单介绍ESP32是一套Wi-Fi(2.4GHz)和蓝牙(4.2)双模解决方
有道无术,术尚可求,有术无道,止于术。本系列SpringBoot版本3.0.4本系列SpringSecurity版本6.0.2本系列SpringAuthorizationServer版本1.0.2源码地址:https://gitee.com/pearl-organization/study-spring-security-demo文章目录前言1.OAuth2AuthorizationServerMetadataEndpointFilter2.OAuth2AuthorizationEndpointFilter3.OidcProviderConfigurationEndpointFilter4.N
在我的代码中,我需要使用各种算法(包括CRC32)对文件进行哈希处理。因为我还在Digest系列中使用其他加密哈希函数,所以我认为为它们维护一个一致的接口(interface)会很好。为了记录,我确实找到了digest-crc,一颗完全符合我要求的gem。问题是,Zlib是标准库的一部分,并且有一个我想重用的CRC32工作实现。此外,它是用C编写的,因此它应该提供与digest-crc相关的卓越性能,后者是纯ruby实现。实现Digest::CRC32一开始看起来非常简单:%w(digestzlib).each{|f|requiref}classDigest::CRC32一切正常:
我正在尝试在我的机器上安装win32-apigem,但在构建native扩展时我遇到了一些问题:$geminstallwin32-api--no-ri--rdocTemporarilyenhancingPATHtoincludeDevKit...Buildingnativeextensions.Thiscouldtakeawhile...C:\Programs\dev_kit\bin\make.exe:***Couldn'treservespaceforcygwin'sheap,Win32error0ERROR:Errorinstallingwin32-api:ERROR:Failed
我在Windows上运行ruby1.9.2并试图移植在Ruby1.8中工作的代码。该代码使用以前运行良好的Open4.popen4。对于1.9.2,我做了以下事情:通过geminstallPOpen4安装了POpen4需要POpen4通过require'popen4'尝试像这样使用POpen4:Open4.popen4("cmd"){|io_in,io_out,io_er|...}当我这样做时,我得到了错误:nosuchfiletoload--win32/open3如果我尝试安装win32-open3(geminstallwin32-open3),我会收到错误消息:win32-op
DellInspiron5488加内存32G 原装内置内存仅仅8G,目前看,真的太小了! 1.内存型号Dell5488内存型号:DDR42666。笔记本有两个内存插槽,原装占了一个,还能扩展一个。 2.买内存如果买Dell原装笔记本内存,8G就得500块左右。 我咨询了一下,三星的笔记本内存,可以兼容。16G,299块(2023年2月23日,京东价) Dell5488内存组合,最多只能插两根16G内存。 我于是买了两根三星16G内存。装上,很爽😄 跑国产系统统信UOS,再也看不到用交换区了,32G内存,爽!