找回密码
 立即注册
楼主: kaily

STC32G-实验指导书:实验内容与源代码

[复制链接]
  • 打卡等级:常住居民II
  • 打卡总天数:85
  • 最近打卡:2025-09-30 09:38:39

7

主题

257

回帖

1369

积分

超级版主

积分
1369
发表于 3 天前 | 显示全部楼层
3.14           串口实验 -- 串口通讯(硬件UART2UART3收发通讯)

3.14.1              实验介绍
                                    1、  熟悉串口2/UART2和串口3/UART3的通讯原理
                                    2、  熟悉STC32G12K128实验箱及其原理图
                                    3、  熟练使用AiCube-ISP软件
                                    4、  认识USB转双串口工具@Ai8H2K12U、杜邦线、USB转串口/TTL连接线
                                    5、  熟悉如何管理多文件项目

3.14.1.1           认识STC32G12K128实验箱
                                    STC32G12K128实验箱正面图:
                                     截图202509301610542298.jpg
                                    1、J8:将STC32G12K128实验箱上“J8跳线”跳线连上,使主控芯片UART2的P4.7/TxD2_2与UART3的P5.0/TxD3联通。
                                                实现本实验要求的串口2/UART2和串口3/UART3收发通讯。(详见J7和J8原理图)
                                    2、J7:STC32G12K128实验箱上J7的Pin2通过1根杜邦线连接UART3的P5.1/TxD3到双串口工具(Ai8H2K12U)S-TxD2,
                                               使主控芯片UART3的P5.1/TxD3发送的串口数据在电脑端显示。(详见J7和J8原理图)

3.14.1.2           2根杜邦线(1公头、1母头)
                                    

3.14.1.3           USB转串口/TTL连接线
                                    

3.14.1.4           USB转双串口工具@Ai8H2K12U:正面
                                    

3.14.1.5           本实验STC32G12K128实验箱与电脑连接实物图
                                     截图202509301612089566.jpg

3.14.1.6            Keil环境下多文件项目管理说明
                                    当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性
                                           Ø   比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。
                                           Ø   一般建议是一个模块对应一个.c程序文件和一个.h头文件
                                           Ø   模块的初始化函数以及相关的数据处理函数都在.c文件中实现
                                           Ø   与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量
                                           Ø   如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。
                                           Ø   特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误
                                           Ø   为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含:
                                                  #ifndef XXXX
                                                  #define XXXX
                                                  ...
                                                  #endif

3.14.2              原理图
                                          

截图202509301612532998.jpg
Project-串口通讯(硬件UART2与UART3收发通讯)-STC32G.zip (12.68 KB, 下载次数: 0)
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:85
  • 最近打卡:2025-09-30 09:38:39

7

主题

257

回帖

1369

积分

超级版主

积分
1369
发表于 3 天前 | 显示全部楼层
3.15            串口实验 -- 串口通讯(硬件UART2UART3数据透传)
  
3.15.1             实验介绍
                                    1、  了解双串口数据透传的原理及应用
                                    2、  熟悉STC32G12K128实验箱及其原理图
                                    3、  熟练使用AiCube-ISP系统软件
                                    4、  认识USB转双串口工具@Ai8H2K12U、杜邦线、USB转串口/TTL连接线
                                    5、  熟悉如何管理多文件项目

3.15.1.1           认识STC32G12K128实验箱
                                    STC32G12K128实验箱正面图:
                                     截图202509301626374830.jpg
                                    1、J8:      STC32G12K128实验箱上J8的Pin1通过1根杜邦线将UART2的P4.7/TxD2_2发送脚与双串口工具(Ai8H2K12U)的S-TxD相连接;
                                                     STC32G12K128实验箱上J8的Pin2通过1根杜邦线将UART3的P5.0/RxD3接收脚与双串口工具(Ai8H2K12U)的S-RxD2相连接。
                                                   (详见J7和J8原理图)
                                    2、J7:      STC32G12K128实验箱上J7的Pin1通过1根杜邦线将UART2的P4.6/RxD2_2接收脚与双串口工具(Ai8H2K12U)的S-RxD相连接;
                                                     STC32G12K128实验箱上J7的Pin2通过1根杜邦线将UART3的P5.1/TxD3发送脚与双串口工具(Ai8H2K12U)的S-TxD2相连接。
                                                   (详见J7和J8原理图)

3.15.1.2           5根杜邦线(1公头、1母头)
                                    

3.15.1.3           USB转串口/TTL连接线
                                    

3.15.1.4           USB转双串口工具@Ai8H2K12U:正面
                                    

3.15.1.5              USB转双串口工具@Ai8H2K12U:背面
                                     截图202509301631063387.jpg

3.15.1.6           本实验STC32G12K128实验箱与电脑连接实物图
                                     截图202509301626533285.jpg
                                    

3.15.1.7            Keil环境下多文件项目管理说明
                                    当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性
                                           Ø   比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。
                                           Ø   一般建议是一个模块对应一个.c程序文件和一个.h头文件
                                           Ø   模块的初始化函数以及相关的数据处理函数都在.c文件中实现
                                           Ø   与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量
                                           Ø   如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。
                                           Ø   特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误
                                           Ø   为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含:
                                                  #ifndef XXXX
                                                  #define XXXX
                                                  ...
                                                  #endif

3.15.2              原理图
                                         

截图202509301628275666.jpg
Project-串口通讯(硬件UART2与UART3数据透传)-STC32G.zip (11.15 KB, 下载次数: 0)
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:85
  • 最近打卡:2025-09-30 09:38:39

7

主题

257

回帖

1369

积分

超级版主

积分
1369
发表于 3 天前 | 显示全部楼层
3.16       串口实验 -- 串口1_2_3_4(中断设置标志位,主循环查询),演示实验

                           演示串口1、串口2、串口3、串口4中断同时打开时,
                           在各自的中断程序中设置中断事件标志位,
                           标志已产生相应的中断,在主循环中查询中断事件标志位,
                           来处理不是特急处理的任务,不堵塞其他中断


3.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中断同时打开时,
                           在各自的中断程序中设置中断事件标志位,标志已产生相应的中断,
                           在主循环中查询中断事件标志位,来处理不是特急处理的任务,不堵塞其他中断

截图202509301644277951.jpg
Project-串口实验(串口1_2_3_4-中断设置标志位主循环查询)-STC32G.zip (10.52 KB, 下载次数: 0)
Project-串口 定时器 外部中断(中断设置标志位主循环查询)-STC32G.zip (12.28 KB, 下载次数: 0)
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:85
  • 最近打卡:2025-09-30 09:38:39

7

主题

257

回帖

1369

积分

超级版主

积分
1369
发表于 3 天前 | 显示全部楼层
3.18           串口实验 -- 串口通讯(ADC检测按键,ADC热敏电阻测温,串口绘图)

3.18.1              实验介绍
                                   1、本实验项目主要目的:
                                        Ø  掌握串口通讯,了解串口绘图工具
                                        Ø  继续熟悉ADC的应用,熟悉ADC检测按键,熟悉ADC热敏电阻(NTC)测温
                                   2、掌握STC32G12K128实验箱原理图中的串口通信部分电路,ADC应用部分电路
                                   3、继续熟悉AiCube-ISP系统软件中串口助手工具,了解串口绘图工具
                                   4、掌握USB转双串口工具@Ai8H2K12U的原理及应用
                                   5、继续熟悉如何管理多文件项目

3.18.1.1          认识STC32G12K128实验箱
                                   STC32G12K128的实验箱正面图(稍微倾斜角度拍摄,便于看清跳线引脚):
                                    截图202509301651104775.jpg
                                   1、J8:STC32G12K128实验箱上J8的PIN1通过1根杜邦线将UART2的P4.7/TxD2_2发送脚和双串口工具(Ai8H2K12U)的S-TxD2相连接。
                                            (详见J7和J8原理图)
                                   2、J7:STC32G12K128实验箱上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串口发送到“串口绘图”显示实时采样数据。

3.18.1.2           2根杜邦线(1公头、1母头)
                                    

3.18.1.3           USB转串口/TTL连接线
                                    

3.18.1.4           USB转双串口工具@Ai8H2K12U:正面
                                    

3.18.1.5           USB转双串口工具@Ai8H2K12U:背面
                                    

3.18.1.6           本实验中STC32G12K128实验箱与电脑连接实物图
                                     截图202509301651258315.jpg

3.18.1.7           Keil环境下多文件项目管理说明
                                   当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性
                                        Ø   比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。
                                        Ø   一般建议是一个模块对应一个.c程序文件和一个.h头文件
                                        Ø   模块的初始化函数以及相关的数据处理函数都在.c文件中实现
                                        Ø   与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量
                                        Ø   如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。
                                        Ø   特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误
                                        Ø   为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,
                                              可避免在同一个.c文件中对同一个.h头文件进行多次包含:
                                                 #ifndef XXXX
                                                 #define XXXX
                                                 ...
                                                 #endif

3.18.2              原理图
                                          
                                    

截图202509301743164850.jpg
Project-串口通讯(ADC按键 NTC采样数据 串口绘图)-STC32G.zip (13.41 KB, 下载次数: 2)
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:85
  • 最近打卡:2025-09-30 09:38:39

7

主题

257

回帖

1369

积分

超级版主

积分
1369
发表于 3 天前 | 显示全部楼层
3.19            大型综合实战 -- 模拟RTC时钟+数码管+ADC检测按键(查询)

3.19.1                实验介绍
                                      1、熟悉ADC按键扫描方法
                                      2、了解使用P6P7口控制LED数码管
                                      3、熟悉软件模拟RTC,实现RTC的时、分、秒控制和设置
                                      4、扩展部分:如何实现长按键
                                      5、熟悉STC32G12K128实验箱布局及原理图,熟练使用AiCube-ISP系统软件
                                      6、熟悉如何管理多文件项目

3.19.1.1             ADC键盘计算键码说明
                                      ADC键盘方案在很多实际产品设计中,验证了其稳定可靠,即使按键使用导电膜,都很可靠。
                                      12ADC的转换结果范围位0 ~409516个键直接使用相同的电阻进行分压,
                                      理论上各个键对应的ADC值为 (4096 / 16) * k = 256 * kk = 1 ~ 16
                                      特别的,k=16时,对应的ADC值是4095
                                      但是实际会有偏差,则判断时限制这个偏差,ADC_OFFSET+/-偏差,
                                      ADC值在 (256 * k - ADC_OFFSET) (256 * k + ADC_OFFSET)之间为键有效。
                                      间隔一定的时间,就采样一次ADC,比如10ms
                                      为了避免偶然的ADC值误判,或者避免ADC在上升或下降时误判,使用连续3ADC值均在偏差范围内时,ADC值才认为有效。
                                      以上算法,能保证读键非常可靠。

3.19.1.2             ADC按键实验现象和操作说明
                                      将本项目的HEX文件下载到STC32G12K128的实验箱后
                                      1、在LED数码管的高6位会动态显示当前的RTC时间,低2位会显示按下的ADC按键的键码
                                        截图202509301708136545.jpg

                                      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,可实现快速设置功能

3.19.1.3             按键扫描说明
                                      如按键要判断为正常按下,而不是抖动,需要该按键保持按下持续时间是20ms ~ 50ms
                                      主循环中有个10ms的时间基准,将按键扫描程序作为10ms事件,按键的值检测3次都在有效范围内,即30ms去抖动处理,得到稳定的键码。

3.19.1.4             Keil环境下多文件项目管理说明
                                      当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性
                                           Ø   比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。
                                           Ø   一般建议是一个模块对应一个.c程序文件和一个.h头文件
                                           Ø   模块的初始化函数以及相关的数据处理函数都在.c文件中实现
                                           Ø   与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量
                                           Ø   如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。
                                           Ø   特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误
                                           Ø   为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,
                                                可避免在同一个.c文件中对同一个.h头文件进行多次包含:
                                                #ifndef XXXX
                                                #define XXXX
                                                ...
                                                #endif

3.19.2                原理图
  
3.19.2.1             ADC按键原理图
                                       

3.19.2.2             P6P7口控制数码管原理图
                                          

截图202509301709189336.jpg
Project-ADC(实战--时钟 数码管 ADC按键扫描)-STC32G.zip (19.45 KB, 下载次数: 0)
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:85
  • 最近打卡:2025-09-30 09:38:39

7

主题

257

回帖

1369

积分

超级版主

积分
1369
发表于 3 天前 | 显示全部楼层
3.20             ADC实验 -- 数码管+ NTC热敏电阻+ADC测温(中断方式)
  
3.20.1                实验介绍
                                      1、熟悉ADC工作原理,了解使用ADC数据采集热敏电阻NTC方法
                                      2NTC介绍,了解NTC工作原理
                                      3、熟练使用P6P7口控制LED数码管
                                      4、了解二分搜索算法
                                      5、熟悉STC32G12K128实验箱原理图与AiCube-ISP系统软件的应用
                                      6、熟悉如何管理多文件项目

3.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[0],120度数据存放在数组temp_table[160],取中间的temp_table[80]数据跟ADC采样数据进行对比,
                                       如果ADC采样数据小于temp_table[80],就可以排除后面一半表格的数据,从前面一半数据里面再次进行对分比较,依此类推:
                                              160 / 2 = 80
                                              80 / 2 = 40
                                              40 / 2 = 20
                                              20 / 2 = 10
                                              10 / 2 = 5
                                       经过5次对分查表后,剩下的数据只有temp_table[n]~temp_table[n+5] 这几个数据,然后进行逐个比较,
                                       如果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度。

3.20.1.2              操作说明和实验现象
                                       将本项目的HEX文件下载到STC32G12K128的实验箱后
                                       1、测量NTC温度,需要短接试验箱J14左侧两个跳线,才能连接NTC到芯片ADC脚:
                                       

                                       2、在LED数码管上面低4位会动态显示当前的NTC测量的温度,高4位显示NTC的ADC值补码:
                                       

                                       3、NTC热敏电阻在NTC跳线旁边,用手指触摸,或者向其吹气,可改变测量的温度值:
                                       

3.20.1.3             Keil环境下多文件项目管理说明  
                                       当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性
                                              Ø   比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。
                                              Ø   一般建议是一个模块对应一个.c程序文件和一个.h头文件
                                              Ø   模块的初始化函数以及相关的数据处理函数都在.c文件中实现
                                              Ø   与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量
                                              Ø   如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。
                                              Ø   特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误
                                              Ø   为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,
                                                   可避免在同一个.c文件中对同一个.h头文件进行多次包含:
                                                     #ifndef XXXX
                                                     #define XXXX
                                                     ...
                                                     #endif

3.20.2                 原理图

3.20.2.1              NTC温度检测原理图
                                       

3.20.2.2                    P6、P7口控制数码管原理图
                                           

Project-ADC(实战--数码管 NTC热敏电阻 ADC测温(中断方式))-STC32G.zip (18.84 KB, 下载次数: 2)
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:85
  • 最近打卡:2025-09-30 09:38:39

7

主题

257

回帖

1369

积分

超级版主

积分
1369
发表于 3 天前 | 显示全部楼层
3.21            大型综合实战 -- 课程设计:硬件SPI读写串行Flash

3.21.1                实验介绍
                                      1、本实验项目主要目的:
                                            Ø  掌握串口通讯
                                            Ø  硬件SPI读写串行Flash
                                      2、掌握STC32G12K128实验箱原理图中的串口通信电路、硬件SPI电路
                                      3、熟练使用AiCube-ISP系统软件
                                      4、了解USB Link1D工具的原理及使用
                                      5、熟悉如何管理多文件项目

3.21.1.1             认识STC32G12K128的实验箱
                                      STC32G12K128的实验箱正面图:
                                        截图202509301751029187.jpg
                                      J6:串口1的TypeC接口。本实验需要用专门定制的USB转串口/TTL(连接USB Link1D工具) - TypeC(连接实验箱J6)接口线相连。
                                            (详见J6原理图)
                                      SPI-Flash:详见STC32G12K128实验箱中U6原理图

3.21.1.2             专门定制的USB转串口/TTL - TypeC接口线
                                       

3.21.1.3             USB Link1D工具
                                      

3.21.1.4             STC32G12K128实验箱通过USB Link1D工具与电脑连接图
                                        截图202509301751183619.jpg

3.21.1.5             按键去抖动说明
                                      如按键要判断为正常按下,而不是抖动,需要该按键保持按下持续保持为低状态时间是20ms ~ 50ms
                                      主循环中有个1ms的时间基准,将按键扫描程序作为1ms事件,按键状态维持50ms不变,即可对按键去抖动,得到稳定的键码。

3.21.1.6             Keil环境下多文件项目管理说明
                                      当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性
                                            Ø   比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。
                                            Ø   一般建议是一个模块对应一个.c程序文件和一个.h头文件
                                            Ø   模块的初始化函数以及相关的数据处理函数都在.c文件中实现
                                            Ø   与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量
                                            Ø   如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。
                                            Ø   特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误
                                            Ø   为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,
                                                 可避免在同一个.c文件中对同一个.h头文件进行多次包含:
                                                    #ifndef XXXX
                                                    #define XXXX
                                                    ...
                                                    #endif

3.21.2                原理图
          
                                       
                                       

截图202509301751558897.jpg
Project-SPI(硬件SPI读写串行Flash)-STC32G.zip (17.19 KB, 下载次数: 2)
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:85
  • 最近打卡:2025-09-30 09:38:39

7

主题

257

回帖

1369

积分

超级版主

积分
1369
发表于 3 天前 | 显示全部楼层
3.22             SPI实验 -- 硬件SPI驱动OLED显示图片、图形、字符

3.22.1               实验介绍
                                     1、本实验项目主要目的:
                                           Ø  硬件SPI驱动OLED显示
                                           Ø  如何实现显示图片
                                           Ø  如何实现6*8点阵字符、8*16点阵字符、16*16点阵汉字
                                           Ø  如何画直线、方框、圆
                                     2、掌握STC32G12K128实验箱原理图中SPI驱动OLED电路
                                     3、了解图片取模的原理,并熟练使用AiCube-ISP系统软件中图片取模工具
                                     4、了解字库生成原理,并熟练使用AiCube-ISP系统软件中字库生成工具
                                     5、使用AiCube-ISP系统软件图片取模工具生成ASCII的点阵字符C代码
                                     6、继续熟悉如何管理多文件项目

3.22.1.1            AiCube-ISP系统软件图片取模工具的使用
                                     打开AiCube-ISP系统软件:
                                           Ü  点击菜单栏“工具”à“图片取模工具”,打开“图片取模工具”浮窗
                                           Ü  点击“打开图片”按钮,选择准备要取模的图片
                                           Ü  点击“打开”按钮
                                     如下图:
                                     截图202509301802093494.jpg
                                     此时,在打开的“图片取模工具”浮窗,我们看到被选择的图片显示在原始图片区和转换后的图片区:
                                           Ü  扫描模式:选择“垂直扫描,从左到右,从上到下”
                                           Ü  存储顺序:选择“高位在前”
                                           Ü  数据格式:选择“C表格格式”
                                           Ü  勾选“图片反色”
                                           Ü  设置:宽度:128;高度:64;输出格式:1位单色
                                           Ü  点击“开始转换”
                                     就会生成相应的点阵图片C代码,如下图:
                                     截图202509301802327256.jpg
                                     将点阵图片生成的C代码数据拷贝出来,本例是将此段代码放在“pic.h”中,形成表格数据,方便程序加载并在OLED上显示出来。

3.22.1.2            AiCube-ISP系统软件字库生成工具的使用
                                     打开AiCube-ISP系统软件,点击菜单栏“工具”à“字库生成工具”,打开“字库生成工具”浮窗:
                                           Ü  在“输入字符”区输入想要取模的文字,本例输入“深圳大学”
                                           Ü  点击第一行的工具栏上的“汉”按钮,打开“设置字体”浮窗,字库字体选择“宋体”
                                           Ü  扫描模式:选择“垂直扫描,从左到右,从上到下”
                                           Ü  数据格式:选择“C表格-格式2(后索引模式)”
                                           Ü  存储顺序:选择“低位在前”
                                           Ü  点击“生成字库”
                                     就会生成相应的点阵字库代码,如下图:
                                     截图202509301802449844.jpg
                                     将点阵字库生成的C代码拷贝出来,本例是将此段代码放在“font.h”中,形成表格数据,方便程序查询并提取字库。

3.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(纯数据格式)”
                                           Ü  存储顺序:选择“低位在前”
                                     如下图:
                                     截图202509301802568645.jpg
                                     现在手动用鼠标在窗口左上角点阵描图区域,进行描图。
                                     ASCII码的“0”为例,进行如下图中的描绘,再点击“生成字库”按钮,即可生成相应的字库C代码数据。
                                     以此类推,生成自己想要的全部ASCII码的点阵字库C代码数据。
                                     截图202509301803085005.jpg
                                     将点阵字库生成的C代码拷贝出来,本例是将此段代码放在“ascii.h”中,形成表格数据,方便程序查询并提取字库。

3.22.1.4            认识STC32G12K128实验箱和OLED
                                     STC32G12K128实验箱:
                                     截图202509301803215849.jpg
                                     J11:OLED插座。STC32G12K128实验箱上的J11插座可插7线或8线的OLED屏,本实验使用的OLED屏是7线,第8脚浮空。
                                             详见STC32G12K128实验箱中J11原理图。
                                     OLED屏:
                                    

3.22.1.5            Keil环境下多文件项目管理说明
                                     当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性
                                           Ø   比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。
                                           Ø   一般建议是一个模块对应一个.c程序文件和一个.h头文件
                                           Ø   模块的初始化函数以及相关的数据处理函数都在.c文件中实现
                                           Ø   与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量
                                           Ø   如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。
                                           Ø   特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误
                                           Ø   为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,
                                                可避免在同一个.c文件中对同一个.h头文件进行多次包含:
                                                          #ifndef XXXX
                                                          #define XXXX
                                                          ...
                                                          #endif

3.22.2               原理图
                                    

3.22.4               观察实验现象
                                     截图202509301804041163.jpg     截图202509301804135176.jpg

                                     截图202509301804226516.jpg     截图202509301804303195.jpg

截图202509301806507018.jpg
Project-SPI(硬件SPI驱动OLED显示图片、图形、字符)-STC32G.zip (175.6 KB, 下载次数: 0)
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-10-3 05:56 , Processed in 0.124788 second(s), 82 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表