kaily
发表于 2025-9-16 17:03:58
2.14 串口实验 -- 串口通讯(硬件UART2与UART3收发通讯)
2.14.1 实验介绍
1、熟悉串口2/UART2和串口3/UART3的通讯原理 2、熟悉STC8H8K64U实验箱及其原理图 3、熟练使用AiCube-ISP软件 4、认识USB转双串口工具@Ai8H2K12U、杜邦线、USB转串口/TTL连接线 5、熟悉如何管理多文件项目
2.14.1.1 认识STC8H8K64U实验箱 STC8H8K64U实验箱正面图: 1、J8:将STC8H8K64U实验箱上“J8跳线”跳线连上,使主控芯片UART2的P4.7/TxD2_2与UART3的P5.0/TxD3联通。 实现本实验要求的串口2/UART2和串口3/UART3收发通讯。(详见J7和J8跳线原理图) 2、J7:STC8H8K64U实验箱上J7的Pin2通过1根杜邦线连接UART3的P5.1/TxD3到双串口工具(Ai8H2K12U)S-TxD2, 使主控芯片UART3的P5.1/TxD3发送的串口数据在电脑端显示。(详见J7和J8跳线原理图)
2.14.1.2 2根杜邦线(1公头、1母头)
2.14.1.3 USB转串口/TTL连接线
2.14.1.4 USB转双串口工具@Ai8H2K12U:正面
2.14.1.5 本实验实验箱与电脑连接实物图
2.14.1.6 Keil环境下多文件项目管理说明
当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。 Ø 比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。 Ø 一般建议是一个模块对应一个.c程序文件和一个.h头文件 Ø 模块的初始化函数以及相关的数据处理函数都在.c文件中实现 Ø 与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量 Ø 如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。 Ø 特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误 Ø 为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含: #ifndef XXXX #define XXXX ... #endif
2.14.2 原理图
kaily
发表于 2025-9-16 18:03:00
2.15 串口实验 -- 串口通讯(硬件UART2与UART3数据透传)
2.15.1 实验介绍
1、了解双串口数据透传的原理及应用 2、熟悉STC8H8K64U实验箱及其原理图 3、熟练使用AiCube-ISP系统软件 4、认识USB转双串口工具@Ai8H2K12U、杜邦线、USB转串口/TTL连接线 5、熟悉如何管理多文件项目
2.15.1.1 认识STC8H8K64U实验箱 STC8H8K64U实验箱正面图: 1、J8: STC8H8K64U实验箱上J8的Pin1通过1根杜邦线将UART2的P4.7/TxD2_2发送脚与双串口工具(Ai8H2K12U)的S-TxD相连接; STC8H8K64U实验箱上J8的Pin2通过1根杜邦线将UART3的P5.0/RxD3接收脚与双串口工具(Ai8H2K12U)的S-RxD2相连接。 (详见J7和J8跳线原理图) 2、J7: STC8H8K64U实验箱上J7的Pin1通过1根杜邦线将UART2的P4.6/RxD2_2接收脚与双串口工具(Ai8H2K12U)的S-RxD相连接; STC8H8K64U实验箱上J7的Pin2通过1根杜邦线将UART3的P5.1/TxD3发送脚与双串口工具(Ai8H2K12U)的S-TxD2相连接。 (详见J7和J8跳线原理图)
2.15.1.2 5根杜邦线(1公头、1母头)
2.15.1.3 USB转串口/TTL连接线
https://www.stcaimcu.com/data/attachment/forum/202509/16/170223gfx31zpxllb1xil1.jpg
2.15.1.4 USB转双串口工具@Ai8H2K12U:正面
https://www.stcaimcu.com/data/attachment/forum/202509/16/170231mhs2g359jg8jd8e8.jpg
2.15.1.5 本实验实验箱与电脑连接实物图
2.15.1.6 Keil环境下多文件项目管理说明
当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。 Ø 比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。 Ø 一般建议是一个模块对应一个.c程序文件和一个.h头文件 Ø 模块的初始化函数以及相关的数据处理函数都在.c文件中实现 Ø 与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量 Ø 如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。 Ø 特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误 Ø 为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含: #ifndef XXXX #define XXXX ... #endif
2.15.2 原理图
https://www.stcaimcu.com/data/attachment/forum/202509/16/170256wlp473d737g9d7p1.jpg https://www.stcaimcu.com/data/attachment/forum/202509/16/170305pc65k1gk911goqqm.jpg
kaily
发表于 2025-9-17 10:23:02
2.16 串口实验 -- 串口1_2_3_4(中断设置标志位,主循环查询),演示实验
演示串口1、串口2、串口3、串口4中断同时打开时, 在各自的中断程序中设置中断事件标志位, 标志已产生相应的中断,在主循环中查询中断事件标志位, 来处理不是特急处理的任务,不堵塞其他中断
2.17 串口实验 -- 串口1_2_3_4 + 定时器0_1_3_4 +
外部中断INT0_1_2_3 (中断设置标志位,主循环查询),演示实验
演示串口1/串口2/串口3/串口4 + 定时器0/1/3/4 + INT0/1/2/3中断同时打开时, 在各自的中断程序中设置中断事件标志位,标志已产生相应的中断, 在主循环中查询中断事件标志位,来处理不是特急处理的任务,不堵塞其他中断
kaily
发表于 2025-9-17 11:08:39
2.18 串口实验 -- 串口通讯(串口通讯,串口绘图,ADC检测按键,ADC热敏电阻测温)
2.18.1 实验介绍 1、本实验项目主要目的: Ø掌握串口通讯,了解串口绘图工具 Ø继续熟悉ADC的应用,熟悉ADC检测按键,熟悉ADC热敏电阻(NTC)测温 2、掌握STC8H8K64U实验箱原理图中的串口通信部分电路,ADC应用部分电路 3、继续熟悉AiCube-ISP系统软件中串口助手工具,了解串口绘图工具 4、掌握USB转双串口工具@Ai8H2K12U的原理及应用 5、继续熟悉如何管理多文件项目
2.18.1.1 认识STC8H8K64U实验箱 STC8H8K64U的实验箱正面图(稍微倾斜角度拍摄,便于看清跳线引脚): 1、J8:STC8H8K64U实验箱上J8的PIN1通过1根杜邦线将UART2的P4.7/TxD2_2发送脚和双串口工具(Ai8H2K12U)的S-TxD2相连接。(详见J7和J8跳线原理图) 2、J7:STC8H8K64U实验箱上J7的PIN1通过1根杜邦线将UART2的P4.6/RxD2_2接收脚和双串口工具(Ai8H2K12U)的S-RxD2相连接。(详见J7和J8跳线原理图) 3、NTC跳线:Negative Temperature Coefficient thermistor,即“负温度系数热敏电阻”,其电阻值随温度升高而减小, ADC测温通过ADC3通道采集NTC温敏电阻的电压值来计算出温度值。详见NTC原理图所示。 NTC温敏电阻与10K精密电阻R171串联分压后的电压输入到ADC3脚位,而温敏电阻随温度变化, 阻值会产生变化,从而导致分压电压跟着改变,于是通过ADC采集分压电压值进行ADC转换, 将转换的ADC结果通过UART2串口发送到“串口绘图”显示实时采样数据。 4、ADC按键:按下不同的ADC按键可以改变P1.0-ADC-KEY脚的电压,ADC通过采集P1.0-ADC-KEY脚的电压进行ADC转换, 然后将转换的ADC结果通过UART2串口发送到“串口绘图”显示实时采样数据。
2.18.1.2 2根杜邦线(1公头、1母头)
2.18.1.3 USB转串口/TTL连接线
2.18.1.4 USB转双串口工具@Ai8H2K12U:正面
2.18.1.5 USB转双串口工具@Ai8H2K12U:背面
2.18.1.6 本实验实验箱与电脑连接实物图
2.18.1.7 Keil环境下多文件项目管理说明
当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。 Ø 比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。 Ø 一般建议是一个模块对应一个.c程序文件和一个.h头文件 Ø 模块的初始化函数以及相关的数据处理函数都在.c文件中实现 Ø 与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量 Ø 如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。 Ø 特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误 Ø 为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含: #ifndef XXXX #define XXXX ... #endif
2.18.2 原理图
kaily
发表于 2025-9-17 11:47:29
2.19 大型综合实战 -- 模拟RTC时钟+数码管+ADC检测按键(查询)
2.19.1 实验介绍 1、熟悉ADC按键扫描方法 2、了解使用P6、P7口控制LED数码管 3、熟悉软件模拟RTC,实现RTC的时、分、秒控制和设置 4、扩展部分:如何实现长按键 5、熟悉STC8H8K64U实验箱布局及原理图,熟练使用AiCube-ISP系统软件 6、熟悉如何管理多文件项目
2.19.1.1 ADC键盘计算键码说明
本ADC键盘方案在很多实际产品设计中,验证了其稳定可靠,即使按键使用导电膜,都很可靠。 12位ADC的转换结果范围位0 ~4095,16个键直接使用相同的电阻进行分压, 理论上各个键对应的ADC值为 (4096 / 16) * k = 256 * k,k = 1 ~ 16。 特别的,k=16时,对应的ADC值是4095。 但是实际会有偏差,则判断时限制这个偏差,ADC_OFFSET为+/-偏差, 则ADC值在 (256 * k - ADC_OFFSET) 与 (256 * k + ADC_OFFSET)之间为键有效。 间隔一定的时间,就采样一次ADC,比如10ms。 为了避免偶然的ADC值误判,或者避免ADC在上升或下降时误判,使用连续3次ADC值均在偏差范围内时,ADC值才认为有效。 以上算法,能保证读键非常可靠。
2.19.1.2 ADC按键实验现象和操作说明
将本项目的HEX文件下载到STC8H8K64U的实验箱后 1、在LED数码管的高6位会动态显示当前的RTC时间,低2位会显示按下的ADC按键的键码 2、按下16个ADC按键之一后: Ø 在LED数码管的低2位会显示当前的按键键码 3、ADC按键中的按键F,是RTC模式设置键 Ø 上电后RTC为正常工作模式,此时数码管动态显示RTC时间 Ø 按一次按键F,RTC会切换为小时设置模式,此时RTC的小时值会0.5秒闪烁一次 Ø 再按一次按键F,RTC会切换为分钟设置模式,此时RTC的分钟值会0.5秒闪烁一次 Ø 再按一次按键F,RTC会切换为秒钟设置模式,此时RTC的秒钟值会0.5秒闪烁一次 Ø 再按一次按键F,恢复为RTC正常工作模式 4、ADC按键中的按键D和E分别是上调键和下调键 Ø 只有在RTC的时/分/秒设置模式时,上调键和下调键才有效 5、时钟设置模式时,长按按键D或E,可实现快速设置功能
2.19.1.3 按键扫描说明
如按键要判断为正常按下,而不是抖动,需要该按键保持按下持续时间是20ms ~ 50ms; 主循环中有个10ms的时间基准,将按键扫描程序作为10ms事件,按键的值检测3次都在有效范围内,即30ms去抖动处理,得到稳定的键码。
2.19.1.4 Keil环境下多文件项目管理说明
当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。 Ø 比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。 Ø 一般建议是一个模块对应一个.c程序文件和一个.h头文件 Ø 模块的初始化函数以及相关的数据处理函数都在.c文件中实现 Ø 与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量 Ø 如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。 Ø 特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误 Ø 为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含: #ifndef XXXX #define XXXX ... #endif
2.19.2 原理图
2.19.2.1 ADC按键原理图
2.19.2.2 P6、P7口控制数码管原理图
kaily
发表于 2025-9-17 14:08:48
2.20 ADC实验 -- 数码管+ NTC热敏电阻+ADC测温(中断方式)
2.20.1 实验介绍
1、熟悉ADC工作原理,了解使用ADC数据采集热敏电阻NTC方法 2、NTC介绍,了解NTC工作原理 3、熟练使用P6、P7口控制LED数码管 4、了解二分搜索算法 5、熟悉STC8H8K64U实验箱原理图与AiCube-ISP系统软件的应用 6、本项目主要熟悉如何管理多文件项目
2.20.1.1 ADC通过采集NTC热敏电阻的电压值进行测温
NTC thermistor,即 Negative Temperature Coefficient thermistor,即“负温度系数热敏电阻”,其电阻值随温度升高而减小, ADC测温通过ADC3通道采集NTC热敏电阻的电压值来计算出温度值。如图所示, NTC热敏电阻与10K精密电阻R171串联分压后的电压输入到ADC3脚位,而热敏电阻随温度变化,阻值会产生变化, 从而导致分压电压跟着改变,于是通过ADC采集分压电压值,再根据热敏电阻的温度与阻值变化特性关系就能计算出温度值。
本实验程序通过查表法计算温度值,使用Excel软件生成温度与ADC读数对应表,放到程序 temp_table 数组里,供查表计算使用:
表格存放从 -40~120度对应的ADC数据,分度值为1度,ADC采集到的NTC数据与表格进行比较,从表格里找到最接近的数据所对应的温度就是当前NTC感应到的温度。 为了从表格里快速查找最接近的数据,我们采用二分法查表加快查找速度。 例如: -40度数据存放在数组temp_table,120度数据存放在数组temp_table,取中间的temp_table数据跟ADC采样数据进行对比, 如果ADC采样数据小于temp_table,就可以排除后面一半表格的数据,从前面一半数据里面再次进行对分比较,依此类推: 160 / 2 = 80 80 / 2 = 40 40 / 2 = 20 20 / 2 = 10 10 / 2 = 5 经过5次对分查表后,剩下的数据只有temp_table~temp_table 这几个数据,然后进行逐个比较, 如果ADC采样数据跟其中一个数据正好相等的话,那么当前温度值就是这个数据所对应的温度。 如果ADC采样数据在两个表格数据之间,则进行线性插补。 例如:ADC采样数据为2063,经过比较后发现在表格数据的2048(25度)与2093(26度)之间,则计算其百分比值作为温度的小数值。 为了方便计算,我们将最终数据放大10倍,这样就可以使用整数计算,提高计算速度: 1度的差值:2093 - 2048= 45 当前读数不满1度的值:2063 - 2048 = 15 计算小数部分,放大10倍:15*10 / 45 = 3 //取整 从而得出当前温度值为25.3度。 为了避免浮点计算,本实验使用整数来处理,人为规定一个0点(即定点计算),并且温度值扩大10倍(即分辨率为0.1度), 表格中0度对应的数据序号是40,扩大10倍为400,即400表示0度,大于400为正的温度,小于400为负的温度。 比如查表计算的结果是653,则实际温度为(653-400)/10 = 25.3度。 比如查表计算的结果是300,则实际温度为(300-400)/10 = -10.0度。
2.20.1.2 操作说明和实验现象
将本项目的HEX文件下载到STC8H8K64U的实验箱后 1、测量NTC温度,需要短接试验箱J14左侧两个跳线,才能连接NTC到芯片ADC脚:
2、在LED数码管上面低4位会动态显示当前的NTC测量的温度,高4位显示NTC的ADC值补码:
3、NTC热敏电阻在NTC跳线旁边,用手指触摸,或者向其吹气,可改变测量的温度值:
2.20.1.3 Keil环境下多文件项目管理说明
当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。 Ø 比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。 Ø 一般建议是一个模块对应一个.c程序文件和一个.h头文件 Ø 模块的初始化函数以及相关的数据处理函数都在.c文件中实现 Ø 与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量 Ø 如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。 Ø 特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误 Ø 为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含: #ifndef XXXX #define XXXX ... #endif
2.20.2 原理图
2.20.2.1 NTC温度检测原理图
2.20.2.2 P6、P7口控制数码管原理图
kaily
发表于 2025-9-17 14:40:47
2.21 大型综合实战 -- 课程设计:硬件SPI读写串行Flash
2.21.1 实验介绍
1、本实验项目主要目的: Ø掌握串口通讯 Ø硬件SPI读写串行Flash 2、掌握STC8H8K64U实验箱原理图中的串口通信电路、硬件SPI电路 3、熟练使用AiCube-ISP系统软件 4、了解USB Link1D工具的原理及使用 5、熟悉如何管理多文件项目
2.21.1.1 认识STC8H8K64U的实验箱
STC8H8K64U的实验箱正面图: J6:串口1的TypeC接口。本实验需要用专门定制的USB转串口/TTL(连接USB Link1D工具) - TypeC(连接实验箱J6)接口线相连。(详见J6原理图) SPI-Flash:详见STC8H8K64U实验箱中U6原理图
2.21.1.2 专门定制的USB转串口/TTL - TypeC接口线
2.21.1.3 USB Link1D工具
2.21.1.4 STC8H8K64U实验箱通过USB Link1D工具与电脑连接图
2.21.1.5 按键去抖动说明
如按键要判断为正常按下,而不是抖动,需要该按键保持按下持续保持为低状态时间是20ms ~ 50ms; 主循环中有个1ms的时间基准,将按键扫描程序作为1ms事件,按键状态维持50ms不变,即可对按键去抖动,得到稳定的键码。
2.21.1.6 Keil环境下多文件项目管理说明
当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。 Ø 比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。 Ø 一般建议是一个模块对应一个.c程序文件和一个.h头文件 Ø 模块的初始化函数以及相关的数据处理函数都在.c文件中实现 Ø 与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量 Ø 如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。 Ø 特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误 Ø 为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含: #ifndef XXXX #define XXXX ... #endif
2.21.2 原理图
kaily
发表于 2025-9-17 15:20:02
2.22 SPI实验 -- 硬件SPI驱动OLED显示图片、图形、字符
2.22.1 实验介绍
1、本实验项目主要目的: Ø硬件SPI驱动OLED显示 Ø如何实现显示图片 Ø如何实现6*8点阵字符、8*16点阵字符、16*16点阵汉字 Ø如何画直线、方框、圆 2、掌握STC8H8K64U实验箱原理图中SPI驱动OLED电路 3、了解图片取模的原理,并熟练使用AiCube-ISP系统软件中图片取模工具 4、了解字库生成原理,并熟练使用AiCube-ISP系统软件中字库生成工具 5、使用AiCube-ISP系统软件图片取模工具生成ASCII的点阵字符C代码 6、继续熟悉如何管理多文件项目
2.22.1.1 AiCube-ISP系统软件图片取模工具的使用
打开AiCube-ISP系统软件: Ü点击菜单栏“工具”à“图片取模工具”,打开“图片取模工具”浮窗 Ü点击“打开图片”按钮,选择准备要取模的图片 Ü点击“打开”按钮 如下图: 此时,在打开的“图片取模工具”浮窗,我们看到被选择的图片显示在原始图片区和转换后的图片区: Ü扫描模式:选择“垂直扫描,从左到右,从上到下” Ü存储顺序:选择“高位在前” Ü数据格式:选择“C表格格式” Ü勾选“图片反色” Ü设置:宽度:128;高度:64;输出格式:1位单色 Ü点击“开始转换” 就会生成相应的点阵图片C代码,如下图: 将点阵图片生成的C代码数据拷贝出来,本例是将此段代码放在“pic.h”中,形成表格数据,方便程序加载并在OLED上显示出来。
2.22.1.2 AiCube-ISP系统软件字库生成工具的使用
打开AiCube-ISP系统软件,点击菜单栏“工具”à“字库生成工具”,打开“字库生成工具”浮窗: Ü在“输入字符”区输入想要取模的文字,本例输入“深圳大学” Ü点击第一行的工具栏上的“汉”按钮,打开“设置字体”浮窗,字库字体选择“宋体” Ü扫描模式:选择“垂直扫描,从左到右,从上到下” Ü数据格式:选择“C表格-格式2(后索引模式)” Ü存储顺序:选择“低位在前” Ü点击“生成字库” 就会生成相应的点阵字库代码,如下图: 将点阵字库生成的C代码拷贝出来,本例是将此段代码放在“font.h”中,形成表格数据,方便程序查询并提取字库。
2.22.1.3 使用AiCube-ISP系统软件图片取模工具生成ASCII的点阵字符C代码
在AiCube-ISP系统软件的字库生成工具中,我们除了可以像上述操作步骤生成标准点阵字符C代码,还可以自己手动描点生成自己想要的点阵字符C代码。 打开AiCube-ISP系统软件,点击菜单栏“工具”à“字库生成工具”,打开“字库生成工具”浮窗。 先进行相应的设置: Ü点击“字库生成工具”浮窗第一行的“M”按钮,清空字符点阵区域 Ü确定点阵宽度:6;点阵高度:8(本例中有6*8的点阵ASCII字符C代码数据和8*16的点阵ASCII字符代码数据) Ü扫描模式:选择“垂直扫描,从左到右,从上到下” Ü数据格式:选择“C表格-格式1(纯数据格式)” Ü存储顺序:选择“低位在前” 如下图: 现在手动用鼠标在窗口左上角点阵描图区域,进行描图。 以ASCII码的“0”为例,进行如下图中的描绘,再点击“生成字库”按钮,即可生成相应的字库C代码数据。 以此类推,生成自己想要的全部ASCII码的点阵字库C代码数据。 将点阵字库生成的C代码拷贝出来,本例是将此段代码放在“ascii.h”中,形成表格数据,方便程序查询并提取字库。
2.22.1.4 认识STC8H8K64U实验箱和OLED屏
STC8H8K64U实验箱: J11:OLED插座。STC8H8K64U实验箱上的J11插座可插7线或8线的OLED屏,本实验使用的OLED屏是7线,第8脚浮空。详见STC8H8K64U实验箱中J11原理图。 OLED屏:
2.22.1.5 Keil环境下多文件项目管理说明 当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。 Ø 比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。 Ø 一般建议是一个模块对应一个.c程序文件和一个.h头文件 Ø 模块的初始化函数以及相关的数据处理函数都在.c文件中实现 Ø 与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量 Ø 如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。 Ø 特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误 Ø 为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含: #ifndef XXXX #define XXXX ... #endif
2.22.2 原理图
2.22.4 观察实验现象