4.5while循環(huán)語(yǔ)句
在單片機(jī)C語(yǔ)言編程的時(shí)候,每個(gè)程序都會(huì)固定的加一句while(1),這條語(yǔ)句就可以起到死循環(huán)的作用。對(duì)于while語(yǔ)句來(lái)說(shuō),他的一般形式是:
while (表達(dá)式)
{
循環(huán)體語(yǔ)句;
}
在C語(yǔ)言里,通?!氨磉_(dá)式”符合條件叫做真,不符合條件,叫做假。比如前邊i<30000,當(dāng)i等于0的時(shí)候,那這個(gè)條件成立,就是真;如果i大于30000的時(shí)候,i<30000條件不成立,就叫做假。
while(表達(dá)式)這個(gè)括號(hào)里的表達(dá)式,為真的時(shí)候,就會(huì)執(zhí)行循環(huán)體語(yǔ)句,當(dāng)為假的時(shí)候,就不執(zhí)行。
還有另外一種情況,就是C語(yǔ)言里邊,除了表達(dá)式外,還有常數(shù),習(xí)慣上,把非0的常數(shù)都認(rèn)為是真,只有0認(rèn)為是假,所以程序中使用了while(1),這個(gè)數(shù)字1,可以改成2、3、4......等等都可以,都是一個(gè)死循環(huán),不停的執(zhí)行循環(huán)體的語(yǔ)句,但是如果把這個(gè)數(shù)字改成0,那么就不會(huì)執(zhí)行循環(huán)體的語(yǔ)句了。
通過(guò)學(xué)習(xí)for循環(huán)和while循環(huán),是不是會(huì)產(chǎn)生一個(gè)疑問(wèn)?為何有的循環(huán)加上{},而有的循環(huán)卻沒(méi)加呢?什么時(shí)候需要加,什么時(shí)候不需要加呢?
前邊講過(guò),在C語(yǔ)言中,分號(hào)表示語(yǔ)句的結(jié)束,而在循環(huán)語(yǔ)句里{}表示的是循環(huán)體的所有語(yǔ)句,如果不加大括號(hào),則只循環(huán)執(zhí)行一條語(yǔ)句,即第一個(gè)分號(hào)之前的語(yǔ)句,而加上大括號(hào)后,則會(huì)執(zhí)行大括號(hào)中所有的語(yǔ)句,舉個(gè)例子看一下,上節(jié)課的閃爍小燈程序如下所示。
程序(1): 程序(2):
while (1) while (1)
{ LED = 0;
LED = 0; for(i=0;i<30000;i++);
for(i=0;i<30000;i++); ? ? ? ? ? ? LED = 1;
LED = 1; for(i=0;i<30000;i++);
for(i=0;i<30000;i++);
}
程序(1)可以實(shí)現(xiàn)閃爍功能。而程序(2)沒(méi)有加大括號(hào),從語(yǔ)法上來(lái)看是沒(méi)有任何錯(cuò)誤的,寫(xiě)到Keil里編譯一下也不會(huì)報(bào)錯(cuò)。但是從邏輯上來(lái)講,程序(2)只會(huì)不停的循環(huán)“LED = 0;”這條語(yǔ)句,實(shí)際上和程序(3)效果是相同的。
程序(3):
while(1)
{
LED = 0;
}
for(i=0;i<30000;i++);
LED = 1;
for(i=0;i<30000;i++);
程序執(zhí)行到while(1)已經(jīng)進(jìn)入死循環(huán)了,所以后邊三條語(yǔ)句是一輩子也執(zhí)行不到的。因此為了防止出類似的邏輯錯(cuò)誤,推薦不管循環(huán)語(yǔ)句后邊是一條還是多條語(yǔ)句,都加上{}以防出錯(cuò)。
4.6函數(shù)的簡(jiǎn)單介紹
函數(shù)定義的一般形式如下:
函數(shù)值類型 函數(shù)名 (形式參數(shù)列表)
{
函數(shù)體
}
1、函數(shù)值類型,就是函數(shù)返回值的類型。在后邊章節(jié)的部分例程中,會(huì)有很多函數(shù)中有return x這條語(yǔ)句,這個(gè)返回值也就是函數(shù)本身的類型。還有一種情況,就是這個(gè)函數(shù)只執(zhí)行操作,不需要返回任何值,那么這個(gè)時(shí)候它的類型就是空類型void,這個(gè)void按道理來(lái)說(shuō)是可以省略的,但是一旦省略,Keil軟件會(huì)報(bào)一個(gè)警告,所以通常也不省。
2、函數(shù)名,可以由任意的字母、數(shù)字和下劃線組成,但數(shù)字不能作為開(kāi)頭。函數(shù)名不能與其他函數(shù)或者變量重名,也不能是關(guān)鍵字。什么是關(guān)鍵字呢,后邊慢慢接觸,比如char這類,都是關(guān)鍵字,是程序中具備特殊功能的標(biāo)志符,這種東西不可以命名函數(shù)。
3、形式參數(shù)列表,也叫做形參列表,這個(gè)是函數(shù)調(diào)用的時(shí)候,相互傳遞數(shù)據(jù)用的。有的函數(shù)不需要傳遞參數(shù)給它,那么可以用void來(lái)替代,void同樣可以省略,但是那個(gè)括號(hào)是不能省略的。
4、函數(shù)體,包含了聲明語(yǔ)句部分和執(zhí)行語(yǔ)句部分。聲明語(yǔ)句部分主要用于聲明函數(shù)內(nèi)部所使用的變量,執(zhí)行語(yǔ)句部分主要是一些函數(shù)需要執(zhí)行的語(yǔ)句。特別注意,所有的聲明語(yǔ)句部分必須放在執(zhí)行語(yǔ)句之前,否則編譯的時(shí)候會(huì)報(bào)錯(cuò)。
5、一個(gè)工程文件必須有且僅有一個(gè)main函數(shù),程序執(zhí)行的時(shí)候,都是從main函數(shù)開(kāi)始的。
6、關(guān)于形參和實(shí)參的概念,后邊再總結(jié),如果遇到程序里有,大家再跟著抄一段時(shí)間。先用,后講解,這樣更有利于理解。
來(lái)回顧一下閃爍LED程序中的主函數(shù),根據(jù)注釋再認(rèn)真分析一遍,是不是對(duì)函數(shù)的認(rèn)識(shí)就清楚多了。
void main() //void即函數(shù)類型
{
//以下為聲明語(yǔ)句部分
unsigned int i = 0; //定義一個(gè)無(wú)符號(hào)整型變量i,并賦初值0
//以下為執(zhí)行語(yǔ)句部分
ENLED = 0; //U3、U4兩片74HC138總使能
ADDR3 = 1; //使能U3使之正常輸出
ADDR2 = 1; //經(jīng)U3的Y6輸出開(kāi)啟三極管Q16
ADDR1 = 1;
ADDR0 = 0;
while (1)
{
LED = 0; //點(diǎn)亮小燈
for (i=0; i<30000; i++); ?//延時(shí)一段時(shí)間
LED = 1; //熄滅小燈
for (i=0; i<30000; i++); ?//延時(shí)一段時(shí)間
}
}
代碼中的“//”是注釋符,意思是說(shuō)在這之后的內(nèi)容都是注釋。注釋是給程序員自己或其他人看的,用于對(duì)程序代碼做一些補(bǔ)充說(shuō)明,對(duì)程序的編譯和執(zhí)行沒(méi)有任何影響。
審核編輯 黃宇
-
C語(yǔ)言
+關(guān)注
關(guān)注
183文章
7646瀏覽量
146194 -
流水燈
+關(guān)注
關(guān)注
21文章
436瀏覽量
62162
發(fā)布評(píng)論請(qǐng)先 登錄
GD32開(kāi)發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)篇) 第3章 GPIO流水燈的前世今生
如何使用c語(yǔ)言實(shí)現(xiàn)LED流水燈
C語(yǔ)言的基礎(chǔ)知識(shí)及流水燈的實(shí)現(xiàn)程序免費(fèi)下載
使用單片機(jī)實(shí)現(xiàn)流水燈的C語(yǔ)言程序免費(fèi)下載
使用51單片機(jī)實(shí)現(xiàn)流水燈C語(yǔ)言的程序?qū)嵗赓M(fèi)下載
使用51單片機(jī)實(shí)現(xiàn)流水燈的C語(yǔ)言程序免費(fèi)下載
使用單片機(jī)實(shí)現(xiàn)24C02存儲(chǔ)花樣流水燈的C語(yǔ)言實(shí)例免費(fèi)下載
基于AT89C51的單片機(jī)簡(jiǎn)易流水燈設(shè)計(jì)(C語(yǔ)言)
單片機(jī)實(shí)驗(yàn):使用c語(yǔ)言實(shí)現(xiàn)LED流水燈
C語(yǔ)言查詢按鍵控制8個(gè)流水燈
第4章 C語(yǔ)言基礎(chǔ)以及流水燈的實(shí)現(xiàn)(4.3 4.4)
第4章 C語(yǔ)言基礎(chǔ)以及流水燈的實(shí)現(xiàn)(4.7 4.8)
第4章 C語(yǔ)言基礎(chǔ)以及流水燈的實(shí)現(xiàn)(4.5 4.6)
評(píng)論