我们即将进入51单片机的编程学习,咱们今天就来讲解一下单片机中的C语言(你可以称作C51)
在说编程之前,要先说一些别的东西:
- 二进制,八进制,十六进制
- 二进制中只有数字0和1,在二进制中1+1为10,我们常说十进制逢十进一,那二进制就是逢二进一,那为什么我会在这里说二进制呢,因为我们的51单片机的io口是可以接受发送低电平和高电平的,意思就是输入输出的口只有0和1两个状态,所以如果我们理解了二进制,那么对于单片机的输入和输出就会十分明了了
- 八进制,学过C语言,咱们都知道,在C语言中其实是不能直接写二进制的数的,但是是可以直接写八进制的数和十六进制的数,所以,在这里,八进制和十六进制还是为二进制服务的,可以说是二进制的两种表达形式,我们先来说八进制,八进制和二进制的互转是非常快捷,我们可以用这个方法完成二进制和八进制的互相转换:把二进制从低位开始,每三位一组,然后把每组转成八进制的数,这样得到的新的数就是我们二进制所对应的的八进制,举个例子:有这样一个二进制数1101010101010101010,我们把它从低位开始分成每三个一组,就是001 101 010 101 010 101 010,然后我们将每一组都转成八进制的数1 5 2 5 2 5 2,合起来就是1525252,我们就这样得到了八进制的数(在这里先说方法,原因一会儿会说)
- 十六进制,同样的,十六进制也是为二进制服务的,那么十六进制和二进制怎么转换呢,是这样的:把二进制从低位开始,每四位一组,然后把每组转成十六进制的数,这样得到的新的数就是我们二进制所对应的的十六进制,还是举个例子,还是那个二进制数1101010101010101010,我们把它从低位开始分成每四个一组,就是0110 1010 1010 1010 1010,然后我们将每一组都转成十六进制的数6 a a a a,合起来就是6aaaa,我们呢也就得到了十六进制的数
略微的解释:对于上述方法,可能有人会比较懵逼,不知道为什么要这样做,我们就来看一下:
- 二进制3位一组,我们可以有这么八个数:000,001,010,011,100,101,110,111,这八个数正好就是从0到7,正好可以完完整整的表示我们的八进制,一个不多一个不少
- 二进制4位一组,我们可以有这么十六个数:0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111,而这十六个数正好就是从0到15,用十六进制表示就是从0到F,也是正正好好可以表示我们的十六进制,所以方法是这样的来的
- 对于二进制数的计算,可能有些人不大理解,我们就以上面十六进制的例子来详细说一下:0110 1010 1010 1010 1010,我们算0110,0*8+1*4+1*2+0*1=6,然后我们再算1010,1*8+0*4+1*2+0*1=10,十六进制中10是a,所以结果是a,剩下的一样,所以我们就得到了6 a a a a
- 在C语言中,八进制的数要在数字前面加一个0,比如017,但是是不能写018的,原因你自己斟酌一下,十六进制的数前面要加一个0x或者0X
位运算
为什么我要说位运算呢,因为位运算在我们的51中也有非常大的作用,然后另一个原因是有一些学校教学的进度可能会慢,一个学期没有学到这里,而我们却要用到位运算,怕出现这种尴尬的局面,我就把位运算也一同写了进来,在之后的学习生活当中,你会用到很多位运算的,特别是在单片机中,它不仅直观,而且还高效
- &--按位与
首先要申明的一点,所有的位运算都是对二进制进行处理的,我们的按位与是一个双目运算符,是将两个数的二进制相对应的每一位进行逻辑与的操作,举个例子12&7,12的二进制为1100,7的二进制为111(也就是0111),我们就将每一位进行逻辑与的操作,得到了每个位上的结果0 1 0 0,就是二进制数100,而100转为十进制为4,所以我们得到了12&7的结果为4
- |--按位或
有了之前计算按位与的操作,按位或就很好理解了,就是对每一位进行逻辑或的操作
同样的还有按位异或,左移,右移,按位取反等等,你可以点击这里获取相应的计算,在这里重复只会显得赘余,等之后需要用到的时候你就知道作用了
在说完这些之后,我们就可以进入单片机的学习了,我们下个文章见
原文地址:https://www.cnblogs.com/time-light/p/12239500.html
时间: 2024-10-07 18:30:11