kaily
发表于 2025-9-8 11:02:58
2.25 大型综合实战--大学课程设计:硬件SPI读写串行Flash
2.25.1. 实验介绍 1、本实验项目主要目的: Ø掌握串口通讯 Ø硬件SPI读写串行Flash 2、掌握Ai8051U实验箱原理图中的串口通信电路、硬件SPI电路 3、熟悉AIapp-ISP系统软件中串口助手工具 4、熟悉如何管理多文件项目
2.25.1.1. 按键去抖动说明 如按键要判断为正常按下,而不是抖动,需要该按键保持按下持续保持为低状态时间是20ms ~ 50ms; 主循环中有个1ms的时间基准,将按键扫描程序作为1ms事件,按键状态维持50ms不变,即可对按键去抖动,得到稳定的键码。
2.25.1.2. 实验现象和操作说明 Ai8051U的实验箱正面图:
1、J20: USB转双串口U2(Ai8H2K12U)TypeC接口。本实验需要用TypeA(连接电脑)-TypeC(连接实验箱J20)线相连。 (详见Ai8051U实验箱中J20-U2原理图) 2、J18跳线: 本实验需要将实验箱上“J18跳线C”的跳线连上。 ØJ18.C: 使主控芯片UART1的P3.7/TxD_2与双串口U2(Ai8H2K12U)联通。 详见Ai8051U实验箱中J18跳线原理图 3、SPI-Flash:详见Ai8051U实验箱中U6原理图
2.25.1.3. Keil环境下多文件项目管理说明 当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。 Ø 比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。 Ø 一般建议是一个模块对应一个.c程序文件和一个.h头文件 Ø 模块的初始化函数以及相关的数据处理函数都在.c文件中实现 Ø 与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量 Ø 如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。 Ø 特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误 Ø 为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含: #ifndef XXXX #define XXXX ... #endif
kaily
发表于 2025-9-8 11:35:29
2.26 深大实验--硬件SPI驱动OLED显示图片、图形、字符
2.26.1. 实验介绍 1、本实验项目主要目的: Ø硬件SPI驱动OLED显示 Ø如何实现显示图片、6*8点阵字符、8*16点阵字符、16*16点阵汉字 Ø如何画直线、方框、圆 2、掌握Ai8051U实验箱原理图中SPI驱动OLED电路 3、了解图片取模的原理,并熟练使用AIapp-ISP系统软件中图片取模工具 4、了解字库生成原理,并熟练使用AIapp-ISP系统软件中字库生成工具 5、继续熟悉如何管理多文件项目
2.26.1.1. Aiapp-ISP系统软件图片取模工具的使用 打开AIapp-ISP系统软件: Ü点击菜单栏“工具”à“图片取模工具”,打开“图片取模工具”浮窗 Ü点击“打开图片”按钮,选择准备要取模的图片 Ü点击“打开”按钮 如下图: 此时,在打开的“图片取模工具”浮窗,我们看到被选择的图片显示在原始图片区和转换后的图片区: Ü扫描模式:选择“垂直扫描,从左到右,从上到下” Ü存储顺序:选择“高位在前” Ü数据格式:选择“C表格格式” Ü勾选“图片反色” Ü设置:宽度:128;高度:64;输出格式:1位单色 Ü点击“开始转换” 就会生成相应的点阵图片C代码,如下图: 将点阵图片生成的C代码数据拷贝出来,本例是将此段代码放在“pic.h”中,形成表格数据,方便程序加载并在OLED上显示出来。
2.26.1.2. Aiapp-ISP系统软件字库生成工具的使用 打开AIapp-ISP系统软件,点击菜单栏“工具”à“字库生成工具”,打开“字库生成工具”浮窗: Ü在“输入字符”区输入想要取模的文字,本例输入“深圳大学” Ü点击第一行的工具栏上的“汉”按钮,打开“设置字体”浮窗,字库字体选择“宋体” Ü扫描模式:选择“垂直扫描,从左到右,从上到下” Ü数据格式:选择“C表格-格式2(后索引模式)” Ü存储顺序:选择“低位在前” Ü点击“生成字库” 就会生成相应的点阵字库代码,如下图: 将点阵字库生成的C代码拷贝出来,本例是将此段代码放在“font.h”中,形成表格数据,方便程序查询并提取字库。
2.26.1.3. 使用Aiapp-ISP系统软件图片取模工具生成ASCII的点阵字符C代码 在AIapp-ISP系统软件的字库生成工具中,我们除了可以像上述操作步骤生成标准点阵字符C代码,还可以自己手动描点生成自己想要的点阵字符C代码。 打开AIapp-ISP系统软件,点击菜单栏“工具”à“字库生成工具”,打开“字库生成工具”浮窗。 先进行相应的设置: Ü点击“字库生成工具”浮窗第一行的“M”按钮,清空字符点阵区域 Ü确定点阵宽度:6;点阵高度:8(本例中有6*8的点阵ASCII字符C代码数据和8*16的点阵ASCII字符代码数据) Ü扫描模式:选择“垂直扫描,从左到右,从上到下” Ü数据格式:选择“C表格-格式1(纯数据格式)” Ü存储顺序:选择“低位在前” 如下图: 现在手动用鼠标在窗口左上角点阵描图区域,进行描图。 以ASCII码的“0”为例,进行如下图中的描绘,再点击“生成字库”按钮,即可生成相应的字库C代码数据。 以此类推,生成自己想要的全部ASCII码的点阵字库C代码数据。 将点阵字库生成的C代码拷贝出来,本例是将此段代码放在“ascii.h”中,形成表格数据,方便程序查询并提取字库。
2.26.1.4. 认识Ai8051U实验箱和OLED屏 Ai8051U实验箱: J9:OLED插座。Ai8051U实验箱上的J9插座可插7线或8线的OLED屏,本实验使用的OLED屏是7线,第8脚浮空。 详见Ai8051U实验箱中J9原理图。
OLED屏
2.26.1.5. Keil环境下多文件项目管理说明 当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。 Ø 比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。 Ø 一般建议是一个模块对应一个.c程序文件和一个.h头文件 Ø 模块的初始化函数以及相关的数据处理函数都在.c文件中实现 Ø 与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量 Ø 如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。 Ø 特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误 Ø 为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含: #ifndef XXXX #define XXXX ... #endif