8051单片机实战分析(以STC89C52RC为例) | 03 - LED流水灯

最新更新时间:2022-05-13来源: eefocus关键字:单片机  STC89C52RC  LED流水灯 手机看文章 扫描二维码
随时随地手机看文章

1 原理图

从图中不难看出,整个P2端口都接有LED,写代码时需要驱动整个P2端口。


2 代码

#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器

#include //因为要用到左右移函数,所以加入这个头文件


typedef unsigned int u16;   //对数据类型进行声明定义

typedef unsigned char u8;


#define led P2    //将P2口定义为led 后面就可以使用led代替P2口


/*******************************************************************************

* 函 数 名         : delay

* 函数功能    : 延时函数,i=1时,大约延时10us

*******************************************************************************/

void delay(u16 i)

{

while(i--);

}


/*******************************************************************************

 * 函 数 名       : main

 * 函数功能 : 主函数

 * 输    入       : 无

 * 输    出    : 无

*******************************************************************************/

void main()

{

u8 i;

led=0xfe;

delay(50000); //大约延时450ms

while(1)

{

for(i=0;i<7;i++) //将led左移一位

{

led=_crol_(led,1);

delay(50000); //大约延时450ms

}

for(i=0;i<7;i++) //将led右移一位

{

led=_cror_(led,1);

delay(50000); //大约延时450ms

}

}

}


简要分析:


使用宏定义 #define 定义 led 为 P2,这样我们可以使用led替换P2进行使用。

开始执行 main 函数的时候,led=0xfe; 首先点亮一个灯,0xfe用二进制表示就是0x11111110,二进制数中的每一位表示P2中某个端口的电平,此处就是表示P2.0端口为0,即低电平,从而点亮P2.0端口的LED。


进入大循环 while(1)后有两个 for 循环,从 i=0 跑到 i=7 ,使用 _crol_ 函数进行左移操作,例如第一次左移是从0x11111110变成0x11111101,这样P2.0端口的LED就会熄灭,P2.1端口的LED就会点亮;同理使用 _cror_ 函数进行右移操作,在左移7次后,P2.7端口的LED是点亮的,即0x01111111,在进行第一次右移的时候,从0x01111111变成0x10111111,这样P2.7端口的LED就会熄灭,P2.6端口的LED就会点亮,如此往返就行实现流水灯。

关键字:单片机  STC89C52RC  LED流水灯 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic571935.html

上一篇:8051单片机实战分析(以STC89C52RC为例) | 04 - 蜂鸣器驱动
下一篇:8051单片机实战分析(以STC89C52RC为例) | 02 - LED延时约5s闪烁

推荐阅读

8051单片机实战分析(以STC89C52RC为例) | 01 - 点亮一个LED
1 原理图以点亮单片机P2.2端口的LED为例:从图中不难看出,LED的右边是通过电阻接到VCC,如果要点亮LED就得把LED左边的端口进行拉低,根据二极管的单向导电性,LED正向导通从而LED发光。2 代码main.c文件的代码:#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器sbit led=P2^2; //将单片机的P2.2端口定义为led/******************************************************************************** 函 数 名 : main* 函数功能 : 主函数* 输 入
发表于 2022-05-13
8051单片机实战分析(以STC89C52RC为例) | 01 - 点亮一个<font color='red'>LED</font>
8051单片机实战分析(以STC89C52RC为例) | 02 - LED延时约5s闪烁
代码修改如下:#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16; //对数据类型进行声明定义typedef unsigned char u8;sbit led=P2^2; //将单片机的P2.2端口定义为led/******************************************************************************** 函 数 名 : delay* 函数功能 : 延时函数,i=1时,大约延时10us*******************************
发表于 2022-05-13
8051单片机实战分析(以STC89C52RC为例) | 04 - 蜂鸣器驱动
蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。三极管的作用为驱动,通过三极管放大驱动电流,从而可以让蜂鸣器发出声音。有源蜂鸣器和无源蜂鸣器的区别:这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。有源蜂鸣器示意图:无源蜂鸣器示意图:无源蜂鸣器的优点是:便宜声音频率可控,可以做出“多来米发索拉西
发表于 2022-05-13
8051单片机实战分析(以<font color='red'>STC89C52RC</font>为例) | 04 - 蜂鸣器驱动
8051单片机实战分析(以STC89C52RC为例) | 05 - 静态数码管驱动
1 数码管介绍数码管是给我们展示数据或者信息的电子器件,它是最原始以及成本比较低。以下是数码管的实物图:1.1 数码管的段选与位选以下是数码管的每一段所对应的位置:从图可以看出来,数码管共有 a、b、c、d、e、f、g、dp 这么 8 个段,而实际上,这 8 个段每一段都是一个 LED 小灯,所以一个数码管就是由 8个 LED 小灯组成的。注意 dp 这个段,它是表示一个小数点!我们看一下数码管内部结构的示意图:数码管分为共阳和共阴两种:共阴数码管就是 8 只 LED 小灯的阴极是连接在一起的,阴极是公共端,由阳极来控制单个小灯的亮灭。同理共阳数码管就是阳极接在一起。看到这里我们就不难猜出,所谓的段选就是选择要点亮数码管中 a、b、
发表于 2022-05-13
8051单片机实战分析(以<font color='red'>STC89C52RC</font>为例) | 05 - 静态数码管驱动
8051单片机实战分析(以STC89C52RC为例) | 06 - 动态数码管驱动
1 动态扫描那什么是动态扫描呢?举个例子:有 2 个数码管,我们要显示“12”这个数字,可以先让高位的位选三极管导通,然后控制段选让其显示“1”,延时一定时间后再让低位的位选三极管导通,然后控制段选让其显示“2”。把这个流程以一定的速度循环运行就可以让数码管显示出“12”,由于交替速度非常快,人眼识别到的就是“12”这两位数字同时亮了。在多个数码管显示数字的时候,我们可以轮流点亮数码管(一个时刻内只有一个数码管是亮的),利用人眼的视觉暂留现象(也叫余辉效应),就可以做到看起来是所有数码管都同时亮了,这就是动态显示,也叫做动态扫描。那么一个数码管需要点亮多长时间呢?也就是说要多长时间完成一次全部数码管的扫描呢(很明显:整体扫描时间=单
发表于 2022-05-12
8051单片机实战分析(以<font color='red'>STC89C52RC</font>为例) | 06 - 动态数码管驱动
CAN和CAN FD对汽车领域不同应用的实现
由于汽车领域对带宽的更高要求,CAN(控制器局域网)规范被扩展为灵活的数据速率,新的迭代称为 CAN FD。CAN 具有成本、灵活性和鲁棒性等优势,所有这些优势都对许多领域的非汽车应用非常有利。CAN FD 扩展的市场机会更加广阔。本文介绍了 CAN 和 CAN FD 的基础知识,以及使用不同物理层或更高层协议的不同应用实现,CAN 作为数据链路层。首先,让我们谈谈 CAN 相对于RS232 或 RS485 等标准串行通信的优势。由于 CAN 具有更高的通信速度和错误检测功能,因此它具有出色的鲁棒性和更低的成本。成本和灵活性汽车行业最重要的驱动力是减少汽车中的布线数量。由于采用双绞线布线,布线相对容易,而且重量较轻,价格也不贵。终端
发表于 2022-05-15
CAN和CAN FD对汽车领域不同应用的实现
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved