不论学习什么单片机,最简单的外设莫过于IO口的高低电平控制。而对于一个IO口的高低电平控制入门阶段将是从点亮一个LED开始的。
本章将介绍在如何创建号的工程模板上,通过控制51单片机的GPIO口,点亮一个LED灯。
发光二极管
发光二极管(Light Emitting Diode)简称LED,是一种会发光的半导体组件且具备二极管的电子特性,具有正向导通的特性
发光二极管的参数
正向导通电压:
发光二极管通常的正向导通电压是1.8V到2.2V之间
工作电流:
工作电流一般在1mA~20mA之间
其中,当电流在1mA ~ 5mA之间变化时,随之通过LED的电流越来 越大,肉眼可以感觉到这个小灯越来越亮,而当电流从5mA~20mA之间变化时,肉眼看到发光二极管的亮度变化不是很明显。当电流超过20mA时,LED就会有烧坏的危险。通常在led管脚上串联一个电阻,目的是为了限制通过LED的电流不要太大,起到了限流的作用。
如何识别原理图
拿到一块开发板的同时,我们还需要查阅它的原理图,读懂它的电路连接方式。
如下图:
从上图可以看出,图中的P5.5表示两处是连接在一起的。表示连接在单片机的第19引脚,对应为STC15W的5.5串口。
在例如图中的LED流水灯,LED控制管脚连接在单片机的IO口上。LED采用共阳接法,及所有的LED阳极(既正极,阴极为负极)管脚接在电源VCC,同时LED还串联着一个电阻接到单片机的P2口上。根据电路常识,要LED发光,既对应的单片机IO口需要的电平为低电平。反之,高电平则熄灭。
其他也是在原理图上的都可以以此类推。
软件设计
对单片机原理图有所理解之后,接下来就是对单片机进行程序的编写以及烧录。
问题一:如何点亮LED。
第一次要实现的功能就是点亮D1位置的LED,如图所示,D1位置的发光二极管连接在单片机的P2.0 IO口,即让P2.0输出低电平
#include < reg51.h >//引入包51单片机的一个头文件
sbit LED_D1=P2^0;// 将单片机的P2.0IO口定义为LED_D1
int main()
{
while(1)
{
LED_D1=0; // “0”即为低电平,“1”即为高电平,
}
}
当编译器编译成功没有报错的时候,在软件界面下方会显示以上的编译结果信息,表示没有任何问题。
当代码编写没有任何问题的时候,接下里就需要对单片机进行烧录。
首先,在状态栏点击魔术棒-->Output-->打勾“Create HEX File”-->生成目标文件 ”.hex“ 文件。
在程序目录下可以查看目标文件——“.hex”文件。
也可以通过点击下图所示位置,更改文件位置或者查看文件目录。
打开烧录软件
第一步:选择对应的单片机芯片
第二部:查看COM口(也就是单片机连接电脑,所查的USB口)
第三步:打开程序文件,也就是刚刚上一步所生成的目标文件——.hex文件。
第四步:在下图“4”位置会显示经过解码的程序文件。
第五步:点击“下载/编程”按钮
第六步:在下图,位置“6”会显示操作成功的文字。既烧录成功。
注意:在每一次烧录时,应该对单片机进行一次断电上电,该步骤称为单片机的冷启动,才能继续烧录程序。
此时单片机上的LED灯为发光。
问题二:如果要点亮所有的LED,需要怎么做呢?
源码复制
#include < reg51.h >//引入包51单片机的一个头文件
sbit LED_D1=P2^0;// 将单片机的P2.0IO口定义为LED_D1
sbit LED_D2=P2^1;// 将单片机的P2.0IO口定义为LED_D2
sbit LED_D3=P2^2;// 将单片机的P2.0IO口定义为LED_D3
sbit LED_D4=P2^3;// 将单片机的P2.0IO口定义为LED_D4
sbit LED_D5=P2^4;// 将单片机的P2.0IO口定义为LED_D5
sbit LED_D6=P2^5;// 将单片机的P2.0IO口定义为LED_D6
sbit LED_D7=P2^6;// 将单片机的P2.0IO口定义为LED_D7
sbit LED_D8=P2^7;// 将单片机的P2.0IO口定义为LED_D8、
int main()
{
while(1)
{
LED_D1=0; // “0”即为低电平,“1”即为高电平,
LED_D2=0;
LED_D3=0;
LED_D4=0;
LED_D5=0;
LED_D6=0;
LED_D7=0;
LED_D8=0;
}
}
进行同样的烧录下载后,效果如下
经手机调整曝光度后的效果。
问题三:如何简化程序。
显然这种写法会显得很累赘,假如有100个LED灯,那么不就是需要写100次的“sbit LED_D1=P2^0”,显然是不可能的。这种叫位操作。在某一些方面这一写法很方便,但是在如上面的情况就显得很麻烦。
源码复制
#include < reg51.h >int main(){ while (1) { P2=0;//或者P2=0X00 }}
其中“P2”就等同于
而“P2=0;”则等同于
或者可以将程序中的“P2=0;”写成“P2=0x00;”,“0x”表示的是16进制,转成二进制则为“0000 0000”,现在的手机计算机都可以实现进制的转换。
那如果用以上的写法,单独的控制某一个LED的亮灭需要怎么做呢?则需要我们需要点亮(熄灭)的LED,在对位的位置置“0”(“1”)。
例如:我们要D4LED熄灭,采用以上写法,则值需要在D4 LED置“1”即可,转换成十六进制则为“0x10”。
注意:进制的转换,应从最低位开始算起。
程序编写以及烧录结果
源码复制
#include < reg51.h >
int main()
{
while (1)
{
P2=0x08;
}
}
其他的以此类推。
问题四:如何让LED闪烁起来。
程序编写以及烧录结果。
源码复制
#include < reg51.h >//引入包51单片机的一个头文件
sbit LED_D1=P2^0;
int main()
{
int i;
while(1)
{
i=10000;
LED_D1=0;
while(i--);
LED_D1=1;
while(i--);
}
}
LED_D1=0;
while(i--);
//两句代码的含义为 LED_D1保持低电平一段时间,该时间为 while(i--);
全部0条评论
快来发表一下你的评论吧 !