STC16F初探——点亮LED灯

写在前面:这篇文章是想记录笔者的一些学习心得,笔者尚且是一名学生,对于专业知识只是略微入门,文章中可能会有许多错误之处,还望各位多多指正。

文章目录

  • 前言
  • 0 前置知识
  • 1 硬件设计
    • 1.1 连接方式选择
    • 1.2 具体连接
  • 2 代码实现
    • 2.1 I/O口初始化
      • 2.1.1 I/O口的工作模式
      • 2.1.1 配置I/O工作模式
    • 2.2 点亮LED灯
    • 2.3 改进代码
  • 总结

前言


0 前置知识

ED灯即发光二极管,对于点亮发光二极管,只需要在使元件电压降 > 导通压降即可。对于普通的发光二极管而言,导通压降通常为2V,而单片机的工作电压通常为3.3V > 2V,所以我们只要给二极管的阳极通高电平,阴极通低电平即可实现点亮,如图1所示。

图2 LED灯的连接方式
下来的问题便是具体选择何种连接方式了。对于图2.c而言,我们知道普通发光二极管只有两种正常状态,即导通与截止,而图2.a与图2.b,一个管脚通过控制管脚的高低电平,已经可以实现控制二极管的两种状态了,就不需要连接两个管脚。
常情况下,我们选择图2.b的连接方式,因为单片机的灌电流通常大于拉电流,粗略计算一下,LED灯点亮时电流为5mA左右,而STC16单片机的拉电流为270uA,灌电流为20mA,所以只能选择图2.b的连接方式,才能保证多个LED灯的稳定运行。

灌电流:指电流方向为流入单片机I/O口方向的电流
拉电流:指电流方向为流出单片机I/O口方向的电流

1.2 具体连接

根据上述的连接方式选择,笔者的STC16F开发板的具体连接如图3所示

图4 STC16F管脚图
图4管脚图中可以看出,STC16F40K总共有64根管脚,其中P0~P7,共60个标准I/O口。根据数据手册中,我们知道所有的I/O的上电后的初始状态为高阻输入状态(即输出电平即不是高电平也不是低电平),所以我们必须设置I/O口模式。

2.1.1 I/O口的工作模式

据数据手册,我们可以了解到STC16F中的每个I/O口均有四种工作方式:准双向口、推挽输出、高阻输入、开漏输出,如图5所示。

图6 配置I/O口模式
据图5与图6,我们要配置P2.0口具体的代码如下:

初始化:即在我们实现代码控制之前,将元件设置为相应的工作状态,配置好相应的时钟信 ,从点灯过程中,配置I/O口的工作模式就可以认为对I/O进行初始化

2.2 点亮LED灯

我们配置好I/O口的工作模式后,点亮LED就一个非常简单的事情了,找到LED灯连接的管脚,再令管脚变为所需的电平即可了,具体代码如下:

2.3 改进代码

据前面的2.2点亮LED灯,我们已经可以实现点亮LED灯的基本任务了,只是对于我们的代码可以进行模块化的处理,将初始化的过程与工作过程模块化,或许对于点亮LED灯这样简单的工作,有点多余,但是对于未来较为复杂的过程,先思考模块的组合关系,再考虑各模块的具体实现,是有助于我们将复杂的问题简单化的。改进代码如下:

样我们就大致完成了我们的目标,实现初步控制LED灯,同时实现了LED灯一秒的闪烁。

自顶而下的编程思想:将复杂的问题拆分成多个子问题,在每次编程过程中,只是解决一个个的小问题,减少思考的难度。
对于硬件开发,将硬件接口的控制,与应用层分开,有利于未来对应用层算法函数的调用,而不需要考虑不同硬件带来的不同。

总结

文只是对于STC16F的初步学习,甚至确切地说,只是学习熟悉STC16F单片机的管脚以及数据手册,点灯是非常简单的一个控制,STC16F有着非常强大的功能,以及丰富的外设,点灯只是漫漫长路的起点,或许我们只是刚刚站在了山脚之下。
篇文章,一方面只是为了记录个人的学习,对于学习内容有所总结与归纳;另一方面是,希望尝试写自己的博客,对于自己的成长有所记录。所以,无论在技术上,还是在博客的内容上,笔者都尚且只是一个懵懂无知的少年,如果这其中,有任何错误之处,还希望大家能及时指出,多多指点。

文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览113143 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年2月20日
下一篇 2022年2月20日

相关推荐