写在前面:这篇文章是想记录笔者的一些学习心得,笔者尚且是一名学生,对于专业知识只是略微入门,文章中可能会有许多错误之处,还望各位多多指正。
文章目录
- 前言
- 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.b的连接方式,因为单片机的灌电流通常大于拉电流,粗略计算一下,LED灯点亮时电流为5mA左右,而STC16单片机的拉电流为270uA,灌电流为20mA,所以只能选择图2.b的连接方式,才能保证多个LED灯的稳定运行。
灌电流:指电流方向为流入单片机I/O口方向的电流
拉电流:指电流方向为流出单片机I/O口方向的电流
1.2 具体连接
根据上述的连接方式选择,笔者的STC16F开发板的具体连接如图3所示
2.1.1 I/O口的工作模式
据数据手册,我们可以了解到STC16F中的每个I/O口均有四种工作方式:准双向口、推挽输出、高阻输入、开漏输出,如图5所示。
初始化:即在我们实现代码控制之前,将元件设置为相应的工作状态,配置好相应的时钟信 ,从点灯过程中,配置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进行处理,非常感谢!