Skip to content

工程创建

作者:姜蘅洋

这里以LED灯摆动显示作为工程创建的样例

1.安装Keil μvision5:

  • 无论是51单片机开发还是STM32单片机开发,我们都使用Keil这款集成开发软件:
    • image-20230606224019892
  • 在Keil μvision5中,我们需要安装两个开发环境:
    • 51单片机开发环境
    • STM32单片机开发环境
    • 两个环境的安装包在实验室的学长学姐处获取。
  • 具体的安装过程待补充......

2.51工程创建:

  • image-20230606224550742
  • 点击New μVision Project,之后在你的D盘(只要不是C盘就行)创建一个名为**"破防板"**的文件夹:
    • image-20230606224820705
  • 接着在这里创建工程目录
    • 由于这里以LED灯摆动显示为例,因此工程目录叫做物联网协会LED摆动显示工程
      • image-20230606225031827
  • 接下来,在这个工程目录下面创建**.uvproj**类型的文件(也就是Keil能够识别的工程文件):
    • 文件名选择英文,并且通过文件名我们能够了解工程的大体功能:
      • 这里的工程名叫做:LED_SwingDisplay
    • image-20230606225418469
  • 接下来选择对应的芯片型号:
    • STC89C52RC的芯片架构和Atmel的AT89C52的架构相同,并且头文件也兼容适用,因此芯片型号选择AT89C52:
      • 大家可能找不到Atmel公司,因为Atmel公司在2016年被Microchip公司收购,因此在Microchip目录下寻找AT89C52。
      • image-20230606225733965
    • 拷贝51单片机的启动文件:
      • image-20230606225826256
      • 选择"是"。
  • 接下来对工程目录进行配置:
    • 进入工程目录:
      • image-20230607082626539
    • 创建三个文件夹:
      • User用来存放main.c等自己编写的源文件和头文件;
      • Lib用来存放开发板自带的库文件;
      • Start用来存放单片机的启动文件,也就是上图中的STARTUP.A51
      • image-20230607083024721
    • 接下来我们进入User目录中创建必要的源文件和头文件:
      • image-20230607083144750
      • 由于该工程是LED灯摆动显示,因此我们需要创建有关LED灯延时的源文件和头文件。
      • 对于本次培训用到的工程,我们规定必须要创建一个叫做overwhelm.h的头文件,也就是破防板专用头文件,我们在这个头文件中设置了条件编译
        • 实验室会提供该头文件,直接导入到项目中即可。
        • 头文件具体结构:
          • 数据类型的声明;
          • 自定义头文件的声明;
          • 相应芯片的头文件声明:#include <REGX52.H>
        • image-20230607084129964
  • 在Keil中对工程文件进行配置:
    • image-20230607084408178
    • 点击Manage Project Items选项:
      • 配置成如下所示:
        • image-20230607084507265
        • image-20230607084543734
        • image-20230607084603473
    • 点击Option for target选项:
      • image-20230607084821103
      • 把开发板频率改为11.0592MHz,如下图所示:
        • image-20230607084934743
      • 勾选生成Hex文件:
        • image-20230607085031796
      • 设置条件编译宏并添加头文件路径:
        • 由于我们所定义的头文件都在User这个文件中,因此把这个文件添加到项目的头文件路径中。
        • image-20230607085203605
  • 工程配置完毕。

3.LED灯摆动显示讲解:

  • 查看开发板原理图,寻找LED灯的电路:

    • image-20230607085509787
      • 上图是8位发光二极管的原理图,我们要控制DB1 ~ DB8这8个输入端的电平来开关发光二极管。
    • image-20230607085751209
      • 上图是单片机的原理图,P10 ~ P17这8个引脚对应DB1 ~ DB8。
      • 根据原理图分析,当P10 ~ P17这8个引脚输出低电平的时候点亮发光二极管,输出高电平的时候关闭发光二极管。
  • 编写bsp_led.cbsp_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
    • 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;
      }
  • 编写bsp_delay.cbsp_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
    • 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);
      }
    • 如何创建延时函数,我们打开STC-ISP这个软件:

      • 在软件延时计算界面选择STC-Y1这个指令集,系统频率选择11.0592MHz,然后选择延时时间:
      • image-20230607092102476
  • 编写main.c

    • c
      #include "overwhelm.h"//注意包含这个头文件。
      void main(void)
      {
      	Init_LED();//初始化LED灯。
      	
      	while (1)//单片机开始轮询。
      	{
      		Open_evenLED();
      		Delay1000ms();
      		Open_oddLED();
      		Delay1000ms();
      	}
      }

4.编译和下载:

  • 在Keil中点击Build按钮:
    • image-20230607092412809
    • 此时生成了Hex文件。
  • 我们打开STC-ISP软件进行Hex文件的下载:
    • image-20230607092543985
    • 注意,最低波特率和最高波特率设置为1200。
    • 下载的时候需要冷启动开发板
      • 关闭开发板电源之后点击下载按钮,之后开启开发板电源进行下载。
  • 下载成功的提示:
    • image-20230607092832171
    • 由于开发板较古老,因此可能会出现下载失败的情况,下载失败请多次下载,祝你好运!
    • 一定要安装CH340驱动哦~

Released under the MIT License.