单片机下面程序是怎么实行LED灯闪烁的?

2024-12-20 19:14:44
推荐回答(5个)
回答1:

led的闪烁是通过一定频率的开关led实现的。如果开关频率太快,人类是看不出来是在闪烁,所以开关频率要低一些,比较高的切换频率可以用来控制led亮度(PWM),或者用来做数码管显示。
实现方式主要有两种方式:
(1)使用代码循环做为延时来控制led开关频率:
eg:
#define HIGH 1
#define LOW  0
#define LED P1.1//假设为51单片机
void delay_nms(unsigned int n_ms)
{
    while(n_ms--)
    {
        delay_1ms();//延时一毫米函数,可以根据具体单片机自己定义
    }
}

void main()
{
    for(;;)
    {
        LED = HIGH;
        delay_nms(500);
        LED = LOW;
        delay_nms(500);
    }
}

(2)使用定时器来控制led开关频率:
eg:
#define HIGH 1
#define LOW  0
#define LED P1.1
unsigned char f_500ms = 0;
void timer0() interrupt 1 //假设为10ms定时
{
    //xxxx
    f_500ms++;
}
void main()
{
    for(;;)
    {
        if(f_500ms < 100)//1秒(10ms * 50 = 1000ms = 1s)
        {
            if(f_500ms < 50)
            {
                LED = HIGH;
            }
            else
            {
                LED = LOW;
            }
        }
        else
        {
            f_500ms = 0;
        }
    }
}
两种方式都可以,但在实际使用中尽量不要使用循环延时,因为使用循环延时在延时过程中,单片机除了中断的响应,不能再做任何事情了,而使用定时器,程序只需要通过判断时间变量就可以实现同样的效果,不会占用太多时间,所以单片机能够做更多的事情,实现实时性的要求,这是嵌入式开发中需要重视的。

回答2:

  1. 原理:LED闪烁其实就是LED亮灭,要看电路,有的直接是单片机驱动的小LED,给高平亮,给低电平灭,一直给高低电平循环就表现出亮灭了。

  2. 延时:就是亮多久后灭,灭多久后亮。

  3. 实现:先给高电平,LED亮,经过延时后,再给一个低电平,LED灭,再给一个延时,如此无限循环。

回答3:

单片机通过I/O口高低电平控制LED灯闪烁
led可以正极接单片机也可以负极接单片机,中间接一个限流电阻,以负极接单片机为例:
二极管正极接电源正极,负极接单片机I/O口,程序控制单片机接led的I/O输出低电平,led就点亮,输出高电平则led两端都为高电平,led不导通熄灭,程序利用单片机定时器控制io口不断输出高低电平就可以实现LED灯闪烁,闪烁的快慢通过定时器定时的长短来控制

回答4:

这个很好理解的呀,P2.0清零--延时--置1--延时,一直循环。
换成C语言就是如下:
while(1)
{
P2^0=0;
delay();
P2^0=1;
delay();
}

回答5:

开一段时间,关一段时间就是LED闪烁;比如:
#include
#define uint unsigned int
#define uchar unsigned char
sbit LED=P1^0;

void delay(uint x )
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{

while(1)
{
LED=~LED;
delay(15);
}
}
此处是用延时使得LED闪烁;也可以用定时器,精确定时使得LED闪烁:下面是四个LED循环滚动闪烁;
#include
#define uchar unsigned char
#define uint unsigned int
sbit B1=P0^0;
sbit G1=P0^1;
sbit R1=P0^2;
sbit Y1=P0^3;
uint i,j,k;
//主程序
void main()
{
i=j=k=0;
P0=0xff;
TMOD=0x02; //定时器 0 工作方式 2
TH0=256-200; //200us 定时
TL0=256-200;
IE=0x82;
TR0=1; //启动定时器
}while(1);

//T0 中断函数
void LED_Flash_and_Scroll() interrupt 1
{
if(++k<35) return; //定时中断若干次后执行闪烁
k=0;
switch(i)
{
case 0: B1=~B1;break;
case 1: G1=~G1;break;
case 2: R1=~R1;break;
case 3: Y1=~Y1;break;
default:i=0;
}
if(++j<300) return; //每次闪烁持续一段时间
j=0;
P0=0xff;关闭显示
i++; //切换到下一个 LED
}