点亮led灯的个数_单片机点灯(点亮、闪烁、流水灯)

本文介绍了如何使用单片机控制LED灯进行点亮、闪烁和流水灯效果。通过理解二极管工作原理和编程实现,详细讲解了程序编写,包括循环左移和右移函数的应用,以及延时函数的实现。
摘要由CSDN通过智能技术生成

一、点亮

工作原理:

如图,二极管阳极连接电阻,二极管阴极连接单片机引脚。D0对应P20,D1对应P21,,,,,,,都通过P2孔进行控制。

二极管:

电源正极连接到二极管阳极,负极连接到阴极,二极管正常工作。所以,原理图中,引脚为低电平,连接的是二极管的阴极,阳极通过与电阻连接,电阻连接的是高电平,所以二极管正常工作。电阻的作用为保护二极管。

程序编写

#include"reg52.h"

sbit LED=P2^0; /*sbit用于定义变量。LED为自定义变量。将P2.0(注意不要写成P2.0,应写为P^0)孔赋给变量LED*/

void main()

{

while(1)

{

LED=0;/*由二极管的工作原理可得,二极管接P2.0孔,所以该孔为低电平,为0*/

}

}

二、闪烁

工作原理

在点亮LED灯的基础之上。

原理上基本与点亮LED灯工作原理相同。

自定义一个延时函数。

主函数先点亮灯,在调用延时函数,在熄灭灯,然后在调用延时函数,将这些放入循环一直执行。完成

代码

#include "reg52.h"

typedef unsigned char u8; //重定义字符型变量

typedef unsigned int u16; //重定义整型变量

/*自定义延时函数*/

void dealy(u16 i)

{

while(i--);

}

sbit led=P2^0;

void main()

{

while(1)

{

led=0; //点亮,阴极接低电平

dealy(50000);

led=1; //熄灭,阴极接高电平

dealy(50000);

}

}

三、流水灯工作原理

1.在LED点亮、LED闪烁实验的基础之上。

2.移位函数

crol(a,b):循环左移函数,a为左移的值,b为左移的位数。

cror(a,b):循环右移函数,a为右移的值,b为右移的位数。

移位函数包含在instrins.h库函数里面。

3.c语言中十六进制的表示

Ox代表的是十六进制的前缀,不用读。例如OXaaOxbb,只看aa,bb就行。

十六进制到二进制转换

十六进制表示:每一位有不同的数码0~9,A(10),B(11),C(12),D(13),E(14),F(15)

十六进制转二进制:将十六进制的每一位转化为二进制即可。例如8FA,=>1000 1111 1010

运作过程

先看原理图

LED原理图(阳极解高电平),阴极通过电阻接接引脚

引脚默认接高电平,所以,初始时灯为熄灭状态。流水实现

利用十六进制位位移函数实现左移和右移

_crol_(0xfe,1):0xfe转化为二进制为1111 1110;1代表位数

f代表原理图中的4个高位引脚,e代表4个低位引脚。

1111 1110 =>p0=0(低电平,灯亮)

1111 1101 =>左移,p1=0,第二个灯亮

1111 1011 =>p2

…………

_cror_(oxfe,1):与左移原理相同(从0111 1111 开始向右移)

代码实现

#include

#include

typedef unsigned char u8; //重定义全局字符型变量

typedef unsigned int u16; //重定义全局整型变量

#define led P2//宏定义LED为p2端口

/*延时函数*/

void dealy(u16 i)

{

while(i--);

}

void main()

{

u16 i; //定义变量i

P2=0xfe; //点亮第一个LED灯,即1111 1110.

dealy(50000); //延时450ms

while(1)

{

for(i=0;i<7;i++) //8个LED灯,利用for循环一直执行

{

led=_crol_(led,1); // 1111~1110~0111 1111,左移

dealy(50000);

}

for(i=0;i<7;i++) //8个LED灯,利用for循环一直执行

{ led=_cror_(led,1); //0111 1111~1111 1110 ,右移

dealy(50000);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值