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

单片机下面程序是怎么实行LED灯闪烁的,第1张

led的闪烁是通过一定频率的开关led实现的。如果开关频率太快,人类是看不出来是在闪烁,所以开关频率要低一些,比较高的切换频率可以用来控制led亮度(PWM),或者用来做数码管显示。

实现方式主要有两种方式:

(1)使用代码循环做为延时来控制led开关频率:

eg:

#define HIGH 1

#define LOW  0

#define LED P11//假设为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 P11

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;

        }

    }

}

两种方式都可以,但在实际使用中尽量不要使用循环延时,因为使用循环延时在延时过程中,单片机除了中断的响应,不能再做任何事情了,而使用定时器,程序只需要通过判断时间变量就可以实现同样的效果,不会占用太多时间,所以单片机能够做更多的事情,实现实时性的要求,这是嵌入式开发中需要重视的。

# include <reg52h>

unsigned int i = 0;

sbit led = P1^0;

void main(void)

{

    TMOD = 0x10;

    TH1 = 0x0FC;  //@12MHz  1ms

    TL1 = 0x18;

    EA = 1;

    ET1 = 1;

    TR1 = 1;

while(1)

{

}

}

void Timer1Interrupt(void) interrupt 3

{

    TH1 = 0x0FC;

    TL1 = 0x18;

    

i++;

if (i >= 50)

{

i = 0;

led = ~led;

}

}

#include <STC12C52H>

#define uchar unsigned char

#define uint unsigned int

sbit key=P1^2;

sbit p1_6=P1^6;

void delay(uchar delay_time)

{

uchar n;

uint m;

for (n=0;n<delay_time;n++)

{

for(m=0;m<10000;m++);

}

}

void keyscan()

{

if(key==0)

{

delay(5);

if(key==0)

while(!key)

{

p1_6 = 0;

delay(20);

p1_6 = 1;

delay(20);

}

}

}

void main()

{

WDT_CONTR = 0x3C;

while(1)

{

keyscan();

WDT_CONTR = 0x3C;

}

}

这个功能可以用中断来实现,当然,现在我写的这个也可以实现。由于你用的晶振频率不知道,所以你自己修改一下延时时间,再把头文件改一下,就可以了,我试验了,可以实现改功能。

以上就是关于单片机下面程序是怎么实行LED灯闪烁的全部的内容,包括:单片机下面程序是怎么实行LED灯闪烁的、AT89S51单片机,编写程序,用定时计数器1控制LED以10HZ的频率闪烁,求程序、用单片机C语言怎么写用状态机实现按键控制LED灯闪烁这个程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9324735.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存