汽车网站建设规划书,黑龙江省住房与城乡建设厅网站,合肥寒假兼职工网站建设,图片在线制作二维码生成器一、在工程文件夹下创建一个新的文件夹#xff0c;命名为“ModulesCodesFiles”#xff0c;译为“模块化代码文件”#xff0c;用于存放所有模块化代码文件。
二、在“ModulesCodesFiles”文件夹下为每个模块创建一个新的文件夹#xff0c;命名为模块的名称#xff0c;例…一、在工程文件夹下创建一个新的文件夹命名为“ModulesCodesFiles”译为“模块化代码文件”用于存放所有模块化代码文件。
二、在“ModulesCodesFiles”文件夹下为每个模块创建一个新的文件夹命名为模块的名称例如“Main”、“KEY”或“LED”。
1、在每个模块的文件夹下创建两个文件主函数的模块除外KEY模块可创建一个.c源文件例如KEY.c和一个.h头文件例如KEY.h,LED模块可创建一个.c 源文件例如LED.c和一个.h头文件例如LED.h。
1、.c文件实现函数功能、定义变量 (允许赋初值)、定义I/0口、定义宏等
2、.h文件声明函数、声明变量 (不允许赋初值)、声明常量、声明I/0口、声明宏等。
2、例如在Main模块的Main.c文件中可以编写以下代码
#include reg52.h //51单片机头文件
#include LED.h //包含LED模块的头文件
#include KEY.h //包含KEY模块的头文件 void main(void)
{ LED_Init(); //初始化LED模块和LED控制引脚P2.0为输出模式初始为关闭状态低电平,LED状态变量默认为LED_OFF0状态。 KEY_Init(); //初始化KEY输入引脚为输入模式初始为释放状态高电平,KEY状态变量默认为KEY_RELEASED0状态。 while(1) { //循环检测按键状态 if (KEY_Scan() KEY_PRESSED) { //按键被按下 LED_Control(LED_ON); //打开LED } else { //按键未按下 LED_Control(LED_OFF); //关闭LED } } }3、不用在Main模块创建Main.h文件直接在Main模块的Main.c文件完成。
4、例如在KEY模块的KEY.c文件中可以编写以下代码
#include KEY.h void KEY_Init(void)
{ //初始化KEY输入引脚为输入模式默认为高电平 KEY_PIN KEY_RELEASED; //将KEY输入引脚初始化为释放状态高电平,KEY状态变量默认为KEY_RELEASED0状态。 } void KEY_Scan(void)
{ //扫描按键状态 if (KEY_PIN KEY_RELEASED) { //按键未按下 key_state KEY_RELEASED; //保持当前按键状态为释放状态 } else { //按键被按下 key_state KEY_PRESSED; //反转按键状态为按下状态 } } 5、例如在KEY模块的KEY.h文件中可以编写以下代码
#ifndef KEY_H
#define KEY_H
//IO口定义
#define KEY_PIN P3_0 //按键输入引脚
//变量定义
unsigned char key_state KEY_RELEASED; //按键状态变量默认为释放状态
//常量定义
#define KEY_PRESSED 1 //按键按下状态常量1表示按下
#define KEY_RELEASED 0 //按键释放状态常量0表示释放
//宏定义
#define Detection_Button() do { if (KEY_PIN KEY_PRESSED) {Reverse_Key_Status();} } while(0)
#define Reverse_Key_Status() do { key_state 1 - key_state; } while(0)
//KEY初始化函数
void KEY_Init(void);
//KEY扫描函数返回按键状态按下为1释放为0。
int KEY_Scan(void);
#endif 6、例如在LED模块的LED.c文件中可以编写以下代码
#include LED.h void LED_Init(void)
{ //初始化LED控制引脚为输出模式 LED_PIN LED_OFF; //将LED控制引脚初始化为关闭LED状态低电平LED状态变量默认为LED_OFF0状态。} void LED_Control(unsigned char state)
{ if (state LED_ON) { OPEN_LED(); //打开LED } else { CLOSE_LED(); //关闭LED }
}7、例如在LED模块的LED.h文件中可以编写以下代码
#ifndef LED_H
#define LED_H
//IO口定义
#define LED_PIN P2_0 //LED控制引脚
//变量定义
unsigned char led_state 0; //LED状态变量
//常量定义
#define LED_ON 1 //LED打开状态常量
#define LED_OFF 0 //LED关闭状态常量
//宏定义
#define OPEN_LED() do { LED_PIN LED_ON; } while(0)
#define CLOSE_LED() do { LED_PIN LED_OFF; } while(0)
//LED初始化函数
void LED_Init(void);
//LED控制函数
void LED_Control(unsigned char state);
#endif 三、如何编写构建脚本例如MakeFile来指定编译和链接的规则
1、在工程文件夹下创建一个名为“MakeFile”的文件该文件是构建脚本的入口。
2、在MakeFile文件中定义需要编译的源文件和目标文件以及编译规则和选项。
1 # MakeFile
2 # 定义目标文件名
3 TARGET Name_Program
4 # 定义需要编译的源文件和头文件
5 SRC Main.c ModulesCodesFiles/KEY/KEY.c ModulesCodesFiles/LED/LED.c
6 INC ModulesCodesFiles/KEY/KEY.h ModulesCodesFiles/LED/LED.h
7 # 定义编译规则和选项
8 CC gcc
9 CFLAGS -Wall -I.
10 # 定义目标文件的编译规则
11 $(TARGET): $(SRC) $(INC)
12 $(CC) $(CFLAGS) $(SRC) -o $(TARGET)
13 # 定义清理规则用于删除生成的目标文件和其他临时文件
14 clean:rm -f $(TARGET)3、在MakeFile文件中使用规则来指定如何编译源文件和链接目标文件。例如在MakeFile文件中可以使用以下规则来指定如何编译源文件。
1 $(TARGET): $(SRC) $(INC)
2 $(CC) $(CFLAGS) $(SRC) -o $(TARGET)解释以上这个规则表示将所有的源文件包括Main.c、ModulesCodesFiles/KEY/KEY.c和ModulesCodesFiles/LED/LED.c编译并链接成一个名为“Name_Program”的可执行文件。 4、在Makefile文件中可以使用其他规则来定义其他构建任务例如“clean”任务用于删除生成的目标文件和其他临时文件。
5、最后在命令行中运行“make”命令来执行MakeFile文件中的构建任务。例如在命令行中输入以下命令来执行构建任务。
make