51單片機(六)—— GPIO控制多路LED

        本文中,我們對多路LED進行控制,硬件電路如下圖所示

在《51單片機(五)—— GPIO點亮一個LED》中,已經對這個電路做了詳細介紹,這裏不再詳述。

在這個實驗中,我們採用兩種方法對多路LED進行控制,實驗是需要把J21接口的8個引腳與單片機的P0口的8個引腳分別連接在一起。

方法一:

實現代碼如下所示

#include<reg52.h> //包含頭文件,一般情況不需要改動,

sbit LED1=P0^0;  //用sbit關鍵字 定義LED1到P00端口,
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
sbit LED5=P0^4;
sbit LED6=P0^5;
sbit LED7=P0^6;
sbit LED8=P0^7;

void main (void)
{
	LED1=0;   //將P00口賦值0,對外輸出低電平
	LED2=0;
	LED3=1;   //將P02口賦值1,對外輸出高電平
	LED4=1;
	LED5=1;
	LED6=1;
	LED7=0;
	LED8=0;
	
	for(;;);        //死循環,原地等待。
}

將這個例程的hex文件燒寫到單片機中,可以看到8個LED,4個點亮,4個不亮。

        這個實驗使用了位操作,不過是針對多個位的定義和操作。由於對八個LED都進行了操作,所以定義了8個LED的宏定義。程序中顯得稍微有點亂,如果燈的數量增加則程序會更亂,下面我們就來介紹一個比較簡單的方法。

方法二:

實現代碼如下所示

#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

#define LED  P0    //宏定義關鍵字,定義LED到單片機的P0口
                   //LED是自己定義的任意符號

void main (void)
{
	LED=0x3c;         //將P0口賦值0x3c,
	                  //0x3c轉換爲二進制爲 0011 1100。
	for(;;);          //死循環,原地等待
}

       從程序中的代碼比方法一精煉了很多。這個實驗中給P0口賦值0x3c,轉換成二進制爲0011 1100,因此這個實驗的現象與方法一是相同的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章