RYMCU

NO4.单片机C语言基础-NEBULA-VSCODE

devcui 1 年前
# nebula-vscode

所属作品集

1.进制转换知识

进制实际是一个非常简单易懂的概念,对于初学者来说也很容易上手。我们接触最多的就是十进制了,它的特点为逢十进一,包含 0,1,2,3,4,5,6,7,8,9 共十个元素。在生活中我们用到的基本都是十进制了,所以大家对它已经非常熟悉并能应用自如,但是在计算机(包括单片机)世界里,所有都是以二进制为基础的。二进制的特点为逢二进一,包含 0,1 共两个元素。计算机中的数据都是以二进制存储的,这就是我们所说的 0,1 世界。通常我们讲的 32 位或 64 位操作系统这里的位指的就是二进制位数。因为我们实际多用十进制,那么我们在和计算机系统沟通过程中,十进制与二进制之间的转换就变得很重要了。进制之间的转换如下表所示。

image.png

二进制转换十进制公式如下:

image.png

其中,n 表示二进制的位数。

下面我们举个例子来更加直观的说明这个公式:例如:1101,这是一个 4 位的二进制数,计算如下

image.png

大家可以利用这个公式计算的结果和表 4-1 进行一一对照。

十六进制也是我们常用的进制,它的特点为逢十六进一,包括 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 共十六个元素。实际上十六进制是二进制的一种特殊形式,十六进制的 1 位等价于二进制的 4 位,在 C 语言编程中我们常用十六进制来表示二进制数。在实际应用中我们常常该数字之前加一个前缀来表示他的进制:“0b”表示二进制,“0x”表示十六进制。下面我们举例说明:
0b10010010 = 0x92

上面一个八位的二进制数转换为一个两位的十六进制数。二进制的 前 4 位 等于十六进制的 第 1 位
0b1001 = 0x9

二进制数的后 4 位等于十六进制的第 2 位:
0b0010 = 0x2

在计算机中,我们通常所说的二进制的 1 位也叫 1bit,8 位表示 1 个字节,也叫 1Byte。根据二进制与十六机制的关系,一个 2 位的十六进制数则可表示 1 个字节。在运用的过程中牢记 0~15 的十进制与二进制、十六进制之间的转换关系对于程序的编写有很大的好处。

2.字节表示法

我们通常用下图所示的方式来表示 1 个字节,也就是 1Byte。8 个连续的方框,每一个方框表示 1 位,即 1bit,总共 8bit 组成 1 个字节。从左往右,第一个方框表示字节的最高位,也称为 bit7,或者叫 MSB。最后一个方框表示字节的最低位,也称为 bit0,或者叫 LSB。方框内的值要么是 0,要么是 1。
image.png

注:MSB:MostSignificant Bit,LSB:Least Significant Bit。

下面我们举两个例子,并熟悉一下,进制之间的转换。1 个字节能表示的最大值,自然是每一个方框中的值为 1,转换成十进制等于 255,十六进制表示为 0xFF。最小值能表示的自然是每个方框中的值都为 0。

image.png

上面这两个算是比较特殊的值,很容易记住,其他的值靠记忆似乎不太好办,我们可以利用电脑的计算器工具快速计算。例子如下:

image.png

打开电脑计算器,选择程序员模式,输入数字可以在各个进制之间自由转换。

3.简便转换法

记住 8 个数 128,64,32,16,8,4,2,1,分别对应 1Byte 中的 8 位,二进制如果是 1,那么表示那个位上的值,如果为 0 那值就为 0,最后相加即是 10 进制。

例如 0b1001 0110 转换成 10 进制

1	0	0	1	0	1	1	0
128	0	0	16	0	4	2	0

最后得出 128+16+4+2 = 150

二进制转 16 进制记住 4 个数 8,4,2,1,将 8 位拆成两个 4 位,相加然后转换成 16 进制贴在一起即可

1	0	0	1	0	1	1	0
8	0	0	1	0	4	2	0
9				6
0x96

4.数据存储方式

上一章的单片机内部结构讲到过程序存储器 FLASH,他数据存储方式按照上面讲的方式存储。

image.png

如上图所示,存储器就是一个个字节叠加起来,类似于盖楼房。每一层表示一个字节,每一层给一个地址,相当于楼层号码一样。如上图所示,第一、二、三层的地址分别是 0x00,0x01,0x02,一般情况下地址都是连续增加的。因此,我们只要知道地址,就能找到指定的字节了,单片机正是通过地址来实现对存储器的读写的。例如,我们 STC89C52 单片机的程序存储器的大小为 8K 字节,也就是 8*1024=8192 个字节,每一个字节有一个地址,而且从 0 开始的话,那么它的地址范围为 0-8191,转换为十六进制的话,地址范围为 0x00-0x1FFF。

现实中的硬盘,内存条的硬件就如上图所示,只不过每一个方框就是一个晶体管,一个晶体管可以存储 0 或者 1,也就是 1bit。

接着上面的讲,一个晶体管能存储 1bit 的数据,也就是说芯片上集成的晶体管越多,能存储的数据就更大,运行的程序可以更复杂,某种意义上说也就是芯片的运算能力越强了。所以,许多芯片或者手机厂商经常宣传说他的芯片有多少亿个晶体管,比同行性能强多少倍,就是这个道理。

另外一个就是芯片制造工艺,有的是 16 纳米,有的是 5 纳米,3 纳米,这里的纳米指的就是能把晶体管做的多小,所以在相同面积的芯片上,3 纳米工艺自然能比 5 纳米工艺多集成晶体管数量了。那 5 纳米工艺制造的手机芯片自然没有 3 纳米工艺制造的有竞争了。

5.第一个 C 语言程序

C 语言是一种通用的、面向过程式的计算机程序设计语言。1972 年,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言。

我们的第一个 C 语言程序的功能为:编写一个能够在桌面上显示“Hello,World!”的程序。

5.1 环境搭建

编程语言的要素都有哪些呢:1.语言主体(语法等),2.运行环境

运行环境又分为几种类型:虚拟机,机器码等等

Java 就需要虚拟机,虽然也有编译,但是通过 javac 编译扔到虚拟机里运行

C 语言最后会被翻译成机器码,所以我们需要一个编译的过程,编译就需要下载编译器,或者直接论坛发帖找大哥大姐要一个安装包

这里我介绍正常的流程

编译器地址

image.png

image.png

image.png

image.png

image.png

image.png

下载完成后直接打开

image.png

等待一段时间显示安装页面

image.png

选择一个文件夹,这里我用了 C 盘下的自建文件夹 GC,然后点击 OK

image.png

此时正在下载包的一些信息,感谢我国的墙吧哎 ~~~

image.png

点击 install 安装你需要的东西

image.png

点击 右上角 process 开始下载安装

最后很重要,将安装目录下的 bin 文件配置到环境变量中,如我的安装目录为 C:\GC 那么 bin 文件目录为 C:\GC\bin

image.png

image.png

image.png

image.png

image.png

写入 C:\GC\bin,并在最后加上一个分号 ;

image.png

至此,C 语言编译器 GCC 安装结束

PS: 可以上 GITHUB下载已经安好的直接配置环境变了呦

5.2 第一段 C 代码

#include <stdio.h>  
 void main()  
  {  
      /* 第一段C语言代码 */  
     printf("Hello, World! \n");  
     //返回  
    return;  
 }

代码很简单,总共只有 8 行,下面逐行进行解释:

a) 程序的第 1 行 #include
<stdio.h> 是预处理器指令,告诉 C 编译器在实际编译之前要包含 stdio.h 文件。

b) 第 2 行 Void
main()为 C 语言的主函数,程序从这里开始执行。在整个代码中有且只能有一个 main()函数,是程序的唯一入口,和第 3 行,第 8 行的“{ }”是一体的,所有代码放在这对双括号里面。

c) 第 4 行为注释,放置在/.../之间的内容会被编译器忽略,这就是注释内容,方便程序员看的。

d) 第 5 行 printf(...) 是是 C 中另一个可用的函数,会在屏幕上显示消息 "Hello, World!"。

e) 第 6 行也是注释,放在//后面的内容会被编译器忽略,这个是单行注释,下一行的内容不会注释掉。

f) 第 7 行 return 为 C 语言关键字,表示 main()函数运行结束。

g) 第 5,7 行语句后面都有一个分号,表明语句结束,C 语言要求在每条语句之后添加“;”。

代码编写完成,下面编译并执行。

5.3 编译执行

操作步骤如下:

a)新建文本文件,添加上述代码;

b)文件保存为 hello.c,一定要确保文件格式为.c;

c)打开系统命令提示符 CMD 窗口,并进入保存 hell0.c 的目录下,切换目录可以使用“cd /d + 目录地址”;

d)输入 gcc hello.c,按回车,开始编译代码;

e)如代码编译成功,将会在目录下生产 a.exe 的可执行文件;

f)命令行输入 a.exe,执行程序;

g)屏幕将出现“Hello World!”字样,如下图所示。

image.png

5.4 剩余内容

菜鸟教程 把每一个 demo 都写一遍跑一遍就可以达到能看懂接下来讲的例子的程度了。

所属作品集

后发布评论
作者

接下来所有的demo都是基于C语言的呦,会写注释的,不过还是自己动手写一遍跑一遍把。