1. 程式人生 > >51單片機led燈控制

51單片機led燈控制

ID char 跑馬燈 .com ima code png img while

關於內容理解:

先讀懂51單片機的實驗原理圖,然後再著手編程。

技術分享圖片

由圖可知

1,led燈接的是單片機的P0口,意味著我們只能用P0口來編程。

2,led燈是共陽極,當給低電平時led燈才會亮,(單片機灌電流能力較強,輸出電流較弱,所以一般用共陽極)

3,led所在的P0口是讀io口,故使用時用一個變量來做中介

實驗效果

實現跑馬燈效果,P0^0->P0^7口依次亮且每次只亮一個燈,然後P0^7->P0^0。

實驗代碼

#include <reg52.h>      //此文件中定義了51的一些特殊功能寄存器
#include <intrins.h>

//--聲明全局函數--//
void
Delay10ms(unsigned int c); //延時10ms void main() { unsigned char i; unsigned char LED; //--首先賦值LED--// LED = 0xFE; while (1) { //--LED往左閃爍--// for (i = 0 ;i < 7 ; i++) { //--將LED 的值賦給P2口--// P0 = LED; Delay10ms(
50); //延時一下,為了讓燈有持續點亮的時間 LED = LED << 1; // 將LED裏面的值左移一位,然後重新賦給LED LED = LED | 0x01; // 移位後,前面的位為高電平 } //--LED向右顯示--// for (i = 0 ;i < 7 ; i++) { P0 = LED; Delay10ms(50); LED
= LED >> 1; // 右移 LED = LED | 0x80; // 移位後,後面的位為高電平 } } } void Delay10ms(unsigned int c) //誤差 0us { unsigned char a, b; //--c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不用賦值了--// for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } }

擴展:實現流水燈

一次點亮P0^0->P0^7

#include <reg52.h>      //此文件中定義了51的一些特殊功能寄存器
#include <intrins.h>

//--聲明全局函數--//
void Delay10ms(unsigned int c);   //延時10ms        

void main()
{
        unsigned char i;
               unsigned char LED;
      //--首先賦值LED--//
        

    while (1) 
    {     
         LED = 0xFE;     
        //--LED往左閃爍--//   
        for (i = 0 ;i < 8 ; i++)
        { 
            //--將LED 的值賦給P2口--//
            P0  = LED;
    
            Delay10ms(50);         //延時一下,為了讓燈有持續點亮的時間
    
            LED = LED << 1;         // 將LED裏面的值左移一位,然後重新賦給LED
    
        //    LED = LED | 0x01;     // 移位後,前面的位為高電平
        }
        
        //--LED向右顯示--//
        LED = 0x7F;     

        for (i = 0 ;i < 8 ; i++)
        {        
            P0  = LED;

            Delay10ms(50);

            LED = LED >> 1;     // 右移

        //    LED = LED | 0x80;     // 移位後,後面的位為高電平        
        }
        
    }
}

void Delay10ms(unsigned int c)   //誤差 0us
{
    unsigned char a, b;

    //--c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不用賦值了--//
    for (;c>0;c--)
    {
        for (b=38;b>0;b--)
        {
            for (a=130;a>0;a--);
        }
           
    }       
}

51單片機led燈控制