kaily
发表于 2025-9-5 11:25:17
2.14 深大实验-串口通讯(硬件UART1与UART2收发通讯)
2.14.1. 实验介绍
1、熟悉串口1/UART1和串口2/UART2的通讯原理
2、了解Ai8051U实验箱布局及其原理图
3、熟悉AIapp-ISP系统软件的应用
4、熟悉如何管理多文件项目
2.14.1.1. 认识实验箱
Ai8051U的实验箱正面图:
1、J20: USB转双串口U2(Ai8H2K12U)TypeC接口。本实验需要用TypeA(连接电脑)-TypeC(连接实验箱J20)线相连。(详见J20-U2原理图)
2、J18跳线:本实验需要将实验箱上“J18跳线A”的跳线连上。使主控芯片UART2的P4.3/TxD2_2与双串口U2(Ai8H2K12U)联通。(详见J18跳线原理图)
3、S2开关:S2开关默认是“断”,本实验要将S2开关拨到“通”,使主控芯片UART1的P3.7/TxD_2与UART2的P4.2/RxD2_2联通。
UART1与UART2通讯时,LED10与LED11会闪烁。(详见S2开关原理图)
2.14.1.2. Keil环境下多文件项目管理说明
当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。
比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。
一般建议是一个模块对应一个.c程序文件和一个.h头文件
模块的初始化函数以及相关的数据处理函数都在.c文件中实现
与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量
如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。
特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误
为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含:
#ifndef XXXX
#define XXXX
...
#endif
kaily
发表于 2025-9-5 14:23:40
2.15 深大实验-串口通讯(硬件UART1与UART2数据透传)
2.15.1. 实验介绍
1、 熟悉双串口数据透传的应用 2、 了解Ai8051U实验箱原理图与AIapp-ISP系统软件的应用 3、 熟悉如何管理多文件项目
2.15.1.1. 认识实验箱
Ai8051U的实验箱正面图:
1、J20: USB转双串口U2(Ai8H2K12U)TypeC接口。本实验需要用TypeA(连接电脑)-TypeC(连接实验箱J20)线相连。(详见J20-U2原理图) 2、J18跳线:本实验需要将实验箱上“J18跳线A、B、C、D”的跳线连上。 ØJ18.A:使主控芯片UART2的P4.3/TxD2_2与双串口U2(Ai8H2K12U)联通。 ØJ18.B:使主控芯片UART2的P4.2/RxD2_2与双串口U2(Ai8H2K12U)联通。 ØJ18.C:使主控芯片UART1的P3.7/TxD_2与双串口U2(Ai8H2K12U)联通。 ØJ18.D:使主控芯片UART1的P3.6/RxD_2与双串口U2(Ai8H2K12U)联通。 详见J18跳线原理图
2.15.1.2. Keil环境下多文件项目管理说明
当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。 Ø 比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。 Ø 一般建议是一个模块对应一个.c程序文件和一个.h头文件 Ø 模块的初始化函数以及相关的数据处理函数都在.c文件中实现 Ø 与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量 Ø 如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。 Ø 特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误 Ø 为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含: #ifndef XXXX #define XXXX ... #endif
kaily
发表于 2025-9-5 14:39:25
2.16 大型综合实战--深大课程设计:硬件UART1发送按键码,接收端蜂鸣器根据收到的键码发声
2.16.1. 实验介绍
1、熟悉串口互联收发功能的使用 2、熟悉矩阵式按键扫描方法 3、I/O控制无源蜂鸣器发声,Key0~ Key7按键按下,会发出对应的Do/Re/Mi/Fa/So/La/Si/Do音符 4、熟悉Ai8051U实验箱原理图与AIapp-ISP系统软件的应用 5、熟悉如何管理多文件项目
2.16.1.1. 按键扫描说明
如按键要判断为正常按下,而不是抖动,需要该按键保持按下持续保持为低状态时间是20ms ~ 50ms; 主循环中有个1ms的时间基准,将按键扫描程序作为1ms事件,按键状态维持20ms不变,即可对按键去抖动,得到稳定的键码。
2.16.1.2. 实验现象和操作说明
Ai8051U的实验箱正面图:
1、矩阵式键盘:在实验箱A按下按键Key0 ~ Key7,实验箱B的蜂鸣器会发出对应的Do/Re/Mi/Fa/So /La/Si/Do音符 2、蜂鸣器跳线:需要将实验箱上“跳线3:蜂鸣器/原理图标号是J1C”的跳线连上,蜂鸣器才会发声 3、J6串口通讯接口(见原理图J6):通过3根或4根杜邦线连接2个Ai8051U实验箱,实现串口通讯。注意:本实验通过UART1串口通讯: Ø 用3根杜邦线,使实验箱A的J6.5(P3.7)、J6.6(P3.6)、J6.7(Gnd)连接 实验箱B的J6.6(P3.6)、J6.5(P3.7)、J6.7(Gnd),2个实验箱都通过电脑供电; Ø 用4根杜邦线,使实验箱A的J6.4(SYS-Vcc)、J6.5(P3.7)、J6.6(P3.6)、J6.7(Gnd)连接 实验箱B的J6.4(SYS-Vcc)、J6.6(P3.6)、J6.5(P3.7)、J6.7(Gnd), 这样连接电脑的实验箱就可以给另一个实验箱供电,不需要2个实验箱都通过电脑供电。 4、杜邦线:3根/4根
2.16.1.3. Keil环境下多文件项目管理说明
当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。 Ø 比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。 Ø 一般建议是一个模块对应一个.c程序文件和一个.h头文件 Ø 模块的初始化函数以及相关的数据处理函数都在.c文件中实现 Ø 与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量 Ø 如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。 Ø 特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误 Ø 为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含: #ifndef XXXX #define XXXX ... #endif
kaily
发表于 2025-9-5 14:52:11
2.17 深大实验-串口通讯(串口通讯,串口绘图,ADC检测按键,ADC热敏电阻测温)
2.17.1. 实验介绍
1、本实验项目主要目的: Ø掌握串口通讯,了解串口绘图工具 Ø继续熟悉ADC的应用,熟悉ADC检测按键,熟悉ADC热敏电阻(NTC)测温 2、掌握Ai8051U实验箱原理图中的串口通信部分电路,ADC应用部分电路 3、继续熟悉AIapp-ISP系统软件中串口助手工具,了解串口绘图工具 4、继续熟悉如何管理多文件项目
2.17.1.1. 认识实验箱
Ai8051U的实验箱正面图: 1、J20: USB转双串口U2(Ai8H2K12U)TypeC接口。本实验需要用TypeA(连接电脑)-TypeC(连接实验箱J20)线相连。(详见J20-U2原理图) 2、J18跳线 :本实验需要将实验箱上“J18跳线C”的跳线连上。 ØJ18.C :使主控芯片UART1的P3.7/TxD_2与双串口U2(Ai8H2K12U)联通。 详见J18跳线原理图 3、NTC跳线:Negative Temperature Coefficient thermistor,即“负温度系数热敏电阻”, 其电阻值随温度升高而减小,ADC测温通过ADC3通道采集NTC温敏电阻的电压值来计算出温度值。 详见NTC原理图所示,NTC温敏电阻与10K精密电阻R165串联分压后的电压输入到ADC3脚位, 而温敏电阻随温度变化,阻值会产生变化,从而导致分压电压跟着改变, 于是通过ADC采集分压电压值进行ADC转换,将转换的ADC结果通过UART1串口发送到“串口绘图”显示实时采样数据。 4、ADC按键:按下不同的ADC按键可以改变P1.0-ADC-KEY脚的电压,ADC通过采集P1.0-ADC-KEY脚的电压进行ADC转换, 然后将转换的ADC结果通过UART1串口发送到“串口绘图”显示实时采样数据。
2.17.1.2. Keil环境下多文件项目管理说明
当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。 Ø 比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。 Ø 一般建议是一个模块对应一个.c程序文件和一个.h头文件 Ø 模块的初始化函数以及相关的数据处理函数都在.c文件中实现 Ø 与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量 Ø 如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。 Ø 特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误 Ø 为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含: #ifndef XXXX #define XXXX ... #endif
kaily
发表于 2025-9-5 16:33:52
2.18 深大实验-串口通讯(硬件UART1与UART2收发通讯-奇偶校验)
2.18.1. 实验介绍
1、熟悉串口1/UART1和串口2/UART2的通讯原理 2、了解数据奇偶校验原理(本实验使用偶校验) 奇偶校验(Parity Check)是一种校验代码传输正确性的方法。 根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。 采用奇数的称为奇校验,反之,称为偶校验。 采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它反映这组代码中“1”的个数为奇数或偶数。 若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。 若用偶校验,则当接收端收到这组代码时,校验“1”的个数是否为偶数,从而确定传输代码的正确性。 3、熟悉Ai8051U实验箱原理图与AIapp-ISP系统软件的应用 4、熟悉如何管理多文件项目
2.18.1.1. 认识实验箱 Ai8051U的实验箱正面图: 1、J20: USB转双串口U2(Ai8H2K12U)TypeC接口。 本实验需要用TypeA(连接电脑)-TypeC(连接实验箱J20)线相连。(详见J20-U2原理图) 2、J18跳线:本实验需要将实验箱上“J18跳线A”的跳线连上。 使主控芯片UART2的P4.3/TxD2_2与双串口工具U2(Ai8H2K12U)联通。(详见J18跳线原理图) 3、S2开关: S2开关默认是“断”,本实验要将S2开关拨到“通”,使主控芯片UART1的P3.7/TxD_2与UART2的P4.2/RxD2_2联通。 UART1与UART2通讯时,LED10与LED11会闪烁。(详见S2开关原理图)
2.18.1.2. Keil环境下多文件项目管理说明 当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。 Ø 比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。 Ø 一般建议是一个模块对应一个.c程序文件和一个.h头文件 Ø 模块的初始化函数以及相关的数据处理函数都在.c文件中实现 Ø 与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量 Ø 如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。 Ø 特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误 Ø 为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含: #ifndef XXXX #define XXXX ... #endif
kaily
发表于 2025-9-5 17:44:48
2.19 深大实验-串口通讯(USB-CDC发命令控制硬件UART1与UART2多机通讯)
2.19.1. 实验介绍 1、熟悉串口1/UART1和串口2/UART2的通讯原理 2、了解多机通讯原理 多机通讯的过程如下: ①置全部从机的SM2=1,处于只接收地址帧状态。 ②主机首先发送呼叫地址帧信息,将第9位TB8设置为1,以表示发送的是呼叫地址帧。 ③所有从机接收到呼叫地址帧后,各自将接收到的主机呼叫的地址与本机的地址相比较: Ø若比较结果相等,则为被寻址从机,清除SM2=0,准备接收从主机发送的数据帧,直至全部数据传输完; Ø若比较不相等,则为非寻址从机,仍维持SM2=1不变,对其后发来的数据帧不予理睬, 即接收到的数据帧内容不装入SBUF,不置位,RI=0,不会产生中断请求,直至被寻址为止。 ④主机在发送完呼叫地址帧后,接着发送一连串的数据帧,其中的第9位TB8=0,以表示为数据帧。 只有那些SM2位为0的从机(即已接收地址帧的从机)才会接收数据帧。 ⑤当主机改变从机通信时间则再发呼叫地址帧,寻呼其他从机, 原先被寻址的从机经分析得知主机在寻呼其他从机时,恢复其SM2=1,对其后主机发送的数据帧不予理睬。 上述过程均在软件控制下实现。 3、熟悉Ai8051U实验箱原理图与AIapp-ISP系统软件的应用 4、熟悉如何管理多文件项目
2.19.1.1. 认识实验箱 Ai8051U的实验箱下方正面图: S2开关:S2开关默认是“断”,本实验要将S2开关拨到“通”,使主控芯片UART1的P3.7/TxD_2与UART2的P4.2/RxD2_2联通。 UART1(主机)与UART2(从机)通讯时,LED11会闪烁。(详见S2开关原理图)
2.19.1.2. Keil环境下多文件项目管理说明 当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。 Ø 比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。 Ø 一般建议是一个模块对应一个.c程序文件和一个.h头文件 Ø 模块的初始化函数以及相关的数据处理函数都在.c文件中实现 Ø 与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量 Ø 如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。 Ø 特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误 Ø 为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含: #ifndef XXXX #define XXXX ... #endif
kaily
发表于 2025-9-5 18:09:59
2.20 大学实验--串口1_2_3_4(中断设置标志位,主循环查询),演示实验
演示串口1、串口2、串口3、串口4中断同时打开时, 在各自的中断程序中设置中断事件标志位, 标志已产生相应的中断,在主循环中查询中断事件标志位, 来处理不是特急处理的任务,不堵塞其他中断
2.21 大学实验--串口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-8 09:33:55
2.22 大型综合实战 -- 深大课程设计:模拟RTC时钟+数码管+ADC查询方式检测按键
2.22.1. 实验介绍 1、熟悉ADC按键扫描方法 2、了解使用74HC595控制LED数码管 3、软件模拟RTC,实现RTC的时、分、秒控制和设置 4、熟悉Ai8051U实验箱原理图与AIapp-ISP系统软件的应用 5、本项目主要熟悉如何管理多文件项目
2.22.1.1. 按键扫描说明 如按键要判断为正常按下,而不是抖动,需要该按键保持按下持续时间是20ms ~ 50ms; 主循环中有个10ms的时间基准,将按键扫描程序作为10ms事件,按键的值检测3次都在有效范围内,即30ms去抖动处理,得到稳定的键码。
2.22.1.2. ADC按键实验现象和操作说明 将本项目的HEX文件下载到Ai8051U的实验箱后: 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、矩阵按键中的按键D和E分别是上调键和下调键 Ø 只有在RTC的时/分/秒设置模式时,上调键和下调键才有效
5、时钟设置模式时,长按按键D或E,可实现快速设置功能
2.22.1.3. Keil环境下多文件项目管理说明 当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。 Ø 比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。 Ø 一般建议是一个模块对应一个.c程序文件和一个.h头文件 Ø 模块的初始化函数以及相关的数据处理函数都在.c文件中实现 Ø 与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量 Ø 如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。 Ø 特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误 Ø 为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含: #ifndef XXXX #define XXXX ... #endif
kaily
发表于 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采集分压电压值,再根据热敏电阻的温度与阻值变化特性关系就能计算出温度值。
本实验程序通过查表法计算温度值,使用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.23.1.2、 操作说明和实验现象 将本项目的HEX文件下载到Ai8051U的实验箱后 1、测量NTC温度,需要短接试验箱JUP2右侧两个跳线,才能连接NTC到芯片ADC脚:
2、在LED数码管上面低4位会动态显示当前的NTC测量的温度,高4位显示NTC的ADC值补码:
3、NTC热敏电阻在实验箱背面,用手指触摸,或者向其吹气,可改变测量的温度值:
2.23.1.3、 Keil环境下多文件项目管理说明 当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。 Ø 比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。 Ø 一般建议是一个模块对应一个.c程序文件和一个.h头文件 Ø 模块的初始化函数以及相关的数据处理函数都在.c文件中实现 Ø 与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量 Ø 如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。 Ø 特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误 Ø 为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含: #ifndef XXXX #define XXXX ... #endif
kaily
发表于 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. 原理图
2.24.1.2. Keil环境下多文件项目管理说明 当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。 Ø 比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。 Ø 一般建议是一个模块对应一个.c程序文件和一个.h头文件 Ø 模块的初始化函数以及相关的数据处理函数都在.c文件中实现 Ø 与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量 Ø 如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。 Ø 特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误 Ø 为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含: #ifndef XXXX #define XXXX ... #endif