51微控制器之點亮乙個燈

2021-10-06 07:46:13 字數 3697 閱讀 1931

接下來的學習將主要轉為使用keil程式設計,並使用proteus進行**,推薦有條件的同學可以購買乙個板子進行實物的練習

發光二極體常用來指示系統工作狀態,製作節日彩燈、廣告牌匾等。大部分發光二極體工作電流1到5ma之間,其內阻為20到100ω。電流越大,亮度也越高。為保證發光二極體正常工作,同時減少功耗,限流電阻選擇十分重要,若供電電壓為+5v,則限流電阻可選1~3kω。

前面文章講到,p0口作通用i/o用,由於漏極開路,需外接上拉電阻。而p1~p3口內部有30kω左右上拉電阻。

發光二極體兩個管腳分為陰極和陽極,哪個管腳接微控制器便是個選擇,兩種接法是否相同?下圖為兩種接法,其中(a)為拉電流,(b)為灌電流:

當p0口某位為高電平時,可提供400µa的拉電流;當p0口某位為低電平(0.45v)時,可提供3.2ma的灌電流,而p1~p3口內有30kω左右上拉電阻,如高電平輸出,則從p1、p2和p3口輸出的拉電流id僅幾百µa,驅動能力較弱,亮度較差,見(a)。

如埠引腳為低電平,能使灌電流id從微控制器外部流入內部,則將大大增加流過的灌電流值,見(b)。at89s51任一埠要想獲得較大的驅動能力,要用低電平輸出。如一定要高電平驅動,可在微控制器與發光二極體間加驅動電路,如74ls04、74ls244等。

單燈練習

【例1】 利用at89c51微控制器點亮燈led,燈led接微控制器p1.0引腳上,編寫程式使led點亮。

流水燈練習一組燈並且在控制系統的控制下按照設定的順序和時間來發亮和熄滅。來形成一定的視覺效果,常安裝於店面和招牌上。要想實現流水燈,必須要進行延時操作,編寫延時程式或延時子函式程式,由本人之前的文章c51語言,for迴圈可以實現一段時間的空操作,我們就用for迴圈來編寫一段延時程式。

void

delay

(void

)//延時1ms 晶振12mhz

void

delay()

//延時1s 晶振11.0592mhz

#define uint unsigned int        

//巨集定義uint 為unsigned int

void

delayms

(uint xms)

//可變的延時時長的子程式,單位1ms

由此可以看出,使用for迴圈編寫延時程式時,需要不同的變數值來除錯出一段延時時間,延時時間並不精準。較為精準的定時器延時將在後文講到。

【例2】 製作流水燈,8個發光二極體led0~led7經限流電阻分別接至p1口的p1.0~p1.7引腳上,陽極共同接高電平。編寫程式來控制發光二極體由上至下的反覆迴圈流水點亮,每次點亮乙個發光二極體,時間間隔1s。

#include

#define uint unsigned int

//巨集定義

void

delayms

(uint xms)

;//函式宣告

void

main()

}void

delayms

(uint xms)

#include

#define uint unsigned int

sbit led0=p1^0;

sbit led1=p1^1;

sbit led2=p1^2;

sbit led3=p1^3;

sbit led4=p1^4;

sbit led5=p1^5;

sbit led6=p1^6;

sbit led7=p1^7;

void

delayms

(uint xms)

;void

main()

}void

delayms

(uint xms)

#include

#define uint unsigned int

#define uchar unsigned char

void

delayms

(uint xms)

;//函式宣告

unsigned

char table=

;//建立陣列

void

main()

}}void

delayms

(uint xms)

#include

#include

//包含移位函式_crol_( )的標頭檔案

#define uint unsigned int

#define uchar unsigned char

void

delayms

(uint xms)

;//函式宣告

void

main()

//主程式

}void

delayms

(uint xms)

//延時函式

#include

#define uint unsigned int

#define uchar unsigned char

void

delayms

(uint xms)

;//函式宣告

void

main()

//主函式

/* temp=0x80; //賦右移初值給temp,從高位到低位點亮

for(i=0; i<8; i++)

*/}}

void

delayms

(uint xms)

//延時函式

交通燈練習【例3】東西方向綠燈先亮27s後黃燈亮3s,期間南北方向紅燈同時亮30s;然後南北方向綠燈先亮27s後黃燈亮3s,期間東西方向紅燈同時亮30s;然後東西方向,如此反覆。

51微控制器點亮乙個led燈

51微控制器是很多小白入門嵌入式的一款微控制器,雖然51實際工作中用得不多,但是作為入門學習的一款微控制器卻是非常值得推薦的。畢竟一開始學的時候,作為我們這種普普通通的學習能力而言的小白,最好是簡單易學,可以快速的看到學習的成果,那是最可以激勵我們學習下去的動力和興趣。簡單學習51微控制器後,可以參...

STC微控制器點亮乙個LED燈

led,發光二極體,是一種半導體固體發光器件。如圖 led的符號為 led的工作是有方向性的,只有當正級接到led陽極 負極接到led的陰極 的時候才能工作,如果反接led是不能正常工作的。led的原理 析 一共有八個led燈d1 d8,開發板上面led的原理圖如上圖,led的陽極串聯乙個電阻,然後...

金沙灘51微控制器點亮乙個LED燈

我用的開發板型號是金沙灘51微控制器 ide是keil4,普通的c語言環境。include 包含特殊功能暫存器定義的標頭檔案 sbit led p0 0 sbit addr0 p1 0 sbit addr1 p1 1 sbit addr2 p1 2 sbit addr3 p1 3 sbit enle...