成人app

首頁  /  單片機教程  /  閃爍的LED  /  

閃爍的LED

點擊打開在線編譯器,邊學邊練

延時是單片機入門必學的應用!


1.序

上一講我們已經實現點亮一盞燈,但是很多時候程序的執行都是要死循環的,不能讓程序像是停在那里不執行了。所以這一講在前面的原理圖基礎上實現讓LED2從點亮一段時間到熄滅一段時間再點亮一段時間如此循環下去,實現閃爍LED2的功能。


2.代碼普及

我們知道CPU執行一條語句是很快的,如果我們這樣寫程序來實現燈的閃爍:

#include <reg52.h> 
sbit LED2  = P0^0;
sbit ADDR2 = P1^2;
sbit ADDR1 = P1^1;
sbit ADDR0 = P1^0;
sbit ENLED = P1^4;
sbit ADDR3 = P1^3;
   
void main()
{  
    ADDR3 = 1;//使能三八譯碼器
    ENLED = 0;// 

    ADDR2 = 1;//**************************
    ADDR1 = 1;//讓三八譯碼器的IO6輸出低電平
    ADDR0 = 0;//**************************

    while (1)
    {
        LED2=0;//點亮最右端的燈
        LED2=1;//熄滅最右端的燈
    }
}

成人app那我們看到的現象就是燈一直亮著,不會閃爍。原因就是執行“LED2=0;”把燈點亮之后執行“LED2=1;”去熄滅,但是這個熄滅語句只持續一瞬間就循環又開始執行“LED2=0;”了,熄滅狀態的持續時間太短我們人眼也就觀察不到閃爍的現象。

 

3.延時語句

成人app要想實現LED2閃爍,必須讓LED2被點亮持續一段時間,被熄滅持續一段時間,也就是IO端口保持低電平一段時間,接著跳變保持高電平一段時間,此時我們需要用上延時。

#include <reg52.h> 
sbit LED2  = P0^0;
sbit ADDR2 = P1^2;
sbit ADDR1 = P1^1;
sbit ADDR0 = P1^0;
sbit ENLED = P1^4;
sbit ADDR3 = P1^3;
  
void main()
{  
    unsigned int i;//定義一個16位無符號整形變量  
    ADDR3 = 1;//使能三八譯碼器
    ENLED = 0;// 
   
    ADDR2 = 1;//**************************
    ADDR1 = 1;//讓三八譯碼器的IO6輸出低電平
    ADDR0 = 0;//**************************
   
    while (1)
    {
        LED2=0;//點亮最右端的燈
        for(i=0;i<30000;i++);//延時一段時間
        LED2=1;//熄滅最右端的燈
        for(i=0;i<30000;i++);//延時一段時間
    }
}

“for(i=0;i<30000;i++);”其實就是CPU空運行讓i不斷相加到30000之后不滿足“i<30000”的判斷條件就結束這條運行代碼,接著去執行下一條語句了,通過占用CPU的執行時間來達到短暫的電平保持狀態,也就能讓LED2亮一小段時間,接著又滅一小段時間,這樣LED2在while(1)的死循環下就實現不停循環的亮滅閃爍了。


4.補充

對剛入門單片機編程的初學者來說,以前我們C語言基礎上機操作的時候都是只見過別人int,char的去定義變量,而在單片機入門編程中看到的都是unsigned int,unsigned char這樣定義,原因是單片機在入門的時候用的變量的取值都是0和正整數(正整數不包括0),所以才會用unsigned去定義無符號整形變量。


本文固定URL:http://hnsaiyang.com/course/180

上一課:點亮LED 下一課:軟件調試查看運行時間
第一章 單片機入門
第二章 LED
第三章 蜂鳴器
第四章 數碼管
第五章 獨立按鍵
第六章 多文件編程
第七章 外部中斷
第八章 定時器
第九章 舵機與超聲波模塊
第十章 串口通信
第十一章 1602液晶屏
第十二章 IIC通信
第十三章 紅外遙控與溫度傳感器
第十四章 AD與DA
第十五章 混合例程
第十六章 完結
Dotcpp在線編譯      (登錄可減少運行等待時間)