初探C51單片機LED
本人在網上自學51單片機,僅此作為自己的筆記,供日后參考,歡迎大佬指正,
點亮第一個LED
在撰寫程式之前,應先了解單片機中LED的作業原理,如圖

LED即發光二極管,所以電流應在此圖中有右向左流動,所以只需要在VCC端提供高電平,另一端提供低電平即可,假如希望點亮D8燈,則只需要在P27端提供低電平即可,如下代碼即可點亮D8燈,
#include "reg52.h"
sbit led=P2^7;
void main()
{
while(1)
{
led=0;
}
}
在此代碼中sbit led=P2^7;表示在以后的陳述句中用led即可代表P27端,注意此處P為大寫,其中,0代表低電平,1代表高電平,即可如圖點亮

LED閃爍實驗
用延時函式即可達到LED閃爍的目的,即就是說一段時間為P21埠輸入低電平,此時燈亮,一段時間為P21埠輸入高電平,此時燈滅,代碼如下:
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit led=P2^1;
void delay(u16 i)
{
while(i--);
}
void main()
{
while(1)
{
led=1;
delay(50000);
led=0;
delay(50000);
}
}
typedef unsigned int u16;這一句代表在后續程式中可以直接用u16代表unsigned int,而u16 是無符號整形的數 ,
void delay(u16 i)代表自己寫的一個延時函式 為了延時當 i = 1 是延時 10us ,
在while后的{}中即為上文所提到的思路,利用延時函式對LED進行閃爍,
LED流水燈實驗
此實驗的思路是運用回圈左移右移函式對接在P2口上的LED依次閃爍
#include "reg52.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
#define led P2
void delay(u16 i)
{
while(i--);
}
void main()
{
u8 i=0;
led=0xfe;
delay(50000);
while(1)
{
for(i=0;i<7;i++)
{
led=_crol_(led,2);
delay(50000);
}
for(i=0;i<7;i++)
{
led=_cror_(led,2);
delay(50000);
}
}
}
#define led P2宏定義,因為LED都接在P2口上,
led=0xfe;其中0xfe從16進制轉化為2進制為1111 1110.
_crol_這是左移函式后面的小括號中led是左移的值,2是左移的位數,也就是說將我的這個代碼燒錄到單片機中即可實作每次隔一個燈閃爍,
下面視頻即為單片機LED的閃爍實驗和流水燈實驗,
C51單片機LED小實驗
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/255962.html
標籤:其他
