01认识单片机
一、什么是单片机
单片机是在一个单芯片上集成了一个微型计算机主要部件单元的微型计算机,在单片机中一般都继承有CPU(包括运算器、控制器、功能寄存器)、存储器、输入输出/输入接口以及其它重要的功能部件。
二、单片机可以做什么
下面是一些典型应用场合
1.工业测量控制系统
2.智能化仪器表
3.个人和家用电器设备
三、笔记中使用的单片机
在这个笔记中我使用的是普中51实验板,里面使用的芯片为STC89C52RC,因为这个板子上的元器件比较全,很适合初学者使用。
四、51单片机的特点
这个特点只有在51单片机有,其它单片机是没有的,51单片机可以对单个引脚进行操作,也可以对一组引脚进行操作。如果使用其它单片机的小伙伴们可能知道,比如要操作P2这一组中的一个引脚,就得给P2组一个数据
P2 = 0x00;
但是在51单片机中就可以不这样操作,比如说你要操作P2这个组中的第3个引脚,那么你可以单独操作这个引脚
P2_3 = 1;
这样就可以对P2组中的第3个引脚一个高电平了。
五、电平
让51单片机控制一些元器件本质上是控制给这个元器件的电平,比如说一个引脚上接着一个LED需要高电平来进行点亮,我们就给这个引脚一个高电平即可。
又比如说这个引脚上接的LED灯需要低电平来点亮,那么就给这个引脚一个低电平。
这个就是使用单片机控制一些元器件的本质,那么我们怎么样给这个引脚一个高电平或者低电平呢?
其实是使用到C语言中的赋值(不明白C语言的可以看我之前的文章),我们要让哪一个引脚为什么电平,我们就将这个电平给它赋值过去即可。
那么怎么来表示高电平和低电平呢?其实只需要使用0和1来表示即可
1表示高电平,0表示低电平
六、找到引脚
电平明白了后现在就是要给引脚电平了,那给引脚电平是不是要先找到这个引脚啊。找到了引脚之后才能给这个引脚一个电平。
那么这个引脚该如何去找呢?其实是通过地址来进行查找的,学C语言的时候了解过,所有创建出来的内容如何找到,是不是都是通过这个元素的地址来查找这个元素的,所以在这里找到单片机中的引脚的方式也是通过地址来查找。
这里可以翻看STC89C52的说明文档中的 特殊功能寄存器
这个章节去查看
找到了之后需要给它赋值给一个变量,毕竟你不可以拿一个地址来赋值对吧。
这里就需要创建一个变量,但创建的变量的类型是什么类型呢?
这里就要说一下C51中扩展的两个特殊类型,一个是 sbit
另一个是 sft
。
1.sfr是什么
sfr是特殊功能寄存器,这些引脚的地址都是存放在特殊功能寄存器中的,如果要指定这个变量为特殊功能寄存器的位置时就得使用这个关键字进行修饰,使用方法如下:
sfr a = 0xA0;
上面的意思是:创建了一个特殊功能寄存器变量a,里面存放的值为0xA0
,这样我们就可以通过这个变量来访问特殊功能寄存器中地址值为0xA0
位置的内容了,而这个位置又是P2
引脚组的地址,所以可以使用创建出来的a变量来访问P2
引脚组。
2.sbit是什么
sbit是特殊功能寄存器的位变量,之前在说51的特点的时候说过,可以直接操作一个引脚组中的一个特定引脚,比如说P2引脚组中的第2个引脚。这个细分就得使用到sbit
关键字。
而使用的方法比较简单
sbit a_0 = a^0;
上面的代码得到的内容就是得到了P2组中的第0个元素的地址。这样就可以通过a_0这个变量直接来操作P2组中的第0个引脚了。
知道了引脚的定义那我们就可以对引脚进行操作了。
比如说现在要让P2引脚组中的第0个引脚一个高电平,那么代码可以这么写:
sfr P2 = 0xA0;
sbit P2_0 = P2 ^ 0;
P2_0 = 1;
这样就可以让P2组中的第0个引脚一个高电平了,当然也可以直接对组进行操作,操作方式如下:
sfr P2 = 0xA0;
P2 = 0x01;
这样也可以,那这种方法的操作是什么操作呢?
3.引脚组的排序
一个引脚组有8个引脚,这个是规定好的,可以查看原理图,我们在前面知道给一个引脚电平要么是1或者0,那么一个引脚组给的电平是不是可以为:
11110000或者其它的写法,只要保证给的电平是1和0即可,但是如果就按照上面的11110000的写法是不可以的,因为在C语言中只能表示十进制、八进制、十六进制的数,二进制的数是没有办法表示的,所以这里需要将二进制的数改变为十六进制数,那11110000表示为十六进制为0xF0。
当然上面的方法还是比较复杂,毕竟每次使用引脚就得去翻手册,这个时候该怎么办呢?
其实C51这个编译器已经将这些引脚的定义写好了,我们只需要调用它写好的库即可使用,这里可以使用的是
#include <at89x51.h>
当然还有一个
#include <REGX51.h>
上面两个库按你喜欢的来进行调用,调用一个即可。
调用完库后直接就可以使用
#include <at89x51.h>
int main(){
P2 = 0x80;
return 1;
}