关于单片机的led灯的二三事,初学者的开端

关于单片机的led灯的二三事,初学者的开端

b53229081fd4e1d0c1541cc9482e132d.png///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加我地球呺也能领取哦。最近比较闲,带做毕设,带学生参加省级或以上比赛///82c14fd1478f23b04bd40a5d051d6ccf.png

一、点亮

工作原理:

53601ebcbb194e23c15100557e048556.png

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

8e2f27de8ba551bbf672118a1703d421.png

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

#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

·运作过程

·先看原理图

1ce2544619fb069051a0aa8c3f7f8e31.png

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

af48b66843a8ea0e1fa7aee8a7e5b64d.png

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

·流水实现
利用十六进制位位移函数实现左移和右移
_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;i8个LED灯,利用for循环一直执行

 {

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

   dealy(50000);

 }

  for(i=0;i8个LED灯,利用for循环一直执行

 { led=_cror_(led,1); //0111 1111变小,呼吸灯效果就出来了。单片机用来控制频率,得计算RC的振荡频率

猜你喜欢

转载自blog.csdn.net/danpianji777/article/details/124831257