这篇文章将会教你如何创建一个拥有个人风格的Keil5工程模板,同时也介绍一些Keil5的基本设置
第一步 当然是创建一个工程文件夹啦~

新建完文件夹后,命名一下即可。
第二步 细分编译器模式(可以略过)
对于AI8051U来说,可以支持8位模式(C51)和32位模式(C251),既然是为了创建基础工程模板,我们可以再创建一个细分文件夹,如下可以区分不同的模式:

第三步 工程文件分类
想要获得一个简洁、规整的工程目录,这一步十分重要!!!
我个人习惯创建"Drivers"(驱动)、"Output"(输出)、"Project"(工程)、"User"(用户)这4类目,当然还会包含一个"keilclean.bat"和"readme.txt"文件。
- Drivers:用于存放各种驱动文件,如iic.c、spi.c、i8080.c
- Output:用于存放keil5编译时的链接文件和输出文件
- Project:用于区分和存放各种编译器的工程文件
- User:用于存放用户层的文件
- keilclean.bat:清除keil5的链接文件
- readme.txt:工程说明文件

第四步 进一步细分文件类目
在第三步进行了一级目录的细分,为了进一步划分文件的用图和类别,再进行二级细分。
1、Drivers
该文件夹主要是用于存放各种驱动文件的,我对各种驱动文件再次做了划分:"BSP"(基础驱动)、"COMM"(官方提供的一些支持文件)、"Hardware"(外设驱动)、"Library"(官方提供的库函数)、"Middlewares"(中间层驱动文件)、"SYS"(系统级底层文件)。

- BSP:存放芯片所支持的各种外设驱动文件,如iic、spi、i8080、pwm、uart等等


- COMM:存放官方提供一些驱动支持包,如usb.h、usb_cdc_32.lib



- Library:存放库函数支持包
- Middlewares:存放各种中间层驱动文件,如RTOS、Modbus等等
- SYS:存放系统级调用文件,如config、delay等等

2、Output
该文件夹主要用于存放编译时的输出文件和链接文件,暂时只接触了Keil5,暂不做细分了
3、Projects
该文件夹主要用于区别各种不同的编译器,如Keil5、SDCC、IAR等等,这里创建了一个"Keil5_C251"的文件夹,代表使用的是Keil5编译器。

4、User
主要用于存放用户层的文件,如主函数、屏幕界面等等
第五步 新建Keil5工程
1、打开Keil5,可以看见是一个空白的界面(也可能是你上一次打开的工程,这个不用在意)
2、选择Project(工程)目录
3、新建一个工程

4、找到刚刚创建的工程文件夹,创建一个工程名,保存即可

5、更换芯片支持包为STC MCU,找到对应的芯片型号,这里是AI8051U-32bit


6、成功创建工程

注:其中工程名称是不能修改的了。
目标名称文件夹名称可以修改,也可以创建多个
自定义文件夹名称可以修改,也可以创建多个
第六步 优化细分工程内文件目录
可以参考第三步、第四步进行分类。这里点开一个类似箱子堆的图标。

1、刚打开是这样的,什么都没有,双击名称可以修改名称。


注:第一个类目,貌似可以在同一个工程内,创建多个项目,通过点击"Set as Current Target"进行切换。
2、第一个类目可以命名成一个项目名称,主要在第二类目中进行分类,最后点击OK即可,大概如下:

3、导入文件(创建文件在后面)
此时文件夹创建完成了,但是没有任何C文件和H文件

可以双击对应类目的文件夹进行导入文件

选择当前工程文件夹下,对应类目的文件夹,一定要确定是当前工程文件路径。(以后复制工程模板时,有可能是在模板工程路径下,然后就会发现莫名其妙的少了一些文件)

选择对应的文件,双击导入即可。

此时就可以看见目录中出现了main.c这个文件

4、创建文件
如果没有可以导入的文件怎么办?想创建一个文件重新写
右键一个文件夹,选择"Add New...."

选择需要创建的文件类型,命名后"Add"即可

可以看见出现我们刚刚创建的文件了,接下来就可以愉快的编程啦

###这里我直接导入已经写好的代码文件,最终效果如下:

第七步 工程设置(可参考AI8051U手册第6章)
这一步打开"魔术棒",对工程进行一些设置

1、Target
根据手册推荐,可以设置成这样

注:80251的指令模式有“Binary”和“Source”两种模式,Ai8051U系列目前只支持“Source”模式由于Ai8051U系列单片机在中断中的压栈和出栈都是4字节模式,建议“4Byte InterruptFrame Size”选项也打上钩
注:Memory Model是指存储器模式,80251有5种模式:

注:Code Rom Size是指代码大小模式,80251有5种模式:

2、Output
设置如下:

修改输出文件的默认位置

选择一开始创建的"Output"文件夹,确认即可

3、Listing
这里只需要同上修改输出路径即可,其他选项保持默认。

完成此步后,可以删除"xxx\Projects\Keil5_C251"路径下的"Listings"和"Objects"文件夹。

4、User
无需修改
5、C251(优化等级、警告等级、绝对路径)
这一步十分重要!!

代码优化等级,单片机内存足够时,选择等级0,即不优化,可以保证代码完整性,少出问题;如果代码确实写的很多很大,可以选择高等级,让编译器自动优化代码。
警告等级,默认选择等级2。选择等级0,将不会报警告,不建议。一般情况下,还是需要看警告进行代码优化的。
头文件路径,这个十分重要,作用是告诉编译器头文件在哪里,


依次添加第三步、第四步创建的驱动文件夹路径,这里的路径对编译器来说,都是绝对路径。

注:绝对路径是 【目标文件所在位置】 相对 【工程文件所在位置】的路径,在绝对路径下的文件(如头文件),可以直接用
#include "xxx.h"
例如,"config.h" 文件在SYS文件夹下,而且绝对路径中包含了SYS文件夹的路径,就可以直接引用
#include "config.h"
但是,在Hardware文件夹下,有一个名为LED的文件夹,内有一个led.h文件

此时,由于没有包含LED这个文件夹的绝对路径,如果直接引用"led.h"文件,将会报错,提示无法打开"led.h",此时只能重新打开魔术棒->C251->添加路径,那如果每写一个新的驱动文件,都要这样添加,会不会太麻烦了,全部放在同一个文件夹下,又太凌乱了,那怎么办呢?
相对路径:
我们知道"led.h"这个文件的路径在LED文件夹里,而LED文件夹又在Hardware文件夹里,既然编译器知道Hardware在哪里,那引用的时候告诉编译器就好了,那么就可以这样:
#include "./Hardware/LED/led.h"
// 或者
#include "./LED/led.h"
其中"./"(或".
\")表示当前路径,而"../"(或"..\")表示上一级路径,那么
// 工程文件的路径是 C251_32bit\Projects\Keil5_C251
// led.h文件的路径是 C251_32bit\Drivers\Hardware\LED
#include "./LED/led.h" // 对应工程文件文件,展开后即如下
// #include "../(上一级路径:Projects)../(上一级路径:C251_32bit)/Drivers/Hardware/LED/led.h"

了解完之后,相对于本次添加的绝对路径,今后创建新的文件夹/文件,即可使用这种方式进行引用:
#include "./XXX/xxx.h"
// 例如,要引用如下iic.h文件
// 由于已经添加过BSP文件夹的绝对路径了,因此这样引用
#include "./IIC/iic.h"

6、A251、L251 Locate
这里保持默认,无需修改。
7、L251 Miso(忽略某项警告)
这里设置忽略57号警告,
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
这个警告是提示你,工程内有哪些函数从未被使用过
(告诉你哪些函数 占着茅坑不拉屎)

8、Debug(需要仿真时才设置)
使用仿真时,将会占用P30、P31口,这两个引脚的功能(一般是串口1)不能使用,否则仿真调试时会报错,如果需要使用串口1,可以将功能复用到其他引脚上。


9、Utilities(需要仿真时才设置)


至此,一个工程模板就创建好啦。
##番外 Keil5的一些设置
keil5 的设置在小扳手里面

一、Eidtor (编辑器)

我的个人设置是这样的。
其中比较有用的是:
1、Encoding(编码格式):一般是GB2312或者UTF-8
2、显示空白符(空格是点,缩进符是箭头)

3、Tab缩进设置(ASM是汇编文件,Other是其他文件)

二、Colors & Fonts(颜色和字体)
这里可以设置背景颜色,字体颜色,字体大小等等

一般就是设置C/C++编辑器文件就好了,可以把 Number 设置为红色(默认绿色)

把字符串设置成其他颜色,我设置的是紫色(默认黑色)

注:也推荐使用UTF-8的编码格式+Consolas字体

这种字体可以一眼分辨数字0 和 字母O

由于我已经用GB2312编码格式写好了,基础文件,现在切换中文注释会乱码,大家可以根据自身情况选择。
三、User Keywords(用户关键词)
这里可以新建一些 关键词

当输入关键词时,会高亮显示,类似这样:

四、Text Completion
这个我称之为"一键输入"或"常用语",在这里新建一个"常用语"名称,写入内容


效果如下:

双击一下,就可以直接写入内容,常见的用法是创建一个函数注释头的"常用语"

##代码介绍
1、config
config.h 文件内可以进行一些常用配置的切换
提供了一个float与u8类型相互转换的函数,支持大小端模式选择(相当于密码)
实用案例:NRF24L01无线通讯时,float数据打包发送,接收端拆包显示
一个swap函数,用于交换两个变量的数值

2、Type_def
该文件提供了一下常用的宏定义,以及一些实用的宏函数(个人提供的比较有限,十分欢迎各位坛友分享扩列)

3、delay
包含一个毫秒级延迟函数和一个微秒级延时函数,以及一些由ISP生成的微秒级延迟函数。

附件:创建一个个人风格的Keil5工程 - 副本.md
附件:AI8051U.zip