我们编写的C代码是怎样跑起来的?

C语言文章更新目录

C/C++学习资源(百度云盘链接)
计算机二级资料(过级专用)
C语言学习路线(从入门到实战)
编写C语言程序的7个步骤和编程机制
C语言基础-第一个C程序
C语言基础-简单程序分析
VS2019编写简单的C程序示例
简单示例,VS2019调试C语言程序
C语言基础-基本算法
C语言基础-数据类型
C语言中的输入输出函数
C语言流程控制语句
C语言数组——一维数组
C语言数组——二维数组
C语言数组——字符数组
C语言中常用的6个字符串处理函数
精心收集了60个C语言项目源码,分享给大家
C语言核心技术——函数

要想弄明白这个问题,首先我们得了解下C语言的编程机制,关于编程机制我在前面的文章中提到过,但没有过多的描述,今天我们就一起来看看这个问题。

我们先写一个hello.c文件

#include<stdio.h>

int main() {
	printf("hello world!");
	return 0;
}

这个文件其实是一个特殊的文本文件,就存在我们的磁盘上,被称为源代码文件
在这里插入图片描述

源代码文件是不能直接运行的,而我们平时运行的文件是可执行文件。

那么,源代码文件经过怎样的变化才能变为可执行文件呢?先思考一分钟。。。

C语言是通过编译和链接两个步骤完成这一过程。编译器把源代码转换成中间代码hello.obj,链接器把中间代码和其它代码合并,生成可执行文件。这里所说的中间代码就是目标文件,它里面存放的是机器语言代码。
在这里插入图片描述

说到这里,有人就会问目标文件里存放的是机器语言代码,为什么不能直接运行目标文件呢?

其实目标文件里存放的只是编译器翻译的源代码,还不是一个完整的程序。

目标文件缺少启动代码和库代码,启动代码因系统不同会有所差异。几乎所有的C程序都要C标准库中的函数,例如hello.c中的printf()函数,这个函数真正的代码存储在一个被称为库的文件中。

链接器的作用就是将目标文件、启动代码和库代码合并成一个可执行文件hello.exe

运行可执行文件,我们会看到下面的结果。
在这里插入图片描述

为了更好的理解,这里画了一个流程图供大家参考。
在这里插入图片描述

好了,今天就介绍到这,后面继续更新

### 回答1: 以下是一个简单的51单片机小车代码,让小车可以前进、后退、左转、右转、停止等基本操作: ``` #include<reg51.h> // 包含51单片机头文件 sbit ENA = P1^0; // 驱动电机A使能引脚 sbit ENB = P1^1; // 驱动电机B使能引脚 sbit IN1 = P1^2; // 驱动电机A控制引脚1 sbit IN2 = P1^3; // 驱动电机A控制引脚2 sbit IN3 = P1^4; // 驱动电机B控制引脚1 sbit IN4 = P1^5; // 驱动电机B控制引脚2 void delay(unsigned int n) // 延时函数 { unsigned int i,j; for(i=0;i<n;i++) for(j=0;j<125;j++); } void forward() // 前进函数 { IN1 = 1; IN2 = 0; IN3 = 1; IN4 = 0; } void backward() // 后退函数 { IN1 = 0; IN2 = 1; IN3 = 0; IN4 = 1; } void turn_left() // 左转函数 { IN1 = 0; IN2 = 1; IN3 = 1; IN4 = 0; } void turn_right() // 右转函数 { IN1 = 1; IN2 = 0; IN3 = 0; IN4 = 1; } void stop() // 停止函数 { IN1 = 0; IN2 = 0; IN3 = 0; IN4 = 0; } void main() // 主函数 { ENA = 1; ENB = 1; while(1) { forward(); // 前进 delay(500); // 延时500毫秒 stop(); // 停止 delay(100); // 延时100毫秒 backward(); // 后退 delay(500); // 延时500毫秒 stop(); // 停止 delay(100); // 延时100毫秒 turn_left(); // 左转 delay(500); // 延时500毫秒 stop(); // 停止 delay(100); // 延时100毫秒 turn_right(); // 右转 delay(500); // 延时500毫秒 stop(); // 停止 delay(100); // 延时100毫秒 } } ``` 这段代码中,我们使用了P1口的若干引脚来控制驱动电机A和B的运动,通过控制IN1~IN4引脚的高低电平来实现小车的前进、后退、左转、右转和停止等基本操作。为了让小车可以连续执行这些操作,我们在主函数中使用了一个无限循环来不断执行这些操作。同时,我们还使用了一个延时函数来控制每个操作的持续时间。 ### 回答2: 让51单片机小车起来代码可以分为两个部分:电机控制部分和遥控信号接收部分。 电机控制部分的代码如下: ```C #include <reg52.h> sbit IN1 = P2^0; //电机IN1引脚连接到P2.0口 sbit IN2 = P2^1; //电机IN2引脚连接到P2.1口 sbit IN3 = P2^2; //电机IN3引脚连接到P2.2口 sbit IN4 = P2^3; //电机IN4引脚连接到P2.3口 void delay(unsigned int t) //延时函数 { unsigned int i, j; for(i = t; i > 0; i--) for(j = 110; j > 0; j--); } void main() { while(1) { //小车向前行驶 IN1 = 1; IN2 = 0; IN3 = 1; IN4 = 0; delay(500); //延时500ms //小车停止 IN1 = 0; IN2 = 0; IN3 = 0; IN4 = 0; delay(500); //延时500ms //小车向后行驶 IN1 = 0; IN2 = 1; IN3 = 0; IN4 = 1; delay(500); //延时500ms //小车停止 IN1 = 0; IN2 = 0; IN3 = 0; IN4 = 0; delay(500); //延时500ms } } ``` 遥控信号接收部分的代码可以根据实际情况选择不同的方式进行编写,例如通过红外遥控接收模块、蓝牙模块或者无线遥控模块来接收控制信号。具体的代码实现会根据所选用的遥控模块不同而有所差异。一般来说,遥控信号接收部分会读取遥控器发送的信号并将其转化为对应的电机控制信号,以实现小车的前进、后退、转向等动作。 以上代码仅为简单示例,实际应用中可能需要对电机控制部分进行更详细的设置和调整。此外,代码中的延时函数可以根据实际情况进行调整,以达到预期的效果。 ### 回答3: 51单片机小车起来代码可以分为两部分,一部分是控制电机转动的代码,另一部分是控制小车运动的代码。 首先,我们需要配置51单片机相关的GPIO引脚的工作模式,将其设置为输出模式。然后,我们可以定义一些函数,例如forward()表示小车向前运动,backward()表示小车向后运动,left()表示小车向左转,right()表示小车向右转等。 接下来,编写控制电机转动的代码。对于双路电机驱动,一般使用L293D芯片或者直流电机驱动模块。我们可以使用PWM(脉冲宽度调制)技术来控制电机的速度,通过调整PWM的占空比来实现电机转速的控制。 在代码中,我们可以使用定时器来生成PWM信号,将其连接到电机驱动器上的控制端口。 最后,编写控制小车运动的代码。根据需要,我们可以将小车的运动控制代码编写成相应的函数,例如调用forward()函数使小车向前运动一段时间,然后调用left()函数使小车向左转等。在实际应用中,可以通过按键、遥控器等方式来触发相应的函数,实现对小车运动的控制。 以上是一个简单的描述,具体的代码实现需要根据具体的电路和功能需求进行设计。同时,还需要注意安全性,例如在操作电机时,需要考虑到电流、电压等参数的限制,以避免出现损坏或不安全的情况。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C语言中文社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值