工程创建
作者:姜蘅洋
这里以LED灯摆动显示作为工程创建的样例
1.安装Keil μvision5:
- 无论是51单片机开发还是STM32单片机开发,我们都使用Keil这款集成开发软件:
- 在Keil μvision5中,我们需要安装两个开发环境:
- 51单片机开发环境
- STM32单片机开发环境
- 两个环境的安装包在实验室的学长学姐处获取。
- 具体的安装过程待补充......
2.51工程创建:
- 点击New μVision Project,之后在你的D盘(只要不是C盘就行)创建一个名为**"破防板"**的文件夹:
- 接着在这里创建工程目录:
- 由于这里以LED灯摆动显示为例,因此工程目录叫做物联网协会LED摆动显示工程:
- 由于这里以LED灯摆动显示为例,因此工程目录叫做物联网协会LED摆动显示工程:
- 接下来,在这个工程目录下面创建**.uvproj**类型的文件(也就是Keil能够识别的工程文件):
- 文件名选择英文,并且通过文件名我们能够了解工程的大体功能:
- 这里的工程名叫做:LED_SwingDisplay
- 文件名选择英文,并且通过文件名我们能够了解工程的大体功能:
- 接下来选择对应的芯片型号:
- STC89C52RC的芯片架构和Atmel的AT89C52的架构相同,并且头文件也兼容适用,因此芯片型号选择AT89C52:
- 大家可能找不到Atmel公司,因为Atmel公司在2016年被Microchip公司收购,因此在Microchip目录下寻找AT89C52。
- 拷贝51单片机的启动文件:
- 选择"是"。
- STC89C52RC的芯片架构和Atmel的AT89C52的架构相同,并且头文件也兼容适用,因此芯片型号选择AT89C52:
- 接下来对工程目录进行配置:
- 进入工程目录:
- 创建三个文件夹:
- User用来存放main.c等自己编写的源文件和头文件;
- Lib用来存放开发板自带的库文件;
- Start用来存放单片机的启动文件,也就是上图中的STARTUP.A51;
- 接下来我们进入User目录中创建必要的源文件和头文件:
- 由于该工程是LED灯摆动显示,因此我们需要创建有关LED灯和延时的源文件和头文件。
- 对于本次培训用到的工程,我们规定必须要创建一个叫做overwhelm.h的头文件,也就是破防板专用头文件,我们在这个头文件中设置了条件编译。
- 实验室会提供该头文件,直接导入到项目中即可。
- 头文件具体结构:
- 数据类型的声明;
- 自定义头文件的声明;
- 相应芯片的头文件声明:
#include <REGX52.H>
;
- 进入工程目录:
- 在Keil中对工程文件进行配置:
- 点击Manage Project Items选项:
- 配置成如下所示:
- 配置成如下所示:
- 点击Option for target选项:
- 把开发板频率改为11.0592MHz,如下图所示:
- 勾选生成Hex文件:
- 设置条件编译宏并添加头文件路径:
- 由于我们所定义的头文件都在User这个文件中,因此把这个文件添加到项目的头文件路径中。
- 把开发板频率改为11.0592MHz,如下图所示:
- 点击Manage Project Items选项:
- 工程配置完毕。
3.LED灯摆动显示讲解:
查看开发板原理图,寻找LED灯的电路:
- 上图是8位发光二极管的原理图,我们要控制DB1 ~ DB8这8个输入端的电平来开关发光二极管。
- 上图是单片机的原理图,P10 ~ P17这8个引脚对应DB1 ~ DB8。
- 根据原理图分析,当P10 ~ P17这8个引脚输出低电平的时候点亮发光二极管,输出高电平的时候关闭发光二极管。
编写
bsp_led.c
和bsp_led.h
这两个文件:- c
//bsp_led.h #ifndef __BSP_LED_H__ #define __BSP_LED_H__ #include "overwhelm.h" #define Reg_LED P1 //P1对应的是8bit的寄存器地址的解引用,P10 ~ P17分别是该寄存器的bit位,为了便于编写代码,我们给P1换个名字。 #define LED_Control P2_5//P2_5对应的是P2寄存器中bit5所对应的地址的解引用,这一位控制8位发光二极管所对应的74HC573的Latch Enable端。 //P1和P2_5的定义均在头文件<REGX_52.H>中。 void Open_evenLED(void); void Open_oddLED(void); void Init_LED(void); //上述是三个函数的声明。 #endif
1
2
3
4
5
6
7
8
9
10
11
12 - c
//bsp_led.c #include "bsp_led.h" void Init_LED(void) { LED_Control = 1;//使能Latch Enable,此时锁存器的Q端和D端连通。 Reg_LED = 0xff; LED_Control = 0;//失能Latch Enable,此时锁存器的Q端和D端阻断。 }//操作任何外设之前,一个好的习惯是使用该外设的初始化函数,我们这里定义初始时LED灯全部关闭。 void Open_evenLED(void) { LED_Control = 1; Reg_LED = 0x55;//点亮2/4/6/8号LED灯。 LED_Control = 0; } void Open_oddLED(void) { LED_Control = 1; Reg_LED = 0xaa;//点亮1/3/5/7号LED灯。 LED_Control = 0; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
编写
bsp_delay.c
和bsp_delay.h
:- c
#ifndef __BSP_DELAY_H__ #define __BSP_DELAY_H__ #include "overwhelm.h" #include <intrins.h>//在bsp_delay.h,要声明该头文件,我们要用到其中的__nop_()函数。 void Delay1000ms(void); #endif
1
2
3
4
5
6 - c
#include "bsp_delay.h" void Delay1000ms() //@11.0592MHz { unsigned char data i, j, k; _nop_(); i = 8; j = 1; k = 243; do { do { while (--k); } while (--j); } while (--i); }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 如何创建延时函数,我们打开STC-ISP这个软件:
- 在软件延时计算界面选择STC-Y1这个指令集,系统频率选择11.0592MHz,然后选择延时时间:
编写
main.c
:- c
#include "overwhelm.h"//注意包含这个头文件。 void main(void) { Init_LED();//初始化LED灯。 while (1)//单片机开始轮询。 { Open_evenLED(); Delay1000ms(); Open_oddLED(); Delay1000ms(); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
4.编译和下载:
- 在Keil中点击Build按钮:
- 此时生成了Hex文件。
- 我们打开STC-ISP软件进行Hex文件的下载:
- 注意,最低波特率和最高波特率设置为1200。
- 下载的时候需要冷启动开发板:
- 关闭开发板电源之后点击下载按钮,之后开启开发板电源进行下载。
- 下载成功的提示:
- 由于开发板较古老,因此可能会出现下载失败的情况,下载失败请多次下载,祝你好运!
- 一定要安装CH340驱动哦~