第一范文网 - 专业文章范例文档资料分享平台

STC15F2K60S2-01-IO跑马灯(寄存器版)基本操作

来源:用户分享 时间:2025/6/6 11:22:21 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

STC15F2K60S2-01-IO跑马灯(寄存器版)基本操作

本文将以流水灯为例,对STC15F2K60S2单片机的普通IO口的基本操作进行详细介绍。先看效果图:

本例是通过控制开发板上D1、D2、D3、D4四个LED在一定时间内的亮与灭来实现流水灯的效果,下面我们来详细介绍一下实现的过程。

打开开发板原理图,找到D1、D2、D3、D4这四个LED硬件原理图:

云汉电子社区bbs.ickey.cn

从原理图中,我们不难发现,只要分别给P16、P17、P47、P46这四个IO一个低电平,对应的LED就会被点亮。那么怎么才能让STC15F2K60S2单片机这四个IO口输出低电平呢?虽然不简单,但也不是很复杂。

首先,我们需要来配置这四个IO口的模式,从芯片手册上我们可以知道,STC15F2K60S2单片机的所有I/O口均可由软件配置成4种工作类型之一,即:准双向口/弱上拉、推挽输出/强上拉、仅为输入(高阻)或开漏输出功能,每个口用2个控制寄存器中的相应位控制每个引脚的工作类型。那么我们来先看P16、P17口,这两个IO口是在P1端口上,从STC提供的芯片手册上,我们可以看到P1口的配置如下:

也就是说,P1口的四种工作类型,是通过设置P1M1、P1M0的值来确定的。这里我们演示流水灯用的是普通输入输出功能,也就是我们需要将P1M1、P1M0都设置成0就可以了!同样,P46、P47也是一样的设置:

在这里就偷下懒,直接把所有I/O口都设置成准双向口了。

云汉电子社区bbs.ickey.cn

说到这里,可能有人会有疑惑:如果我只需要将某个I/O口设置成准双向口,其他的I/O口要用作别的功能,那该怎么设置呢?这个很简单,我们只需要按位设置。举个例子,如果我们有这么一个需求,需要将P1.7为开漏,P1.6为强推挽输出,P1.5为高阻输入,其余I/O口均为准双向口,那么我们只需要如下设置即可:

P1M1 = 10100000B; P1M0 = 11000000B;

还需要提醒一下,虽然STC15F2K60S2单片机的每个I/O口在弱上拉/强推挽输出/开漏模式时,都能承受20mA的灌电流(还是要加限流电阻,如1K,560R,472R等),在强推挽输出时能输出20mA的拉电流(也要加限流电阻),但整个单片机的工作电流推荐不要超过90mA,即从MCU-VCC流入的电流建议不要超过90mA,从MCU-GND流出电流建议不要超过90mA,整体流出/流出电流建议都不要超过90mA。

另外还需要特别说明的是,虽然STC15F2K60S2单片机的所有IO口上电复位后均为准双向/弱上拉模式,但是由于P1.7和P1.6口还可以分别作为外部晶振或时钟电路的引脚XTAL1和XTAL2,所以,P1.7和P1.6上电复位后的模式不一定就是准双向口/弱上拉模式。当P1.7和P1.6作为外部晶体或时钟电路的引脚XTAL1和XTAL2使用时,其上电复位后的模式是高阻输入。

接下来现在我们要开始写程序来实现流水灯的效果了。

首先,我们一定要将单片机的头文件加载进来,因为头文件里给我们定义好了单片机所有管脚的所有地址及功能,我们在程序里只需要直接调用就好了。 #include \

该语句的功能是让链接器通过头文件里的函数声明找到函数实际代码所在的位置即所在的库文件,这样才能使用该函数的实际代码,函数的实际代码的实现过程是先让链接器通过头文件里函数的申明找到函数实际代码所在的位置即所在的库文件,再通过#include语句把链接器所找到的函数实际代码用链接器把函数的实际代码链接到当前文件即所要执行的程序。 接下来,我们定义好主时钟频率: #define MAIN_Fosc 22118400L

此处是通过使用预处理宏定义命令来定义的系统时钟,简单理解,就是相当于定义了一个常量MAIN_Fosc,然后给这个变量赋一个值22118400。

云汉电子社区bbs.ickey.cn

接下来就开始写主函数的代码了:

此处直接将所有IO口都配置成准双向口了,没有单独去配置了。IO口工作模式配置好了,就该来配置某一位IO口的输出状态了:

之前从原理图上我们知道,要想LED亮灯,只需要将该IO口的状态设置成低电平模式就好了,那么单片机是如何实现的呢?其实很简单,我们只需要这样写就好了:

云汉电子社区bbs.ickey.cn

P16 = 0;

这样P16口就会被拉低了,对应的LED就会被点亮。同样,如果要让LED灭,只需要将P16口设置成高电平就好了,即: P16 = 1;

其他的IO口均是同样的操作,在此就不多说了。

写到这里,很多接触过单片机的人可能会疑惑,为什么我在这里可以直接写P16而不用先定义呢?别的单片机可是必须要先写:sbit P16= P1^6;才可以使用P16这个变量的哦!

确实,我在主函数里没有先定义P16这个变量,那是因为在单片机的头文件里已经给我们定义好了:

云汉电子社区bbs.ickey.cn

STC15F2K60S2-01-IO跑马灯(寄存器版)基本操作.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c1960k43ar7553962zwnd_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top