单片机C语言:基本语法,你会吗?
在单片机开发中最常使用的就是C语言了,C语言主要由关键字、标识符、常量、字符串以及符号等令牌组成。
首先看一个程序,通过程序学习C语言的基本语法:
#include \”stdio.h\”
Int main()
{
int a;//a表示年龄
a=25;
Printf(\”需要输出的年龄为:%d\\n\”,a);
}
标识符:用一个符号表示函数,变量,常量或者其他名称,标识符第一个符号必须是a—-或者A—Z或_,不可以是数字,除了第一个符号其他的是可以使用数字的例如:A1,a2,都是对的,1a,1A都是错误的,标识符不可以使用标点符号,不可以和C关键字相同。在上面程序中,a就是一个标识符。
分号:在C语言中\”;\”是用来表示程序语句的结束。
关键字:C标准中有32个关键字,在单片机开发中常用,int,char,long,break,const,while等关键字,在上面的程序中用到了int关键字,下面我将32个关键字列出并说明。
auto :声明自动变量
break:跳出当前循环
case:开关语句分支
char :声明字符型变量或函数返回值类型
const :声明只读变量
continue:结束当前循环,开始下一轮循环
default:开关语句中的\”默认\”分支
do :循环语句的循环体
double :声明双精度浮点型变量或函数返回值类型
else :条件语句否定分支(与 if 连用)
enum :声明枚举类型
extern:声明变量或函数是在其它文件或本文件的其他位置定义
float:声明浮点型变量或函数返回值类型
for:一种循环语句
goto:无条件跳转语句
if:条件语句
int: 声明整型变量或函数
long :声明长整型变量或函数返回值类型
register:声明寄存器变量
return :子程序返回语句(可以带参数,也可不带参数)
short :声明短整型变量或函数
signed:声明有符号类型变量或函数
sizeof:计算数据类型或变量长度(即所占字节数)
static :声明静态变量
struct:声明结构体类型
switch :用于开关语句
typedef:用以给数据类型取别名
unsigned:声明无符号类型变量或函数
union:声明共用体类型
void :声明函数无返回值或无参数,声明无类型指针
volatile:说明变量在程序执行中可被隐含地改变
while :循环语句的循环条件
注释:在程序设计过程中,注释是避免不了的,合理的注释能方便我们对程序的阅读,上面程序中。\”//\”后面的文字就是注释,我们注释时使用\”//\”双斜杠的目的是告诉编译器这后面的是注释你不用看了。
如何学习单片机?单片机c语言编程入门教程
我当初是自学单片机的,也用同样的方法带出过月入15K以上的徒弟。
我的方法不能说是最好的,但绝对是靠谱的,毕竟都是曾经自己趟过的路。
如果你还在纠结你的学历,纠结英语数学不好能不能学会的问题。
今天我就给你吃的定心丸,别的行业不敢说,单片机:稳!
学历,以及数学英语是决定你的天花板有多高,而不是门槛。
Ok,下面干货开始。
一、如何学习单片机?
看了很多帖子,单片机要学的东西很多,既要懂硬件又要会编程之类的话。
把很多人都吓尿在门外,其实这句话只对了一半。
单片机确实是要懂硬件和编程,但很多人忽略了学习的深度的问题。
我拿当初自学java来举例吧,光是java se就学了我1个多月,学完以后才发现只是入了门,接下来还要学习java ee或者me,还要学数据库等等。
而对于单片机来说,同样是学编程,单片机主要是学C语言,学完以后直接就可以参与项目开发了。
那单片机+C语言只要你的学习路径正确,1个月之内完全可以搞定。
最佳学习路径和入门到高级教程可以参考我下面这篇文章,每个阶段学到什么程度都讲得很清楚
那再来说下硬件,同样也是学习深度的问题,做单片机软件开发其实只要看得懂电路原理就可以了。
工作中一般会有硬件工程师设计好电路,而大多数电路都是模块化的,比如说电源都是芯片方案,电路图原厂都会给你,蓝牙通讯也是模块,直接和串口通讯,语音播放也是模块,直接通过单个IO口来完成指定语音播放。
如果一开始你就去纠结什么放大电路、滤波电路、运算电路,信号转换等等,注定你很难学的会单片机。
因为你学习方向都偏了。
不是说这些不重要,而是看阶段,初学本来就没经验,所以理解起来也难。
当你有足够的经验了,再回过头来学习这些知识,或许就简单多了,理解也更深刻。
单片机「C语言」
以下是个人总结的,如有误请指出。
- 常量和变量的区别在于
前者的数是固定的,后者的数是随机的。
- 形参和实参的区别在于
前者只是规定了参数是什么类型的一个形式的参数 ,后者是一个实际的参数。
- 函数模块化和调用
函数模块化无非就是把实现功能的语句放进C文件,再把定义函数的语句放进件(头文件)然后再在主函数main里面直接调用头文件里定义的语句。
传统方式编程:所有的函数均放在main.c里,若使用的模块比较多,则一个文件内会有很多的代码,不利于代码的组织和管理,而且很影响编程者的思路
模块化编程:把各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数的声明,其它.c文件想使用其中的代码时,只需要#include \”XXX.h\”文件即可。使用模块化编程可极大地提高代码的可阅读性、可维护性、可移植性等
模块化
- 子函数和数组
子函数:将完成某一种功能的程序代码单独抽取出来形成一个模块,在其它函数中可随时调用此模块,以达到代码的复用和优化程序结构的目的
void Function(unsigned char x, y)
{
}
返回值 函数名(形参)
{
函数体
}
数组:把相同类型的一系列数据统一编制到某一个组别中,可以通过数组名+索引号简单快捷的操作大量数据
int x[3]; //定义一组变量(3个)
int x[]={1,2,3}; //定义一组变量并初始化
x[0] //引用数组的第0个变量
x[1] //引用数组的第1个变量
x[2] //引用数组的第2个变量
引用x[3]时,数组越界,读出的数值不确定,应避免这种操作
- C预编译
C语言的预编译以#开头,作用是在真正的编译开始之前,对代码做一些处理(预编译)
- C语言语句
选择结构
就是实现选择功能的。
循环结构
实现循环功能的。
- 函数返回值以及如何接返回值
一个加工厂 给材料返回东西,就叫有参数有返回值。
一个加工厂 不给材料返回东西 ,就叫无参数有返回值。
一个加工厂 给材料不返回东西,就叫有参数无返回值。
一个加工厂 不给材料不返回东西,就叫无参数无返回值。
如何接住返回值呢?
定义一个变量,然后把函数有返回值的函数调用再赋值给变量。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。