书接前文,小伙伴们都准备好了吗?[微笑]一颗LED,1颗200-1K左右的电阻。
硬件连接参考下图,电源Vcc连接LED的正极,LED的负极连接电阻,电阻连接单片机的IO口。LED的正负极,一般由引脚区别,长的为+,短一点的为-。(也可观察内部,头部较小的为+,大的为-)。这样当单片机的引脚为低电平时,LED就会被点亮,这里的电阻是限流电阻,保证LED长时间点亮也不会损坏。
LED的电流和电压是指数关系,当电压达到LED PN结的开启电压后,电流会急剧上升,所以限流电阻是必须的。这里电流是从电源正极流入单片机的,叫灌电流,可以想象电流是从外部灌入单片机内部的。如果是单片机输出电流到外部器件叫拉电流,单片机拉动外部一个负载。由于制造原因,单片机的灌电流能力要远远大于拉电流能力。虽然这样,也不要总使电流流入单片机,一般单片机的灌电流能力是有限的,大概几十mA。所以我们一般用三极管来进行放大,这样单片机输入和输出的电流会大大减小。
小问题,那么怎么使LED闪烁呢?[what]
![e3458613cc0c3ff43014016bef907ffb.png](https://img-blog.csdnimg.cn/img_convert/e3458613cc0c3ff43014016bef907ffb.png)
LED与单片机IO口的连接
好了,下面我们聊一下软件。上次我们编译和下载了一个空的程序到了单片机,什么现象都看不到。现在我们外接一个LED到一个IO口,我们来点亮它,然后让它闪烁起来。
第一个程序见左上,几个知识点出现了。
- sbit这是51单片机的关键字,你可以发现它变黑体变粗了。 它的作用是定义一个单片机IO口。P3^2,是指P3口的第2个引脚。有的写为P3.2,这个完全取决于你的单片机寄存器的.h文件的规定。这里stc15w4k.h中一个IO引脚引用是使用^. 那么LED=0,就是P3^2为低电平,LED=1,P3^2为高电平。保证你的P3^2接好硬件的线路和LED构成回路。
- 我们见到了第一个函数,它的作用是所有单片机的IO口,既可以输入也可以输出。因为单片的IO可以设置不同的状态,如开漏,高阻,推挽输出。有些IO口默认状态是高阻的,所以我们先初始化为最通用的输入输出都可以的准双向口。
- 在主函数main中,我们加入了Port_Init();LED=0;这2条语句在while(1)的死循环之前,一般我们把初始化的语句放在死循环之前,叫初始化语句,就是在不停循环之前要做好的工作。
我们然后编译这个程序,0错0警告,把hex的文件下载到单片机中。看看现象。你发现LED灯被点亮了。[微笑]
![8f85615f3bc4b9337ebca6ee8edb0c12.png](https://img-blog.csdnimg.cn/img_convert/8f85615f3bc4b9337ebca6ee8edb0c12.png)
KEIL编译
我们怎么让LED闪烁起来呢?聪明的小伙伴已经想到了,让LED=0,延时一会,再LED=1,延时一会。对了,是这个思路。[赞]
看图片右边的程序,第二个函数出现了。 一个简单的延时,具体延时了多少时间,不知道,但可以测试出来,所以不是精准的延时。
编译这个程序,下载到单片机,观察现象。你发现LED开始闪烁起来了,亮一下灭一下。[耶]
![f86690b30c75fa20751ddfb39d87e884.png](https://img-blog.csdnimg.cn/img_convert/f86690b30c75fa20751ddfb39d87e884.png)
LED闪烁起来了
问题来了,语句还能简化吗?如果再一个系统中这样让LED闪烁有什么问题吗?[思考]
好了,小伙伴们,你们的LED闪烁起来了吗?[机智]下一节我们来回答留下的2个问题。有知道的小伙伴可以在评论中留言。谢谢![来看我]