導(dǎo)語(yǔ)
下面是點(diǎn)亮51單片機(jī)使用C語(yǔ)言閃爍LED燈的的一段代碼,也是我們邁入C51的第一步。我們將從頭開(kāi)始,一步步講解下面的程序。
#include
#define uchar unsigned char
#define uintunsigned int
sbit LED= P1^0;
void main()
{
LED=0;
while(1)
{
LED=0;
delay(1000);
LED=1;
delay(1000);
}
}
void delay(uchar ms)
{
uint x=0, y=0;
for(x=xms;x>=0;x--)
for(y=110;y>=0;y--);
}
.C to .Hex
在從編寫(xiě)的上述文本程序到實(shí)際燒錄到單片機(jī)的Hex二進(jìn)制機(jī)器語(yǔ)言,keil這個(gè)大家伙幫我們做了很多的東西。
單片機(jī)可以看作是一個(gè)功能完全的計(jì)算機(jī),同計(jì)算機(jī)一樣,單片機(jī)只能識(shí)別機(jī)器語(yǔ)言。也就是用二進(jìn)制代碼表達(dá)指令,但更確切一點(diǎn)來(lái)說(shuō),機(jī)器語(yǔ)言是由高低電位構(gòu)成的,指定高電位為1,低電位為0,而我們對(duì)電路進(jìn)行一定的設(shè)計(jì)后,電路中高低電位的輸入輸出正好與2進(jìn)制狀態(tài)相符,所以我們也就看到了 1、0的那種表現(xiàn)形式。
同時(shí),為了簡(jiǎn)化二進(jìn)制的表現(xiàn)形式,我們使用16進(jìn)制來(lái)表示,即Hex文件。
但編寫(xiě)機(jī)器語(yǔ)言太過(guò)繁瑣,人們開(kāi)始用助記符代替機(jī)器指令的操作碼,用地址符號(hào)或標(biāo)號(hào)代替指令或操作數(shù)的地址。這就是匯編語(yǔ)言,但低級(jí),不具有移植性,能直接訪問(wèn)計(jì)算機(jī)硬件,效率高,占用資源少,學(xué)習(xí)入門(mén)較為困難,切移植性差。
C語(yǔ)言是一種高級(jí)編程語(yǔ)言,與低級(jí)語(yǔ)言相對(duì)。它是以人類(lèi)的日常語(yǔ)言為基礎(chǔ)的一種編程語(yǔ)言,使用一般人易于接受的文字來(lái)表示,有較高的可讀性,以方便對(duì)電腦認(rèn)知較淺的人亦可以大概明白其內(nèi)容。
所編寫(xiě)的C語(yǔ)言通過(guò)Keil進(jìn)行預(yù)處理,編譯,鏈接等就生成了Hex文件,我們將Hex文件燒錄到單片機(jī)中,復(fù)位就運(yùn)行起來(lái)了。
預(yù)處理
預(yù)處理以#開(kāi)頭,在從.C到 .hex之前,擴(kuò)展C語(yǔ)言程序設(shè)計(jì)的環(huán)境。
#include 的作用將 reg52.h文件復(fù)制到編譯的源文件中,使用<>或" "包含文件名。
#define uchar unsigned char的作用是將unsigned char替換為uchar。
也常用#define定義一些函數(shù)宏、常量等。如#define PI 3.14、#define ABS(x) (x)<0?-(x):(x)
還有更多的預(yù)處理方式,暫無(wú)必要,勿增新知。
變量
變量格式
[存儲(chǔ)種類(lèi)]數(shù)據(jù)類(lèi)型[存儲(chǔ)器類(lèi)型]變量名表 賦值;
其中存儲(chǔ)種類(lèi)和存儲(chǔ)器類(lèi)型在初學(xué)時(shí)不必了解,編譯器會(huì)自動(dòng)的賦予默認(rèn)值。
變量名是C51區(qū)分不同變量,為不同變量取的名稱(chēng)。在C51中規(guī)定變量名可以由字母、數(shù)字和下劃線(xiàn)三種字符組成,且第一個(gè)字母必須為字母或下劃線(xiàn)。
數(shù)據(jù)類(lèi)型用于向單片機(jī)申請(qǐng)內(nèi)存大小,也決定了變量的數(shù)值范圍。在單片機(jī)的內(nèi)部是以字節(jié)為操作,一個(gè)字節(jié)八個(gè)位,即一個(gè)字節(jié)所表示的數(shù)據(jù)范圍在 0000 0000到 1111 1111;在此,二進(jìn)制沒(méi)有符號(hào)位,于是人為的使用最高位表示符號(hào)位,1為負(fù),0為1;即表示范圍為 1111 1111到 0111 1111,即十進(jìn)制的-128到127。但大多數(shù)時(shí)候,單片機(jī)很少用到賦值,因此我們?cè)跀?shù)據(jù)類(lèi)型前加上修飾符unsigned來(lái)去掉符號(hào)位。
在C語(yǔ)言中,無(wú)法直接去操作變量中的單獨(dú)的某一位,但C51中添加了bit位,是 c51編譯器的一種擴(kuò)充數(shù)據(jù)類(lèi)型,利用它可定義一個(gè)位標(biāo)量,它的值是一個(gè)二進(jìn)制位,不是 0就是 1,sbit同樣是單片機(jī)c語(yǔ)言中的一種擴(kuò)充數(shù)據(jù)類(lèi)型,利用它能訪問(wèn)芯片內(nèi)部的 RAM中的可尋址位或特殊功能寄存器中的可尋址位。
函數(shù)
void main()和 void delay(uchar ms)都是函數(shù);
返回類(lèi)型函數(shù)名(數(shù)據(jù)類(lèi)型形參名稱(chēng)...){
功能代碼;
}
函數(shù)是指一段可以直接被另一段程序或代碼引用的程序或代碼。也叫做子程序、方法。
void表示沒(méi)有返回值,大多數(shù)的情況下,我們將使用void修飾的函數(shù),也可以使用有返回值的方式返回uint等;
其中main()是每一個(gè)函數(shù)中最重要的,單片機(jī)開(kāi)機(jī)復(fù)位后將運(yùn)行main()函數(shù),當(dāng)他執(zhí)行完后,程序?qū)?huì)從頭開(kāi)始,我們不希望這樣,因此我們添加了
while(1){
}
這時(shí)一行循環(huán)語(yǔ)句,并且是一個(gè)死循環(huán),即會(huì)一直循環(huán){ }內(nèi)的程序。
delay()是一個(gè)延時(shí)函數(shù),我們向括號(hào)中填寫(xiě)ms,程序便會(huì)贊同多少ms,他用于實(shí)現(xiàn)的延時(shí)的子功能;
運(yùn)算符
LED=0;
給led賦值0,即將右邊的值填入左邊,填入的值不應(yīng)超過(guò)數(shù)據(jù)類(lèi)型的表示范圍。
y--
運(yùn)行過(guò)后,y將減少1;
y>=0
布爾運(yùn)算,只有兩個(gè)值,0或 1,大于0為真1,反之為0。
-
led
+關(guān)注
關(guān)注
242文章
23813瀏覽量
673229 -
51單片機(jī)
+關(guān)注
關(guān)注
277文章
5710瀏覽量
127200 -
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7631瀏覽量
141354
發(fā)布評(píng)論請(qǐng)先 登錄
使用51單片機(jī)點(diǎn)亮LED的程序免費(fèi)下載

51單片機(jī)的兩種方法點(diǎn)亮LED的C語(yǔ)言程序免費(fèi)下載

使用51單片機(jī)閃爍LED燈的代碼免費(fèi)下載

使用單片機(jī)實(shí)現(xiàn)不同頻率閃爍1個(gè)LED燈的C語(yǔ)言程序?qū)嵗赓M(fèi)下載

使用單片機(jī)實(shí)現(xiàn)不同頻率閃爍多個(gè)LED燈的C語(yǔ)言程序?qū)嵗赓M(fèi)下載

使用單片機(jī)點(diǎn)亮多個(gè)LED燈的方法C語(yǔ)言程序?qū)嵗赓M(fèi)下載
單片機(jī)led燈閃爍實(shí)驗(yàn)總結(jié)_單片機(jī)學(xué)習(xí)之C語(yǔ)言點(diǎn)亮控制led燈

51單片機(jī)如何跳出wile循環(huán)_51單片機(jī)閃爍LED燈

51單片機(jī) LED點(diǎn)亮、閃爍以及流水燈實(shí)現(xiàn)

51單片機(jī)——點(diǎn)亮一個(gè)LED燈

評(píng)論