LED 流水灯

GPIO 概念

        GPIO(general purpose intput output)是通用输入输出端口的简称,可通过软件来控制其输入和输出。51 单片机芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。 

        51 单片机引脚可分为这几类:

  1. 电源引脚:引脚图中的 VCC、 GND(VSS) 都属于电源引脚。
  2. 晶振引脚:引脚图中的 XTAL1、XTAL2 都属于晶振引脚。
  3. 复位引脚:引脚图中的 RST/VPD 属于复位引脚,不做其他功能使用。
  4. 下载引脚:51 单片机的串口功能引脚(TXD、RXD)可以作为下载引脚 使用。
  5. GPIO 引脚:引脚图中带有 Px.x 等字样的均属于 GPIO 引脚。

LED 流水灯

        从引脚图可以看出,GPIO 占用了芯片大部分的引脚,共达 32 个,分为了 4 组,P0、P1、 P2、P3,每组为 8 个 IO,而且 P3 组中每个 IO 都具备额外功能,只要通过相应的寄存器设置即可配置对应的附加功能,同一时刻,每个引脚只能使用该引脚的一个功能。

        具体某个引脚有什么功能,可以查阅STC89CXX 芯片数据手册。提取码:xaqp。

链接:https://pan.baidu.com/s/1KxKfIvTn6o4lNgtVp30WcAwd=ifco 
提取码:ifco 
–来自百度网盘超级会员V4的分享

LED 简介

        LED 即发光二极管。它具有单向导电性,通过 5mA 左右电流即可发光,电流越大,其亮度越强,但电流过大,会烧毁二极管,一般控制在 3 mA-20mA 之间,通常会在 LED 管脚上串联一个电阻,目的是为了限制通过发光二极管的电流,因此这些电阻又可以称为“限流电阻”。当发光二极管发光时,测量它两端电压约为 1.7V,这个电压又叫做发光二极管的“导通压降”。

        下图左右分别为直插式发光二极管和贴片式发光二极管实物图。

LED 流水灯 LED 流水灯

             发光二极管正极又称阳极,负极又称阴极,电流只能从阳极流向阴极。直插式发光二极管长脚为阳极,短脚为阴极。通常贴片式发光二极管正面的一端有彩色标记,有标记的一端为阴极。

LED 流水灯移位和循环

        本例中使用P2口连接8个LED灯,LED的正极接+5V。实现 LED 流水灯,只需循环让 D1-D8 指示灯逐个点亮。同时也需要延时。要实现循环点亮,用最容易理解的方法是:点亮 D1 且把 D2-D8 熄灭,延时一段时间后再点亮 D2 且把 D1、 D3-D8 熄灭,延时一段时间后再点亮 D3 且把 D1-D2、D4-D8 熄灭,如此循环,就可以实现 LED 流水灯实验。不推荐此种方法。在 C 语言相关的基础知识中,有移位以及循环语句操作,根据流水灯实现原理,即 IO 口由低往高或者由高往低逐个输出低电平特点,那么可以将移位操作以及循环结合进来。

代码实现

        方式1:

        使用for完成一次流水灯的轮回,把for循环放在while(1)无限循环中,无限次轮回for循环,达到流水灯一直循环流水点亮的效果。

        方式2:

        使用intrins.h库函数。分别用两个for完成流水灯1->8->1->8…的轮回,把for循环放在while(1)无限循环中,无限次轮回for循环,达到流水灯一直循环流水点亮的效果。

        需要注意的是,for循环中判断条件是i<7,即,执行了7次循环,是因为第17行:    LED_PORT=~0x01;已经设置了第一个灯点亮,for执行7次之后就到第8个灯了。之后的第二个for循环又7次回到了第一个灯,如此而已。

补充:

        编译结果里面的几个数据的意义:

  • code:表示程序所占用 FLASH 的大小。
  • data:数据储存器内部 RAM 占用大小。
  • xdata:数据储存器外部 RAM 占用大小。

        有了这个就可以知道当前使用的 flash 和 sram(内+外) 大小了。程序的大小不是.hex 文件的大小,而是编译后的 code 和 data 之和。

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

来源:風清掦

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月6日
下一篇 2022年1月6日

相关推荐