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

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

[复制链接]
  • 打卡等级:常住居民II
  • 打卡总天数:87
  • 最近打卡:2025-10-11 15:03:16

7

主题

259

回帖

1393

积分

超级版主

积分
1393
发表于 2025-9-8 10:05:47 | 显示全部楼层
2.23         深大实验 -- ADC中断方式检测NTC热敏电阻测温+数码管显示

2.23.1.          实验介绍
                                 1、熟悉ADC数据采集热敏电阻NTC方法
                                 2、了解使用74HC595控制LED数码管
                                 3、熟悉Ai8051U实验箱原理图与AIapp-ISP系统软件的应用
                                 4、本项目主要熟悉如何管理多文件项目


2.23.1.1、   ADC通过采集NTC热敏电阻的电压值进行测温
                                 NTCthermistor,即 Negative Temperature Coefficientthermistor,即“负温度系数热敏电阻”,其电阻值随温度升高而减小,
                                 ADC测温通过ADC3通道采集NTC热敏电阻的电压值来计算出温度值。
                                 如图所示,NTC热敏电阻与10K精密电阻R165串联分压后的电压输入到ADC3脚位,而热敏电阻随温度变化,阻值会产生变化,
                                 从而导致分压电压跟着改变,于是通过ADC采集分压电压值,再根据热敏电阻的温度与阻值变化特性关系就能计算出温度值。

                                        截图202509081003045879.jpg
                                 本实验程序通过查表法计算温度值,使用Excel软件生成温度与ADC读数对应表,放到程序 temp_table 数组里,供查表计算使用:
                                 截图202509081003275852.jpg

                                 表格存放从 -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度。

2.23.1.2、   操作说明和实验现象
                                 将本项目的HEX文件下载到Ai8051U的实验箱后
                                 1、测量NTC温度,需要短接试验箱JUP2右侧两个跳线,才能连接NTC到芯片ADC脚:
                                  截图202509081003553976.jpg

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

                                 3、NTC热敏电阻在实验箱背面,用手指触摸,或者向其吹气,可改变测量的温度值:
                                  截图202509081004255787.jpg



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

截图202509081005234610.jpg
Project-ADC(实战--数码管 NTC热敏电阻 ADC测温(中断方式)).zip (44.12 KB, 下载次数: 26)
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:87
  • 最近打卡:2025-10-11 15:03:16

7

主题

259

回帖

1393

积分

超级版主

积分
1393
发表于 2025-9-8 10:33:03 | 显示全部楼层
2.24         深大实验 -- 硬件SPI控制74HC595驱动数码管显示模拟RTC时钟


2.24.1.          实验介绍
                                1、熟悉硬件SPI控制74HC595
                                2、了解使用74HC595控制LED数码管
                                3、熟悉Ai8051U实验箱原理图与AIapp-ISP系统软件的应用
                                4、熟悉如何管理多文件项目


2.24.1.1.       原理图
                                    截图202509081031237428.jpg

                                    截图202509081037513336.jpg

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

截图202509081032418669.jpg
Project-SPI(硬件SPI控制74HC595驱动数码管显示模拟RTC时钟)-Ai8051U.zip (15.4 KB, 下载次数: 26)


回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:87
  • 最近打卡:2025-10-11 15:03:16

7

主题

259

回帖

1393

积分

超级版主

积分
1393
发表于 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的实验箱正面图:
                                  截图202509081102021112.jpg

                                 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跳线原理图
                                 3SPI-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

截图202509081102388684.jpg

Project-SPI(硬件SPI读写串行Flash)-Ai8051U.zip (17.41 KB, 下载次数: 15)
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:87
  • 最近打卡:2025-10-11 15:03:16

7

主题

259

回帖

1393

积分

超级版主

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

2.26.1.2.        Aiapp-ISP系统软件字库生成工具的使用
                                打开AIapp-ISP系统软件,点击菜单栏“工具”à“字库生成工具”,打开“字库生成工具”浮窗:
                                     Ü  在“输入字符”区输入想要取模的文字,本例输入“深圳大学”
                                     Ü  点击第一行的工具栏上的“汉”按钮,打开“设置字体”浮窗,字库字体选择“宋体”
                                     Ü  扫描模式:选择“垂直扫描,从左到右,从上到下”
                                     Ü  数据格式:选择“C表格-格式2(后索引模式)”
                                     Ü  存储顺序:选择“低位在前”
                                     Ü  点击“生成字库”
                                就会生成相应的点阵字库代码,如下图:
                                 截图202509081131459396.jpg
                                将点阵字库生成的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(纯数据格式)”
                                     Ü  存储顺序:选择“低位在前”
                                如下图:
                                  截图202509081132012009.jpg
                                现在手动用鼠标在窗口左上角点阵描图区域,进行描图。
                                ASCII码的“0”为例,进行如下图中的描绘,再点击“生成字库”按钮,即可生成相应的字库C代码数据。
                                以此类推,生成自己想要的全部ASCII码的点阵字库C代码数据。
                                将点阵字库生成的C代码拷贝出来,本例是将此段代码放在“ascii.h”中,形成表格数据,方便程序查询并提取字库。
                                 截图202509081132219083.jpg

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

                                OLED屏
                                 截图202509081132445074.jpg

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

截图202509081133418351.jpg

Project-SPI(硬件SPI驱动OLED显示图片、图形、字符)-Ai8051U.zip (175.41 KB, 下载次数: 22)

回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-16 05:46 , Processed in 0.111108 second(s), 59 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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