单片机点灯(点亮、闪烁、流水灯)

发布时间:2023-01-12  

一、点亮


工作原理:

如图,二极管阳极连接电阻,二极管阴极连接单片机引脚。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);

}

  }

 

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    51单片机流水灯电路图大全;  51单片机流水灯电路图(一)   本原理图采用STC89S52单片机控制8个LED灯,其中8个LED灯的负极接单片机的P1端口,正极通过1KΩ排阻连接到电源上。原理......
    51单片机(入门保姆级教程)——LED闪烁及流水灯;一、LED基本原理和知识 图1 LED共阳极原理图 1.1 LED共阴极和共阳极的含义 LED的最小单元是发光二极管。发光......
    的现象。 说明: 使用C++写单片机流水灯程序,实现的方法有很多,比如还有一些更高级的继承、多态等用法,也可以引入进来。以上只是提供一种思路,引导初学者学习C++编程。 是不是很简单,看到这里,你学废了吗? ......
    单片机控制花样流水灯原理图及程序;  AT89C51单片机流水灯c语言程序   1、首先先在proteus画出仿真图,方便仿真程序   2、下面来编写程序,先来写入头函数   3、根据......
    边人员猜测对应的HEX码,并按下对应的按键,若按下正确的按键,则LED灯闪烁,按下不正确的按键,则蜂鸣器响一下报错,程序可以一直执行到猜中停止,此时按下key4清空复位运行数据,等待......
    ();    Delay(50);  }} 编译出来的代码量相对更大: 然后,如果有开发板,直接下载即可运行LED闪烁的现象。 说明: 使用C++写单片机流水灯程序,实现的方法有很多,比如还有一些更高级的继承、多态......
    基于Keil、STM32,用C++编写流水灯程序;通常来说,在单片机上编程,要么汇编,要么C语言,而用C++进行开发的很少,那么究竟能不能用C++开发单片机呢?答案是肯定可以的,下面讲讲基于Keil......
    用c语言编写单片机流水灯程序详解;用C语言编写的单片机流水灯程序的软件和硬件,可以让八个LED轮流点亮,每个灯点亮和熄灭时间均为1秒。是利用单片机I/O口控制外部设备的简单例子。当然,在你掌握了本程序......
    硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。软件编程是单片机......
    单片机控制的LED流水灯设计;1.引言 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>