本文中,我們對多路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,因此這個實驗的現象與方法一是相同的。