智能小車C語(yǔ)言程序控制 課件 秦磊 第1-5章 初始智能小車 - 制作模擬交通燈_第1頁(yè)
智能小車C語(yǔ)言程序控制 課件 秦磊 第1-5章 初始智能小車 - 制作模擬交通燈_第2頁(yè)
智能小車C語(yǔ)言程序控制 課件 秦磊 第1-5章 初始智能小車 - 制作模擬交通燈_第3頁(yè)
智能小車C語(yǔ)言程序控制 課件 秦磊 第1-5章 初始智能小車 - 制作模擬交通燈_第4頁(yè)
智能小車C語(yǔ)言程序控制 課件 秦磊 第1-5章 初始智能小車 - 制作模擬交通燈_第5頁(yè)
已閱讀5頁(yè),還剩200頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

智能小車C語(yǔ)言程序控制

第一章:初識(shí)智能小車1.1PARTONE智能小車簡(jiǎn)介隨著現(xiàn)代科學(xué)技術(shù)的快速發(fā)展,智能機(jī)器人已被廣泛應(yīng)用于人類社會(huì)的各個(gè)領(lǐng)域,如生產(chǎn)制造、物流倉(cāng)儲(chǔ)、軌道交通、工程機(jī)械、醫(yī)療手術(shù)等。

智能小車,也稱輪式機(jī)器人,是一種以汽車電子為基礎(chǔ),涵蓋智能控制、模式識(shí)別、傳感技術(shù)、計(jì)算機(jī)、機(jī)械等多學(xué)科知識(shí)的科技產(chǎn)品。它一般由信息采集、循跡識(shí)別及避障等模塊組成。從生產(chǎn)制造業(yè)的無(wú)人搬運(yùn)車,到特種行業(yè)的災(zāi)難救援、拆彈機(jī)器人,再到軍事領(lǐng)域的防御和偵察機(jī)器人,以及航天領(lǐng)域的星球表面探測(cè)器,處處可見智能小車的身影。尤其是在危險(xiǎn)和未知的環(huán)境下,智能小車的優(yōu)勢(shì)更為明顯。基于Arduino平臺(tái)的智能小車如圖所示。1.1智能小車簡(jiǎn)介1.2PARTTWO智能小車的基本結(jié)構(gòu)前言智能小車能夠按照預(yù)先設(shè)定的模式自動(dòng)運(yùn)行,不需要人為管理,可應(yīng)用于科學(xué)勘探、無(wú)人駕駛等領(lǐng)域。智能小車能夠?qū)崟r(shí)顯示時(shí)間、速度、里程,具有自動(dòng)循跡、尋光、避障功能,可實(shí)現(xiàn)控制行駛速度、準(zhǔn)確定位停車、遠(yuǎn)程傳輸圖像等功能。一般來(lái)說(shuō),智能小車可以分為傳感器部分、控制器部分、執(zhí)行器部分和其他部分。1.2.1傳感器部分1.金屬傳感器通常選用電感式金屬接近開關(guān)傳感器,用于檢測(cè)金屬物質(zhì)的存在。當(dāng)靠近金屬物質(zhì)時(shí),開關(guān)打開;當(dāng)遠(yuǎn)離金屬物質(zhì)時(shí),開關(guān)關(guān)閉。在智能小車行進(jìn)的過(guò)程中,可在賽道的固定位置放置鐵片,利用智能小車的金屬傳感器來(lái)實(shí)現(xiàn)對(duì)賽道特定位置的檢測(cè)。金屬傳感器實(shí)物圖如圖所示。1.2.1傳感器部分2.霍爾傳感器霍爾傳感器是一種磁敏傳感器,利用霍爾效應(yīng)來(lái)檢測(cè)磁感應(yīng)信號(hào)并轉(zhuǎn)換成數(shù)字量,然后傳輸給控制器,從而實(shí)現(xiàn)對(duì)智能小車行駛速度的監(jiān)測(cè)。具體操作方法是在智能小車電機(jī)的旋轉(zhuǎn)部位安裝一個(gè)導(dǎo)磁性能好的磁鋼,電機(jī)每旋轉(zhuǎn)一圈,磁鋼便接觸一次霍爾傳感器,即發(fā)送一個(gè)磁感應(yīng)信號(hào),霍爾傳感器電路以此進(jìn)行計(jì)數(shù)操作,通過(guò)一定的數(shù)據(jù)轉(zhuǎn)換后得到小車的行駛速度或行駛里程。霍爾傳感器實(shí)物圖如圖所示。1.2.1傳感器部分3.紅外傳感器紅外傳感器是紅外發(fā)射和紅外接收一體式傳感器,根據(jù)不同顏色對(duì)紅外線反射程度不同(黑色反射紅外線較少,白色反射紅外線較多),傳輸不同的信號(hào)給控制器,從而控制智能小車電機(jī)的旋轉(zhuǎn)方向,實(shí)現(xiàn)循跡功能。具體操作方法是將兩個(gè)紅外傳感器安裝在貼近地面的智能小車底盤前側(cè),若賽道鋪設(shè)的是白底黑線,則正常行駛時(shí),發(fā)射管發(fā)射的紅外線被黑線吸收,導(dǎo)致接收管無(wú)法接收到紅外線,傳感器傳輸?shù)碗娖浇o控制器;偏離軌道時(shí),發(fā)射管發(fā)射的紅外線被白色地面反射,接收管正常接收紅外線,傳感器傳輸高電平給控制器,以此來(lái)控制智能小車正常循跡行駛。紅外傳感器實(shí)物圖如圖所示。1.2.1傳感器部分4.超聲波避障傳感器這種傳感器利用超聲波測(cè)距的非接觸式測(cè)量方法,根據(jù)超聲波在物體表面會(huì)顯著反射成回波的特性,來(lái)測(cè)量智能小車與障礙物之間的距離,從而實(shí)現(xiàn)智能小車的避障功能。超聲波避障傳感器實(shí)物圖如圖所示。1.2.1傳感器部分5.火焰?zhèn)鞲衅鞲鶕?jù)紅外線對(duì)火焰的敏感性,利用特殊手段制成的紅外線接收管可作為智能小車的火焰?zhèn)鞲衅?。火焰?zhèn)鞲衅骰诓煌幕鹧媪炼认蚩刂破鱾鬏敻?低電平信號(hào),控制器據(jù)此判斷是否發(fā)現(xiàn)火源,再根據(jù)具體情況進(jìn)行滅火操作?;鹧?zhèn)鞲衅飨喈?dāng)于智能小車的眼睛,可發(fā)現(xiàn)危險(xiǎn)情況并進(jìn)行處理?;鹧?zhèn)鞲衅鲗?shí)物圖如圖所示。1.2.2

控制器部分本項(xiàng)目中控制器選用了Arduino單片機(jī)平臺(tái),其開發(fā)簡(jiǎn)單,便捷靈活,操作簡(jiǎn)便,能跨平臺(tái)使用,軟硬件開源可擴(kuò)展,非常適合初學(xué)者和業(yè)余愛好者們使用。智能小車通過(guò)各類傳感器來(lái)采集相關(guān)信息,將信息傳送到控制器Arduino單片機(jī)處理相關(guān)數(shù)據(jù),然后發(fā)送相關(guān)指令控制執(zhí)行器進(jìn)行相應(yīng)動(dòng)作。接下來(lái)我們來(lái)介紹一下Arduino的相關(guān)內(nèi)容:1.2.2

控制器部分(1)認(rèn)識(shí)ArduinoArduino意為“強(qiáng)壯的朋友”,是一種便捷靈活、易于上手的開放源碼的電子原型平臺(tái),最初是專為沒有編程基礎(chǔ)的設(shè)計(jì)師、工藝美術(shù)人員、業(yè)余愛好者和對(duì)開發(fā)互動(dòng)裝置或互動(dòng)式開發(fā)環(huán)境感興趣的人而設(shè)計(jì)的。設(shè)計(jì)者的初衷是完成一個(gè)廉價(jià)好用的微控制器開發(fā)板,普通人也能利用Arduino開發(fā)板做出實(shí)用有趣的東西。隨著Arduino的廣泛應(yīng)用,世界上的各大生產(chǎn)商也在生產(chǎn)和銷售與Arduino兼容的電路板和擴(kuò)展板。所以,Arduino是一個(gè)完全開源的兼有軟件和硬件兩方面的電子開發(fā)平臺(tái),具有互助和奉獻(xiàn)的開源精神以及團(tuán)隊(duì)力量。1.2.2

控制器部分(2)Arduino特點(diǎn)1)開放源代碼的電路圖設(shè)計(jì),程序開發(fā)接口可免費(fèi)下載,也可依需求自己修改。2)可以采用USB接口供電,也可以外部供電,雙向選擇。3)Arduino支持ISP在線燒寫,可以將新的“Bootloader”固件燒入ATmega168或ATmega328芯片。有了Bootloader之后,可以通過(guò)USB更新程序。4)可依據(jù)官方提供的Eagel格式PCB和SCH電路圖,簡(jiǎn)化Arduino模組,完成獨(dú)立運(yùn)作的微處理控制板。也可簡(jiǎn)單地與傳感器,各式各樣的電子元件連接(紅外線、超音波、熱敏電阻、光敏電阻、伺服舵機(jī)等)。5)支持多種互動(dòng)程序,如:Flash、Max/Msp、VVVV、C、Processing…….等。6)應(yīng)用方面,利用Arduino可突破以往只能使用鼠標(biāo)、鍵盤,CCD等輸入裝置的互動(dòng)內(nèi)容,可以更簡(jiǎn)單地達(dá)成單人或多人游戲互動(dòng)。1.2.2

控制器部分(3)Arduino的開發(fā)過(guò)程Arduino是一個(gè)基于微控制器的開發(fā)板,通過(guò)與計(jì)算機(jī)相連來(lái)實(shí)現(xiàn)各種功能。Arduino的開發(fā)過(guò)程是:根據(jù)功能設(shè)置設(shè)計(jì)電路并進(jìn)行連接;根據(jù)用戶需求完成程序設(shè)計(jì);將編譯好的程序下載到硬件開發(fā)板上進(jìn)行功能驗(yàn)證;不斷調(diào)試以達(dá)到預(yù)期效果。1.2.2

控制器部分(4)Arduino的硬件組成Arduino有各種各樣的開發(fā)板,最為常用的就是ArduinoUNO。ArduinoUNO的處理器核心是ATmega328,同時(shí)具有14路數(shù)字輸入/輸出口(如圖所示的數(shù)字口0~13,其中6路可作為脈沖寬度調(diào)制PWM輸出),6路模擬輸入(如圖所示的模擬口0~5),ArduinoUNO開發(fā)板的詳細(xì)功能介紹如圖所示。1.2.2

控制器部分(4)Arduino的硬件組成除了最重要的I/O口外,ArduinoUNO還有一個(gè)16MHz的晶體振蕩器,一個(gè)USB口,一個(gè)電源插座,一個(gè)ICSPheader和一個(gè)復(fù)位按鈕。UNO可以通過(guò)兩種方式供電方式,一種通過(guò)USB供電,另一種是通過(guò)外接6~12V的DC電源。除此之外,還有4個(gè)LED燈和復(fù)位按鍵。其中,ON是電源指示燈,通電就會(huì)亮了,L是接在數(shù)字口13上的一個(gè)LED燈,而TX、RX是串口通訊指示燈,比如在下載程序的過(guò)程中,這兩個(gè)燈就會(huì)不停閃爍。處

器工作電壓輸入電壓數(shù)字輸入/輸出接口模擬輸入接口串口ATmega3285V6~20V14個(gè)6個(gè)1個(gè)I/O引腳直流電流3.3V引腳直流電流程序存儲(chǔ)器SRAMEEPROM工作時(shí)鐘40mA50mA32KB2KB1KB16MHz表2-1-1ArduinoUNO開發(fā)板的基本構(gòu)成1.2.3

執(zhí)行器部分1.驅(qū)動(dòng)模塊采用H橋電路驅(qū)動(dòng)兩個(gè)直流電機(jī),作為智能小車的動(dòng)力源,通過(guò)控制器發(fā)出的控制指令來(lái)指揮電機(jī)正常運(yùn)轉(zhuǎn)。直流電機(jī)實(shí)物圖如圖所示。2.舵機(jī)轉(zhuǎn)向模塊通過(guò)設(shè)置一定占空比的方波來(lái)控制舵機(jī)轉(zhuǎn)過(guò)的角度,舵機(jī)具有力矩大、響應(yīng)速度快等優(yōu)點(diǎn),經(jīng)常被用在智能小車轉(zhuǎn)向裝置中。舵機(jī)轉(zhuǎn)向模塊實(shí)物圖如圖所示。1.2.4

其他部分1.三輪運(yùn)動(dòng)模塊該模塊由兩個(gè)橡膠輪胎和一個(gè)萬(wàn)向輪組成。三輪運(yùn)動(dòng)模塊如圖1所示,橡膠輪胎實(shí)物圖如圖2所示,萬(wàn)向輪實(shí)物圖如圖3所示。圖1三輪運(yùn)動(dòng)模塊圖2橡膠輪胎圖3萬(wàn)向輪1.2.4

其他部分2.藍(lán)牙模塊在智能小車上安裝藍(lán)牙模塊,通過(guò)藍(lán)牙模塊與智能手機(jī)相連,進(jìn)行信息傳輸與處理控制。藍(lán)牙模塊實(shí)物圖如圖所示。3.電源模塊設(shè)置獨(dú)立的電源模塊為智能小車供電。4.小車底盤在小車底盤上為上述硬件預(yù)留合適的安裝位置,將以上硬件有序地安裝在小車底盤上。小車底盤實(shí)物圖如圖所示。1.3PARTTHREE智能小車的工作原理1.3.1電機(jī)驅(qū)動(dòng)與調(diào)速原理電機(jī)

電機(jī)是將電能轉(zhuǎn)換成機(jī)械能的一種設(shè)備,主要用作機(jī)械設(shè)備的動(dòng)力源,在電路中用“M”來(lái)表示。電機(jī)實(shí)物圖如圖所示。2.舵機(jī)轉(zhuǎn)向模塊

如圖所示,一個(gè)典型的H橋電路由四個(gè)三極管和一個(gè)電機(jī)組成。要實(shí)現(xiàn)電機(jī)轉(zhuǎn)動(dòng),需要使電路中對(duì)角線上的兩個(gè)三極管導(dǎo)通,根據(jù)不同三極管對(duì)的導(dǎo)通情況,電流可以從左至右或者從右至左流過(guò)電機(jī),從而控制電機(jī)的旋轉(zhuǎn)方向。當(dāng)Q2和Q3導(dǎo)通時(shí),電流就從電源正極經(jīng)Q3從右至左流過(guò)電機(jī),再經(jīng)Q2到達(dá)電源負(fù)極,該流向的電流將驅(qū)動(dòng)電機(jī)逆時(shí)針轉(zhuǎn)動(dòng)。1.3.1電機(jī)驅(qū)動(dòng)與調(diào)速原理3.PWM調(diào)速原理脈沖寬度調(diào)制,簡(jiǎn)稱脈寬調(diào)制,是指通過(guò)控制輸出的脈沖寬度來(lái)對(duì)模擬電路進(jìn)行控制。PWM有頻率、占空比、周期三個(gè)參數(shù)。(1)頻率是指每秒鐘信號(hào)在高、低電平之間切換的次數(shù)。(2)周期是指一個(gè)完整的PWM信號(hào)持續(xù)的時(shí)間。(3)占空比是指在PWM的輸出信號(hào)中,高電平所占有的時(shí)間與該信號(hào)周期的比值。在PWM方法中,電源以一定頻率的方波脈沖向電機(jī)提供電能,通過(guò)給方波脈沖設(shè)置不同的占空比來(lái)改變電機(jī)兩端的電壓大小,進(jìn)而改變電機(jī)的轉(zhuǎn)速。因此,直流電機(jī)正轉(zhuǎn)、反轉(zhuǎn)、加速、減速的智能控制,由PWM控制系統(tǒng)來(lái)實(shí)現(xiàn)。1.3.2循跡原理餐廳服務(wù)機(jī)器人、倉(cāng)庫(kù)搬運(yùn)機(jī)器人等是沿著預(yù)設(shè)的線路行進(jìn)的,即能夠?qū)崿F(xiàn)自動(dòng)循跡。餐廳服務(wù)機(jī)器人如圖1所示,倉(cāng)庫(kù)搬運(yùn)機(jī)器人如圖2所示。圖1餐廳服務(wù)機(jī)器人圖2倉(cāng)庫(kù)搬運(yùn)機(jī)器人1.3.2循跡原理智能小車也能實(shí)現(xiàn)自動(dòng)循跡。例如,可以利用白色KT板作為底板鋪設(shè)賽道,在板上貼上黑線來(lái)標(biāo)示智能小車的行進(jìn)路線,使智能小車沿著黑線完成直行、轉(zhuǎn)彎、交叉行進(jìn)等動(dòng)作。要使智能小車能夠自動(dòng)沿著黑線走,那么首先要知道黑線的具體位置,這就需要用到傳感器,此時(shí)的傳感器相當(dāng)于智能小車的“眼睛”,用來(lái)識(shí)別黑線。在智能小車行駛過(guò)程中,為了讓智能小車沿著預(yù)設(shè)的路線行走,需要不斷調(diào)整智能小車的行進(jìn)方向??梢岳貌煌伾珜?duì)紅外線的反射能力不同,傳輸不同的信號(hào)給控制器,從而控制電機(jī)的旋轉(zhuǎn)方向,改變小車的行進(jìn)方向。1.3.2循跡原理紅外傳感器是發(fā)射管與接收管一體式傳感器。在智能小車前方底盤貼近地面的兩側(cè)安裝兩個(gè)紅外傳感器。智能小車沿著黑線正常行駛時(shí),兩個(gè)紅外傳感器檢測(cè)到白色地面,發(fā)射管發(fā)出的紅外線經(jīng)白色地面反射后被接收管接收,傳感器電路產(chǎn)生高電平傳輸給控制器;當(dāng)智能小車偏離軌道時(shí),紅外線被黑線吸收,接收管接收不到紅外線,傳感器電路產(chǎn)生低電平并反饋給控制器。這樣,控制器就能根據(jù)收到的信號(hào),控制智能小車沿著正確的路線行駛。紅外傳感器模塊實(shí)物圖如圖所示。1.3.3避障原理1.超聲避障超聲波是一種振動(dòng)頻率高于20000Hz的聲波,其方向性好、穿透能力強(qiáng),且頻率高、波長(zhǎng)短,能夠定向傳播,在介質(zhì)中傳播的距離較遠(yuǎn),因而經(jīng)常被用于測(cè)量距離。基于超聲波特性研制的傳感器稱為超聲波傳感器,它在工業(yè)、國(guó)防、生物醫(yī)學(xué)等方面得到了廣泛應(yīng)用,如圖所示。在智能小車行駛過(guò)程中,可以通過(guò)超聲波傳感器來(lái)檢測(cè)智能小車前方是否有障礙物,以及智能小車與障礙物之間的距離,根據(jù)檢測(cè)情況向控制器發(fā)送相應(yīng)的電信號(hào),從而達(dá)到控制智能小車避障的目的。1.3.3避障原理2.紅外避障紅外避障也采用紅外傳感器,它由一個(gè)發(fā)射管(白色)和一個(gè)接收管(黑色)組成,其工作過(guò)程是發(fā)射管發(fā)射紅外線,根據(jù)接收管接收紅外線的情況(接收到紅外線時(shí)輸出高電平,未接收到紅外線時(shí)輸出低電平),判斷障礙物的情況。本任務(wù)中,在小車前側(cè)兩端各配備一個(gè)紅外傳感器,當(dāng)左側(cè)的紅外傳感器檢測(cè)到障礙物時(shí),指示燈亮,小車向右轉(zhuǎn);同理,右側(cè)有障礙物時(shí),小車向左轉(zhuǎn)。該傳感器的探測(cè)距離可以通過(guò)電位器調(diào)節(jié),具有干擾小、便于裝配、使用方便等特點(diǎn)。1.3.3避障原理2.紅外避障智能小車的基本硬件結(jié)構(gòu)如圖所示。(1)驅(qū)動(dòng)模塊:采用H橋電路、PWM方法驅(qū)動(dòng)雙直流電機(jī)正常運(yùn)轉(zhuǎn)、變速等。(2)循跡模塊:通過(guò)紅外傳感器實(shí)現(xiàn)智能小車自動(dòng)循跡行駛。(3)避障模塊:利用超聲波傳感器或紅外傳感器測(cè)量智能小車與障礙物之間的距離,據(jù)此調(diào)節(jié)智能小車的狀態(tài),實(shí)現(xiàn)智能小車成功避障。(4)舵機(jī)模塊:通過(guò)調(diào)節(jié)方波脈沖的占空比來(lái)控制舵機(jī)轉(zhuǎn)動(dòng)的角度,從而控制智能小車的轉(zhuǎn)向。(5)藍(lán)牙模塊:通過(guò)藍(lán)牙模塊將智能小車與手機(jī)進(jìn)行連接,再與控制器相連,實(shí)現(xiàn)信息的實(shí)時(shí)傳輸、處理、存儲(chǔ)等。(6)電源模塊:設(shè)置獨(dú)立的電源模塊為智能小車供電。講解完畢,謝謝觀看!第二章:集成開發(fā)環(huán)境介紹2.1PARTONEArduinoIDE在安裝集成開發(fā)環(huán)境(IntegratedDevelopmentEnvironment,IDE)之前,我們需要知道有關(guān)嵌入式技術(shù)的相關(guān)知識(shí)。開發(fā)人員在軟件上將程序編寫好,編譯生成單片機(jī)要執(zhí)行的程序,就叫做交叉編譯。因此要完成Arduino的執(zhí)行過(guò)程需要Arduino與計(jì)算機(jī)共同參與,此時(shí)Arduino單片機(jī)叫做目標(biāo)單片機(jī),計(jì)算機(jī)就是宿主計(jì)算機(jī)。Arduino開發(fā)環(huán)境能夠在主流的操作系統(tǒng)上運(yùn)行,包括Windows、Linux、MacOS三個(gè)主流操作系統(tǒng)平臺(tái)。2.1.1Arduino開發(fā)環(huán)境搭建1.在Windows上安裝ArduinoIDEArduino軟件編程是在ArduinoIDE上進(jìn)行的,編程所用的語(yǔ)言使用的是一種解釋型語(yǔ)言,基于Arduino的語(yǔ)言編寫的程序叫做sketch,編譯完成后便可下載到硬件開發(fā)板中。在Arduino的官方網(wǎng)站上可以下載正版的Arduino的軟件、源碼、教程及文檔。ArduinoIDE的官方下載。進(jìn)入官方網(wǎng)站后,根據(jù)計(jì)算機(jī)操作系統(tǒng)的不同,選擇相應(yīng)的ArduinoIDE下載選項(xiàng),并完成下載安裝過(guò)程,ArduinoIDE下載界面如圖所示。2.1.1Arduino開發(fā)環(huán)境搭建1.在Windows上安裝ArduinoIDE完成安裝后,雙擊Arduino應(yīng)用程序即可進(jìn)入IDE-sketch初始界面,如圖所示。2.1.1Arduino開發(fā)環(huán)境搭建2.ArduinoIDE介紹打開ArduinoIDE,包含一個(gè)文本編輯器,用來(lái)進(jìn)行程序的編寫與修改,然后利用自動(dòng)上傳器把編寫完成的程序發(fā)送到Arduino開發(fā)板。ArduinoIDE用戶界面的區(qū)域功能如圖所示,界面大致分為三個(gè)部分:菜單欄,包含文件菜單、編輯菜單、程序菜單、工具菜單和幫助菜單;工具欄,包含編譯、上傳、新建程序(sketch)、打開程序(sketch)、保存程序(sketch)和串口監(jiān)視器(SerialMonitor);編輯區(qū),程序代碼編寫區(qū)域;狀態(tài)區(qū),顯示程序編譯和上傳等信息。2.1.1Arduino開發(fā)環(huán)境搭建2.ArduinoIDE介紹ArduinoIDE的開發(fā)界面如圖所示,工具欄按鈕功能從左至右依次為驗(yàn)證、上傳、調(diào)試、選擇開發(fā)板和串口監(jiān)視器(SerialMonitor)。2.1.1Arduino開發(fā)環(huán)境搭建2.ArduinoIDE介紹接下來(lái)對(duì)菜單欄進(jìn)行說(shuō)明:(1)文件菜單完成程序的編寫后,需要將程序進(jìn)行存儲(chǔ),此時(shí)應(yīng)用到的就是文件菜單。如圖所示其功能選項(xiàng)主要包括:新建文件(New);打開文件(Open);保存文件(Save);文件另存為(Saveas)。2.1.1Arduino開發(fā)環(huán)境搭建2.ArduinoIDE介紹(2)編輯菜單編輯菜單是對(duì)程序文本進(jìn)行編寫時(shí)使用的選項(xiàng),如圖所示。主要有以下幾種選項(xiàng):撤銷、恢復(fù)、剪切、復(fù)制、粘貼、選擇全部和轉(zhuǎn)到行/列,同時(shí)這些選項(xiàng)的快捷鍵設(shè)置為,撤銷為Ctrl+Z、剪切為Ctrl+X、復(fù)制為Ctrl+C、粘貼為Ctrl+V、全選為Ctrl+A等。此外,編輯菜單還提供了其他選項(xiàng),如“注釋/取消注釋”,Arduino編輯器中使用“//”代表注釋。2.1.1Arduino開發(fā)環(huán)境搭建2.ArduinoIDE介紹(3)項(xiàng)目菜單項(xiàng)目菜單是對(duì)程序進(jìn)行相應(yīng)的操作,如圖所示,具體有以下幾個(gè)選項(xiàng):驗(yàn)證/編譯(Verify);顯示項(xiàng)目文件夾(ShowSketchFolder),用于打開當(dāng)前程序所在的文件夾;添加文件(AddFile),將其他程序復(fù)制到當(dāng)前程序中,并在編輯器窗口的新選項(xiàng)卡中打開加載庫(kù)(ImportLibrary),導(dǎo)入所引用的Arduino庫(kù)文件。2.1.1Arduino開發(fā)環(huán)境搭建2.ArduinoIDE介紹(4)工具菜單工具(Tools)菜單是對(duì)Arduino開發(fā)板進(jìn)行設(shè)置的選項(xiàng)集合,如圖所示。主要包括:自動(dòng)格式化(AutoFormat),用來(lái)整理代碼格式,使程序顯示更規(guī)范合理;項(xiàng)目存檔(ArchiveSketch),將同屬一個(gè)項(xiàng)目的文件整合到一個(gè)文件夾中,以便進(jìn)行存檔或共享;串口監(jiān)視器(SerialMonitor),用于在Arduino與計(jì)算機(jī)進(jìn)行連接時(shí)顯示串口消息的內(nèi)容;端口,需要手動(dòng)選擇操作系統(tǒng)中可用的串口,在連接Arduino硬件板時(shí),串口號(hào)會(huì)進(jìn)行更新,需要重新選擇相連的串口號(hào);開發(fā)板,選擇與計(jì)算機(jī)連接的開發(fā)板的型號(hào);燒錄引導(dǎo)程序,將編寫好的程序燒寫到Arduino開發(fā)板上,也稱為AVRISP燒寫器。2.1.1Arduino開發(fā)環(huán)境搭建2.ArduinoIDE介紹(5)幫助菜單幫助(Help)菜單是ArduinoIDE中提供查找?guī)椭倪x項(xiàng)集合,如圖所示。包括入門、環(huán)境、故障排除、參考、常見問題以及關(guān)于Arduino的一些基本知識(shí),幫助使用者更好地了解Arduino并解決使用中出現(xiàn)的問題。2.1.1Arduino開發(fā)環(huán)境搭建3.常用功能介紹(1)點(diǎn)擊文件->首選項(xiàng)(或快捷鍵“Ctrl+,”)進(jìn)入軟件設(shè)置界面,可在此界面設(shè)置編輯器語(yǔ)言、編輯器字體大小、顯示行號(hào)、代碼折疊等。通過(guò)設(shè)置編輯器語(yǔ)言可進(jìn)行中英文切換,還有很多其他外文。設(shè)置完畢后點(diǎn)擊確認(rèn),部分設(shè)置需要重啟軟件生效。如圖所示。2.1.1Arduino開發(fā)環(huán)境搭建3.常用功能介紹(2)點(diǎn)擊文件->示例可打開環(huán)境內(nèi)置示例程序。該環(huán)境自帶非常多的例程,包括基礎(chǔ)、數(shù)字、模擬、通訊、顯示等。如圖所示。2.1.1Arduino開發(fā)環(huán)境搭建3.常用功能介紹(3)點(diǎn)擊項(xiàng)目,會(huì)發(fā)現(xiàn)工具欄中的圖標(biāo)編譯、上傳也包含在其中。點(diǎn)擊包含庫(kù),選擇列表中的庫(kù)文件后,編輯區(qū)自動(dòng)添加相關(guān)的頭文件。如圖所示。2.1.1Arduino開發(fā)環(huán)境搭建3.常用功能介紹(4)點(diǎn)擊工具->開發(fā)板,可進(jìn)行不同開發(fā)板的選擇,列表包含了大部分Arduino開發(fā)板,可通過(guò)開發(fā)板管理器添加開發(fā)板選項(xiàng)。點(diǎn)擊端口進(jìn)行端口號(hào)選擇。此外工具選項(xiàng)還包含為開發(fā)板燒錄引導(dǎo)程序的相關(guān)選項(xiàng)。如圖所示。2.1.1Arduino開發(fā)環(huán)境搭建完成ArduinoIDE的安裝后,我們通過(guò)編寫和上傳第一個(gè)程序來(lái)學(xué)習(xí)Arduino的完整開發(fā)過(guò)程。下面我們來(lái)編寫第一個(gè)小程序。程序示例:LED閃光燈打開ArduinoIDE,新建一個(gè)空的Sketch,編寫第一個(gè)程序控制開發(fā)板上的LED燈閃爍,修改參數(shù)調(diào)整閃爍時(shí)間。該示例是ArduinoIDE示例Basics中的Blink程序,打開位置如圖所示。2.1.2用ArduinoIDE完成一個(gè)小程序Blink程序詳情如圖所示:2.1.2用ArduinoIDE完成一個(gè)小程序Blink程序解析:2.1.2用ArduinoIDE完成一個(gè)小程序/*Blink打開LED一秒,然后關(guān)閉一秒,重復(fù)操作*/intLED_BUILTIN=13;/*聲明變量*/voidsetup()/*setup函數(shù)是當(dāng)按下板子復(fù)位鍵或者電源鍵就發(fā)揮功能*/{pinMode(13,OUTPUT);}/*設(shè)置數(shù)字引腳13為輸出,INPUT和OUTPUT是ArduinoIDE已經(jīng)預(yù)先定義好的變量*//*loop函數(shù)會(huì)一遍又一遍的循環(huán)執(zhí)行下去*/voidloop(){digitalWrite(13,HIGH);/*13引腳輸出高電平,打開LED燈*/delay(1000)/*延遲1秒*/digitalWrite(13,LOW);/*13引腳輸出低電平,關(guān)閉LED燈*/delay(1000);/*延遲1秒*/}/*digitalWrite是內(nèi)建函數(shù),改變數(shù)字引腳輸出狀態(tài)是ON還是OFF,它需要兩個(gè)參數(shù)。Delay是內(nèi)建的延遲函數(shù)。*/這是一個(gè)簡(jiǎn)單的實(shí)現(xiàn)LED燈閃爍的程序,在該程序里intLED_BUILTIN=13是用來(lái)聲明變量和接口,voidsetup()函數(shù)則將LED_BUILTIN引腳的模式設(shè)為輸出模式。

在voidloop()中則循環(huán)執(zhí)行點(diǎn)亮熄滅LED燈,實(shí)現(xiàn)LED燈的閃爍。

小貼士上述程序大體可分為以下3個(gè)部分。(1)聲明變量及接口。(2)setup()函數(shù)。在Arduino程序運(yùn)行時(shí)首先要調(diào)用setup()函數(shù),用于初始化變量、設(shè)置引腳的輸入/輸出模式、配置串口、引入類庫(kù)文件等。每次Arduino開發(fā)板通電或重啟后,setup()函數(shù)只運(yùn)行一次。(3)loop()函數(shù)。在setup()函數(shù)中初始化和定義變量,然后執(zhí)行l(wèi)oop()函數(shù)。顧名思義,該函數(shù)在程序運(yùn)行過(guò)程中不斷地循環(huán)執(zhí)行。可通過(guò)該函數(shù)動(dòng)態(tài)控制Arduino開發(fā)板。2.1.3常用的第三方軟件1.虛擬面包板(VirtualBreadboard,VBB)這是一款為Arduino提供服務(wù)的仿真軟件,通過(guò)單片機(jī)來(lái)實(shí)現(xiàn)嵌入式系統(tǒng)的模擬和開發(fā)環(huán)境,其中包含Arduino所有的示例電路。VBB還支持PIC系列芯片、Netduino,以及Java、VB、C++等主流編程環(huán)境。VBB軟件如圖所示。2.1.3常用的第三方軟件2.圖形化編程軟件MixlyMixly是由北京師范大學(xué)創(chuàng)客教育實(shí)驗(yàn)室團(tuán)隊(duì)開發(fā)的圖形化編程軟件,它能夠簡(jiǎn)化ArduinoIDE和Ardublock可視化編程插件的雙窗口界面,可在Windows7和WindowsXP操作系統(tǒng)上運(yùn)行。該軟件易于操作,功能豐富。Mixly軟件界面如圖所示。2.2PARTTWODev-C++2.2.1Dev-C++的下載、安裝與配置登錄Dev-C++的官方網(wǎng)站進(jìn)行軟件下載2.2.1Dev-C++的下載、安裝與配置Dev-C++下載完成后會(huì)得到一個(gè)安裝包(.exe程序),雙擊該文件即可開始安裝。1)加載安裝程序(需要十幾秒時(shí)間)。2)開始安裝。DevC++支持多國(guó)語(yǔ)言,包括簡(jiǎn)體中文,但是要等到安裝完成以后才能設(shè)置,在安裝過(guò)程中不能使用簡(jiǎn)體中文,所以這里我們選擇English。2.2.1Dev-C++的下載、安裝與配置3)同意DevC++的各項(xiàng)條款。4)選擇要安裝的組件,選擇“Full”全部安裝。2.2.1Dev-C++的下載、安裝與配置5)選擇安裝路徑,可以將DevC++安裝在任意位置,但是路徑中最好不要包含中文。6)等待安裝。7)安裝完成。2.2.1Dev-C++的下載、安裝與配置開始配置DevC++。首次使用DevC++還需要簡(jiǎn)單的配置,包括設(shè)置語(yǔ)言、字體、和主題風(fēng)格。1)第一次啟動(dòng)DevC++后,提示選擇語(yǔ)言。2)選擇字體和主題風(fēng)格2.2.1Dev-C++的下載、安裝與配置3)提示設(shè)置成功。點(diǎn)擊“OK”按鈕,進(jìn)入DevC++,就可以編寫代碼了。2.2.2Dev-C++的下載、安裝與配置Dev-C++工作界面如圖所示:2.2.2Dev-C++的下載、安裝與配置接著我們來(lái)介紹DEV-C++的使用。第一步,啟動(dòng)DEV-C++。第二步,在DEV-C++中建立新的源代碼。點(diǎn)擊“文件–>新建–>源代碼”(或者按快捷鍵Ctrl+N)輸入代碼,命名后保存;新建一個(gè)源代碼程序如圖所示:代碼編輯完成后,將代碼進(jìn)行保存,點(diǎn)擊“文件–>保存”(或者按快捷鍵Ctrl+S)。保存源代碼程序如圖所示。2.2.2Dev-C++的下載、安裝與配置在Dev-C++中編輯文件時(shí),基本操作與其它文本編輯器是完全相同的。不過(guò),除了基本的文本編輯功能之外,Dev-C++還提供了以下一些用于程序編輯的方便功能:1)點(diǎn)擊“插入片段”按鈕,可以插入一些常用的代碼片段。建議用戶在編輯每個(gè)源文件時(shí),可以插入“文件頭注釋塊”和“C++main”,以快速開始編輯工作。2)編輯區(qū)左邊的行號(hào)區(qū)中顯示了代碼中的塊狀結(jié)構(gòu),可供用戶看出代碼中的復(fù)合語(yǔ)句層次。3)編輯窗口左邊的“符號(hào)和類”窗格中顯示了當(dāng)前程序中定義的函數(shù)、全局變量、結(jié)構(gòu)體和類等信息,方便用戶掌握整個(gè)程序的結(jié)構(gòu)。

小貼士在編輯代碼過(guò)程中,需要注意以下三個(gè)方面:(1)編輯代碼時(shí)要及時(shí)保存,防止斷電丟失;(2)輸入源程序要在英文輸入狀態(tài)下,以防在后續(xù)階段出現(xiàn)問題;(3)可在main函數(shù)中的return語(yǔ)句前加入system(“pause”)語(yǔ)句,以便在程序運(yùn)行到該位置時(shí),能夠?qū)Τ绦蜻\(yùn)行結(jié)果的顯示延時(shí)一段時(shí)間。2.2.2Dev-C++的下載、安裝與配置第三步:預(yù)處理、編譯、鏈接程序。在完成代碼的編輯工作后,需要對(duì)程序進(jìn)行預(yù)處理、編譯和鏈接的過(guò)程,來(lái)對(duì)程序中的語(yǔ)法、輸入方式等進(jìn)行檢查,并將編譯結(jié)果顯示出來(lái)。首先要設(shè)置編譯器。點(diǎn)擊Dev-C++工具欄上的“編譯器選項(xiàng)”下拉框,就可以看到多種編譯器的配置方案并從中選擇。Dev-C++默認(rèn)安裝的編譯器是TDM-GCC4.9.2(這是一個(gè)免費(fèi)開源的C/C++編譯器)。選擇時(shí)主要是考慮兩個(gè)因素:1、根據(jù)自己所安裝的Windows系統(tǒng)是64位還是32位而選擇含有“64位”或“32位”的配置方案;2、在準(zhǔn)備進(jìn)行調(diào)試時(shí)只能選擇含有“調(diào)試”的方案,只有對(duì)于大型程序才需要改用含有“性能分析”和“發(fā)行”的方案。對(duì)于大部分用戶來(lái)說(shuō),使用默認(rèn)的“TDM-GCC4.9.264位調(diào)試”方案即可。2.2.2Dev-C++的下載、安裝與配置點(diǎn)擊“運(yùn)行–>編譯”,就可以完成對(duì)程序完整的預(yù)處理、編譯以及鏈接過(guò)程如圖所示。通過(guò)編譯、鏈接過(guò)程能夠快速找到程序中的語(yǔ)法錯(cuò)誤,提高對(duì)程序的調(diào)試效率。第四步:運(yùn)行程序。在完成程序的編譯、鏈接過(guò)程后,生成相應(yīng)的.exe文件。選擇“運(yùn)行–>運(yùn)行”來(lái)運(yùn)行程序。如圖所示。2.2.2Dev-C++的下載、安裝與配置第五步:調(diào)試程序。Dev-C++提供了強(qiáng)大的排錯(cuò)與調(diào)試工具,下面簡(jiǎn)要介紹具體使用方法編譯代碼的過(guò)程是通過(guò)編譯器對(duì)代碼的語(yǔ)法錯(cuò)誤進(jìn)行詳細(xì)的檢查,但無(wú)法檢查出來(lái)源代碼中的邏輯錯(cuò)誤,為了驗(yàn)證代碼是否能夠?qū)崿F(xiàn)預(yù)期的效果,需要對(duì)代碼進(jìn)行進(jìn)一步的調(diào)試,找出代碼中存在的邏輯錯(cuò)誤或其他問題。若要清除程序代碼中的邏輯錯(cuò)誤,就必須學(xué)會(huì)使用開發(fā)環(huán)境中的調(diào)試工具,并觀察變量的數(shù)值變化,再加上自己的邏輯思考,才能找出程序中的錯(cuò)誤所在并修改清除之。Dev-C++中沒有單獨(dú)的“調(diào)試”菜單,只是在“運(yùn)行[R]”菜單下面有幾個(gè)菜單項(xiàng)與調(diào)試有關(guān):“切換斷點(diǎn)F4”、“調(diào)試F5”、“停止運(yùn)行F6”。讀者需要了解這幾個(gè)菜單和按鈕,然后按下述步驟進(jìn)行操作。2.2.2Dev-C++的下載、安裝與配置第五步:調(diào)試程序。1)開始調(diào)試(Debug)點(diǎn)擊工具欄上的“調(diào)試”按鈕(快捷鍵F5),或點(diǎn)擊菜單“運(yùn)行–>調(diào)試F5”即可開始調(diào)試。如果當(dāng)前選定的編譯器配置方案中不含調(diào)試信息,Dev-C++會(huì)彈出對(duì)話框提示說(shuō)沒有調(diào)試信息,不能啟動(dòng)調(diào)試。請(qǐng)點(diǎn)擊“確定”按鈕,然后重新選擇帶有“調(diào)試”的編譯器配置方案,再重新進(jìn)行編譯和調(diào)試。程序調(diào)試時(shí),就開始運(yùn)行(通常會(huì)彈出一個(gè)終端窗口)。運(yùn)行到程序中的第一條可執(zhí)行語(yǔ)句就暫停。這時(shí)候最好是手工調(diào)整一下Dev-C++窗口的大小和位置,以便能夠同時(shí)看到Dev-C++窗口和終端窗口(以方便后續(xù)操作)。2)調(diào)試過(guò)程中的操作啟動(dòng)調(diào)試之后,Dev-C++窗口下半部分時(shí)會(huì)自動(dòng)顯示調(diào)試面板如圖所示,可以用鼠標(biāo)點(diǎn)擊按鈕或按快捷鍵執(zhí)行調(diào)試操作。2.2.2Dev-C++的下載、安裝與配置第五步:調(diào)試程序。3)查看變量的值開始調(diào)試后,常常要查看變量的變化情況,因此需要查看變量的值。在默認(rèn)情況下,如果用鼠標(biāo)懸浮在當(dāng)前運(yùn)行的代碼中的變量上方,則會(huì)自動(dòng)出現(xiàn)一個(gè)小懸浮窗口,顯示出該變量當(dāng)前的值。如果想更快速地看到變量的值,可以在編輯器中選中待查看的變量名,在Dev-C++窗口下方的調(diào)試面板中點(diǎn)擊“添加查看”按鈕,就可以在Dev-C++窗口左邊的“調(diào)試”窗格中看到該變量及其當(dāng)前的值。2.2.2Dev-C++的下載、安裝與配置第五步:調(diào)試程序。4)設(shè)置斷點(diǎn)(Breakpoint)如果程序比較長(zhǎng),那么在調(diào)試過(guò)程中使用“下一步”按鈕和“單步進(jìn)入”按鈕進(jìn)行操作時(shí)比較慢??梢栽诔绦蛑性O(shè)置斷點(diǎn),加快調(diào)試操作速度。在事先對(duì)程序的運(yùn)行出錯(cuò)現(xiàn)象進(jìn)行思考之后,可以推斷出程序出錯(cuò)的可能原因在于源代碼中的哪些語(yǔ)句。無(wú)論是在編輯狀態(tài)還是在調(diào)試過(guò)程中,可以把光標(biāo)移動(dòng)到想要暫停執(zhí)行的那一行,用鼠標(biāo)點(diǎn)擊該行左邊的裝訂區(qū)位置中的行號(hào)(或者按F4鍵),該行就會(huì)變成紅色,裝訂區(qū)的行號(hào)處顯示有一個(gè)紅點(diǎn),表示該行已被設(shè)置為一個(gè)斷點(diǎn),再次操作則取消該行為斷點(diǎn)。請(qǐng)?jiān)谧约簯岩捎袉栴}的部分前后設(shè)置幾個(gè)斷點(diǎn),以便進(jìn)行調(diào)試。程序中可以設(shè)置多個(gè)斷點(diǎn)。如果程序中設(shè)置了斷點(diǎn),那么在啟動(dòng)調(diào)試時(shí)會(huì)直接運(yùn)行到第一個(gè)斷點(diǎn)(而不是第一條可執(zhí)行語(yǔ)句)暫停。這時(shí)仍然可以用“下一步”按鈕和“單步進(jìn)入”按鈕進(jìn)行操作。如果認(rèn)為程序中某一部分無(wú)誤,則點(diǎn)擊“繼續(xù)”按鈕就會(huì)以運(yùn)行到下一個(gè)斷點(diǎn)暫停,無(wú)斷點(diǎn)則運(yùn)行到程序末尾。2.2.2Dev-C++的下載、安裝與配置第五步:調(diào)試程序。5)根據(jù)調(diào)試情況排錯(cuò)在調(diào)試過(guò)程中,要靈活運(yùn)用“下一步”按鈕和“單步進(jìn)入”按鈕,并隨時(shí)查看變量的值,還需在頭腦中進(jìn)行分析,從而判斷程序中是否存在邏輯錯(cuò)誤。在調(diào)試中途或最后需要按“停止執(zhí)行”(F6)以結(jié)束調(diào)試。然后根據(jù)調(diào)試過(guò)程中的思考結(jié)果對(duì)程序進(jìn)行修改。通常需要反復(fù)進(jìn)行調(diào)試和修改才能排除程序中的錯(cuò)誤。

小貼士常用的調(diào)試方法有:設(shè)置斷點(diǎn)、單步執(zhí)行程序以及設(shè)置watch窗口等。(1)設(shè)置斷點(diǎn)。在需要設(shè)置斷點(diǎn)的地方,單擊其行號(hào),即可完成斷點(diǎn)的設(shè)置,再次單擊可去除該斷點(diǎn)。當(dāng)程序運(yùn)行到該斷點(diǎn)時(shí),程序會(huì)自動(dòng)停止,開發(fā)人員可以通過(guò)觀察當(dāng)前相關(guān)變量的值,來(lái)檢測(cè)程序中的錯(cuò)誤之處及其原因。在printf函數(shù)處設(shè)置斷點(diǎn),如圖所示。小貼士需要注意的是,在對(duì)程序進(jìn)行調(diào)試時(shí),不能直接點(diǎn)擊運(yùn)行,而應(yīng)選擇主菜單“運(yùn)行–>調(diào)試”,程序才會(huì)停留在預(yù)期的斷點(diǎn)位置,否則程序會(huì)完整運(yùn)行,如圖所示。小貼士(2)單步執(zhí)行程序在程序調(diào)試過(guò)程中,程序會(huì)留在設(shè)置斷點(diǎn)處,后面語(yǔ)句的執(zhí)行可在輸出欄的調(diào)試窗口下進(jìn)行。在調(diào)試窗口中,可實(shí)現(xiàn)對(duì)程序的調(diào)試、下一步、跳過(guò)、下一條語(yǔ)句、單步進(jìn)入、跳過(guò)函數(shù)、進(jìn)入語(yǔ)句中各種操作,通過(guò)對(duì)單個(gè)語(yǔ)句的詳細(xì)分析來(lái)檢測(cè)程序中的錯(cuò)誤,如圖所示。小貼士(3)設(shè)置watch窗口。在對(duì)程序調(diào)試時(shí),通常會(huì)對(duì)每條語(yǔ)句的執(zhí)行結(jié)果進(jìn)行監(jiān)控,為了能更清楚地查看每個(gè)變量的動(dòng)態(tài)值,可通過(guò)調(diào)試窗口的“添加查看”來(lái)實(shí)現(xiàn)。具體操作是,選擇“添加查看”,然后輸入需要監(jiān)控的變量名稱即可完成對(duì)該變量的watch窗口的添加。如圖所示,添加了變量a的watch窗口。2.2.3Dev-C++項(xiàng)目開發(fā)Dev-C++不僅支持單文件開發(fā)(適合大部分初學(xué)者),還支持以項(xiàng)目形式的多文件開發(fā)。點(diǎn)擊菜單“文件–>新建–>項(xiàng)目”,或點(diǎn)擊工具欄上的“新建”按鈕再點(diǎn)擊“項(xiàng)目”,就可以打開“新建項(xiàng)目”對(duì)話框。該對(duì)話框中按照“基本”、“多媒體”、“Windows”和“終端窗口”四類提供了多種項(xiàng)目模板,可供用戶從中選擇合適的項(xiàng)目模板,開始自己的項(xiàng)目開發(fā)。例如,在“基本”類別中包含了“Windows應(yīng)用程序”、“終端窗口應(yīng)用程序”、“靜態(tài)庫(kù)”和“動(dòng)態(tài)庫(kù)”等,而在“多媒體”類別下面提供了分別使用Direct3D、EGE和OpenGL三種圖形函數(shù)庫(kù)進(jìn)行圖形編程的模板。在使用項(xiàng)目方式進(jìn)行多文件開發(fā)時(shí),編輯窗口左邊的“項(xiàng)目”窗格提供了相應(yīng)的項(xiàng)目組織功能。2.2.3Dev-C++項(xiàng)目開發(fā)在Dev-C++安裝目錄下的Example目錄下提供了一些示例程序,可供初學(xué)者參考學(xué)習(xí):1)hello.c和hello.cpp:經(jīng)典的輸出“Hello,World!”字符串的簡(jiǎn)單程序。分別為C語(yǔ)言版本和C++版本。2)leapyear.c和leapyear.cpp:輸入一個(gè)表示年份的數(shù)字,判斷是否閏年。分別為C語(yǔ)言版本和C++版本。3)perfectnum.cpp:輸入一個(gè)整數(shù),檢查它是否為完數(shù)(所有真因數(shù)之和正好等于這個(gè)數(shù))。4)fibonacci.cpp:輸出Fibonacci數(shù)列的前30項(xiàng),用數(shù)組方式實(shí)現(xiàn)。5)winmain.cpp:通過(guò)使用WindowsAPI(應(yīng)用程序接口)函數(shù)編寫的點(diǎn)擊按鈕之后彈出對(duì)話框輸出“Hello,Windows!”。6)snakegame.cpp:字符界面的貪吃蛇游戲(主要是標(biāo)準(zhǔn)C語(yǔ)言實(shí)現(xiàn)的,少量地使用了WindowsAPI函數(shù))。7)EGE-FiveStarFlag.cpp:使EGE圖形庫(kù)(一個(gè)面向初學(xué)者的免費(fèi)開源函數(shù)庫(kù))編寫的圖形界面程序,繪制五星紅旗。8)EGE-RandomLines.cpp:使用EGE圖形庫(kù)編寫的圖形界面程序,隨機(jī)地繪制折向的線條,并以端點(diǎn)為圓心繪制圓形。講解完畢,謝謝觀看!智能小車C語(yǔ)言程序控制第三章:初識(shí)C語(yǔ)言3.1PARTONE概述程序設(shè)計(jì)是開發(fā)人員通過(guò)編寫計(jì)算機(jī)軟件程序來(lái)解決某種特定問題的過(guò)程,而程序設(shè)計(jì)語(yǔ)言就是開發(fā)人員在編寫程序時(shí)所使用的,用來(lái)描述程序執(zhí)行過(guò)程中的指令、規(guī)則的符號(hào)集合,通常包含語(yǔ)法、語(yǔ)義和語(yǔ)用等方面的內(nèi)容。自20世紀(jì)60年代以來(lái),程序設(shè)計(jì)語(yǔ)言一直在不斷地發(fā)展迭代,產(chǎn)生了第一代機(jī)器語(yǔ)言、第二代匯編語(yǔ)言、第三代高級(jí)語(yǔ)言等。其中,C語(yǔ)言作為第三代高級(jí)語(yǔ)言中應(yīng)用最廣泛的語(yǔ)言之一,具有功能豐富、表達(dá)能力強(qiáng)、有豐富的運(yùn)算符和數(shù)據(jù)類型、使用靈活方便、應(yīng)用面廣、移植能力強(qiáng)、編譯質(zhì)量高、目標(biāo)程序執(zhí)行效率高等優(yōu)點(diǎn)。同時(shí),C語(yǔ)言還具有低級(jí)語(yǔ)言的許多特點(diǎn),如允許直接訪問物理地址,能進(jìn)行位操作,能實(shí)現(xiàn)匯編語(yǔ)言的大部分功能,可以直接對(duì)硬件進(jìn)行操作等。用C語(yǔ)言編譯程序產(chǎn)生的目標(biāo)程序,其質(zhì)量可以與匯編語(yǔ)言產(chǎn)生的目標(biāo)程序相媲美,因此C語(yǔ)言具有“可移植的匯編語(yǔ)言”的美稱,成為編寫應(yīng)用軟件、操作系統(tǒng)和編譯程序的重要語(yǔ)言之一。3.1概述3.2PARTTWOC語(yǔ)言的產(chǎn)生和發(fā)展C語(yǔ)言集高級(jí)語(yǔ)言和匯編語(yǔ)言的優(yōu)勢(shì)于一身,能夠滿足系統(tǒng)軟件和應(yīng)用軟件兩方面的應(yīng)用需求。C語(yǔ)言的原型是ALGOL60語(yǔ)言,即A語(yǔ)言。1963年,劍橋大學(xué)將ALGOL60語(yǔ)言發(fā)展成為組合程序設(shè)計(jì)語(yǔ)言(CombinedProgrammingLanguage,CPL),并于1967年對(duì)其進(jìn)行簡(jiǎn)化,形成了BCPL。接著,美國(guó)貝爾實(shí)驗(yàn)室的KenThompson在1970年對(duì)BCPL進(jìn)行了修改,將其命名為“B語(yǔ)言”,并用B語(yǔ)言寫出了第一個(gè)UNIX操作系統(tǒng)。1973年,美國(guó)貝爾實(shí)驗(yàn)室的DennisM.Ritchie在B語(yǔ)言的基礎(chǔ)上設(shè)計(jì)出了一種新的語(yǔ)言,他將BCPL的第二個(gè)字母作為這種語(yǔ)言的名字,這就是C語(yǔ)言。為了推廣UNIX操作系統(tǒng),DennisM.Ritchie在1977年發(fā)表了不依賴具體機(jī)器系統(tǒng)的C語(yǔ)言編譯文本《可移植的C語(yǔ)言編譯程序》。1978年,BrianW.Kernighian和DennisM.Ritchie出版了著名的《C程序設(shè)計(jì)語(yǔ)言》(TheCProgrammingLanguage),奠定了C語(yǔ)言作為目前最高級(jí)的程序設(shè)計(jì)語(yǔ)言的地位。3.2C語(yǔ)言的產(chǎn)生和發(fā)展1987年,隨著微型計(jì)算機(jī)的日益普及,出現(xiàn)了多種C語(yǔ)言版本。由于沒有統(tǒng)一的標(biāo)準(zhǔn),各種版本之間存在很大差異。為了改變這種情況,美國(guó)國(guó)家標(biāo)準(zhǔn)研究所(ANSI)為C語(yǔ)言制定了一套ANSI標(biāo)準(zhǔn),后來(lái)成為現(xiàn)行的C語(yǔ)言標(biāo)準(zhǔn)。1990年,國(guó)際標(biāo)準(zhǔn)化組織(ISO)接受ANSIC為ISOC的標(biāo)準(zhǔn)(ISO9899—1990)。1994年,ISO修訂了C語(yǔ)言的標(biāo)準(zhǔn)。目前流行的C語(yǔ)言編譯系統(tǒng)大多是以ANSIC為基礎(chǔ)開發(fā)的,但不同版本的C語(yǔ)言編譯系統(tǒng)所實(shí)現(xiàn)的語(yǔ)言功能和語(yǔ)法規(guī)則略有差別。C語(yǔ)言被稱為“編程之本”,很多人的編程之路都是從C語(yǔ)言開始的。C語(yǔ)言在現(xiàn)今社會(huì)的各個(gè)領(lǐng)域應(yīng)用十分廣泛,如大數(shù)據(jù)、云計(jì)算、人工智能等。C語(yǔ)言不僅適用于各大主流操作系統(tǒng)(如Windows、Linux、UNIX等),在一些主流開發(fā)框架(如TensorFlow、Bitcoin和OpenGL等)和一些主流服務(wù)器(如Nginx、ApacheTomcat7等)中也有很廣泛的應(yīng)用。3.2C語(yǔ)言的產(chǎn)生和發(fā)展3.3PARTTHREEC語(yǔ)言的特點(diǎn)C語(yǔ)言作為目前最流行的編程語(yǔ)言之一,能夠滿足不同系統(tǒng)軟件與應(yīng)用軟件的要求。C語(yǔ)言有以下幾個(gè)特點(diǎn)。(1)C語(yǔ)言簡(jiǎn)潔、緊湊,使用靈活方便。C語(yǔ)言共有32個(gè)關(guān)鍵字和9種控制語(yǔ)句,程序書寫自由,大部分用小寫字母表示。它不僅能夠?qū)崿F(xiàn)高級(jí)語(yǔ)言的基本結(jié)構(gòu),也能達(dá)到低級(jí)語(yǔ)言對(duì)實(shí)用性的要求。(2)運(yùn)算符豐富。C語(yǔ)言共有34個(gè)運(yùn)算符,使得C語(yǔ)言中的運(yùn)算類型豐富、表達(dá)形式多樣化,能夠完成各種復(fù)雜運(yùn)算。(3)數(shù)據(jù)類型豐富。3.3C語(yǔ)言的特點(diǎn)C語(yǔ)言作為目前最流行的編程語(yǔ)言之一,能夠滿足不同系統(tǒng)軟件與應(yīng)用軟件的要求。C語(yǔ)言有以下幾個(gè)特點(diǎn)。(1)C語(yǔ)言簡(jiǎn)潔、緊湊,使用靈活方便。C語(yǔ)言共有32個(gè)關(guān)鍵字和9種控制語(yǔ)句,程序書寫自由,大部分用小寫字母表示。它不僅能夠?qū)崿F(xiàn)高級(jí)語(yǔ)言的基本結(jié)構(gòu),也能達(dá)到低級(jí)語(yǔ)言對(duì)實(shí)用性的要求。(2)運(yùn)算符豐富。C語(yǔ)言共有34個(gè)運(yùn)算符,使得C語(yǔ)言中的運(yùn)算類型豐富、表達(dá)形式多樣化,能夠完成各種復(fù)雜運(yùn)算。(3)數(shù)據(jù)類型豐富。C語(yǔ)言中的數(shù)據(jù)類型有整型、實(shí)型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等,能實(shí)現(xiàn)各種復(fù)雜數(shù)據(jù)類型的運(yùn)算。C語(yǔ)言引入了指針概念,使程序執(zhí)行效率更高。(4)C語(yǔ)言具有結(jié)構(gòu)化的控制語(yǔ)句,可實(shí)現(xiàn)程序設(shè)計(jì)結(jié)構(gòu)化、模塊化。C語(yǔ)言能夠做到代碼和數(shù)據(jù)分段隔離,程序的各個(gè)部分除必要的信息交換外彼此互不影響,使得程序?qū)哟吻逦阌谑褂?、維護(hù)及調(diào)試。另外,C語(yǔ)言中提供了大量函數(shù),這些函數(shù)可方便地調(diào)用。C語(yǔ)言中還提供了多種循環(huán)、條件語(yǔ)句控制程序流向,可實(shí)現(xiàn)程序設(shè)計(jì)結(jié)構(gòu)化。3.3C語(yǔ)言的特點(diǎn)C語(yǔ)言作為目前最流行的編程語(yǔ)言之一,能夠滿足不同系統(tǒng)軟件與應(yīng)用軟件的要求。C語(yǔ)言有以下幾個(gè)特點(diǎn)。(5)C語(yǔ)言語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。一般的高級(jí)語(yǔ)言語(yǔ)法檢查比較嚴(yán)格,能夠檢查出幾乎所有的語(yǔ)法錯(cuò)誤。而C語(yǔ)言賦予程序編寫者較大的自由度,一行可以寫多條語(yǔ)句,變量類型使用靈活。(6)C語(yǔ)言允許直接訪問物理地址,可直接操作硬件。C語(yǔ)言既具有高級(jí)語(yǔ)言的功能,又具有低級(jí)語(yǔ)言的許多功能,能夠像匯編語(yǔ)言一樣對(duì)位、字節(jié)和地址進(jìn)行操作,而這三者是計(jì)算機(jī)最基本的工作單元,可以用來(lái)編寫系統(tǒng)軟件。(7)目標(biāo)代碼質(zhì)量高,代碼量小。程序執(zhí)行效率高,執(zhí)行速度快,功能強(qiáng)大。(8)可移植性好。可移植性是指一種軟件在不同種類的計(jì)算機(jī)系統(tǒng)上運(yùn)行的可能性,C語(yǔ)言適用于多種不同的操作系統(tǒng),如DOS、UNIX、Windows等??偠灾?,C語(yǔ)言既有高級(jí)語(yǔ)言的特點(diǎn),又有匯編語(yǔ)言的特點(diǎn);既是一個(gè)成功的系統(tǒng)設(shè)計(jì)語(yǔ)言,又是一個(gè)實(shí)用的程序設(shè)計(jì)語(yǔ)言;既能用來(lái)編寫不依賴計(jì)算機(jī)硬件的應(yīng)用程序,又能用來(lái)編寫各種系統(tǒng)程序。3.3C語(yǔ)言的特點(diǎn)3.4PARTFOURC語(yǔ)言的基本框架1.C語(yǔ)言的基本元素一個(gè)C語(yǔ)言程序是由若干語(yǔ)句構(gòu)成的,語(yǔ)句又是由若干字符構(gòu)成的,字符是C語(yǔ)言中最基本的元素。1)基本字符集字母:26個(gè)小寫字母a~z,26個(gè)大寫字母A~Z。數(shù)字:10個(gè)阿拉伯?dāng)?shù)字0~9??瞻追喊崭穹⒅票矸?、換行符等。空白符只用在字符常量和字符串常量中,目的是提高程序的可讀性。標(biāo)點(diǎn)符號(hào)和特殊字符:C語(yǔ)言中有28個(gè)標(biāo)點(diǎn)符號(hào)和特殊字符。2)標(biāo)識(shí)符標(biāo)識(shí)符是用來(lái)標(biāo)識(shí)常量名、變量名、函數(shù)名及文件名等的字符序列。使用時(shí)應(yīng)滿足以下條件:標(biāo)識(shí)符應(yīng)以字母或下畫線開頭。標(biāo)識(shí)符只能由字母、數(shù)字、下畫線組成。3.4C語(yǔ)言的基本框架1.C語(yǔ)言的基本元素3)關(guān)鍵字關(guān)鍵字是C語(yǔ)言中有固定含義的標(biāo)識(shí)符,又稱保留字,例如:數(shù)據(jù)類型:int、double等。語(yǔ)句種類:if、for等。程序元素的其他性質(zhì):define、static等。注意:關(guān)鍵字必須小寫。例如,else與ELSE代表不同含義,else是關(guān)鍵字,ELSE是普通標(biāo)識(shí)符。4)運(yùn)算符運(yùn)算符用于對(duì)對(duì)象進(jìn)行系統(tǒng)預(yù)定義的運(yùn)算,并得到運(yùn)算結(jié)果。運(yùn)算符通常由1個(gè)或2個(gè)字符組成,如“+”表示加法運(yùn)算,“=”表示賦值運(yùn)算,“==”表示相等的判斷等。5)分隔符分隔符用于表示程序中一個(gè)實(shí)體的結(jié)束和另一個(gè)實(shí)體的開始。常用的分隔符有括號(hào)、逗號(hào)、分號(hào)等。分隔符沒有具體含義,只是對(duì)程序結(jié)構(gòu)進(jìn)行劃分。3.4C語(yǔ)言的基本框架1.C語(yǔ)言的基本元素6)注釋注釋用于對(duì)程序進(jìn)行說(shuō)明,注釋內(nèi)容可以有一行或多行,可以放在程序開頭,也可以放在程序末尾。注釋的一般形式如下:/*注釋內(nèi)容*//*一行或多行注釋*///注釋當(dāng)前行7)標(biāo)準(zhǔn)標(biāo)識(shí)符標(biāo)準(zhǔn)標(biāo)識(shí)符是C語(yǔ)言中被賦予特定意義的標(biāo)識(shí)符。例如:printf:格式化輸出庫(kù)函數(shù)的函數(shù)名。scanf:格式化輸入庫(kù)函數(shù)的函數(shù)名。INT_MAX:整數(shù)類型的最大數(shù)據(jù)。8)控制語(yǔ)句C語(yǔ)言中有9種控制語(yǔ)句,用小寫字母書寫,作用是壓縮不必要的語(yǔ)句內(nèi)容。3.4C語(yǔ)言的基本框架1.C語(yǔ)言的基本元素6)注釋注釋用于對(duì)程序進(jìn)行說(shuō)明,注釋內(nèi)容可以有一行或多行,可以放在程序開頭,也可以放在程序末尾。注釋的一般形式如下:/*注釋內(nèi)容*//*一行或多行注釋*///注釋當(dāng)前行7)標(biāo)準(zhǔn)標(biāo)識(shí)符標(biāo)準(zhǔn)標(biāo)識(shí)符是C語(yǔ)言中被賦予特定意義的標(biāo)識(shí)符。例如:printf:格式化輸出庫(kù)函數(shù)的函數(shù)名。scanf:格式化輸入庫(kù)函數(shù)的函數(shù)名。INT_MAX:整數(shù)類型的最大數(shù)據(jù)。8)控制語(yǔ)句C語(yǔ)言中有9種控制語(yǔ)句,用小寫字母書寫,作用是壓縮不必要的語(yǔ)句內(nèi)容。3.4C語(yǔ)言的基本框架2.C語(yǔ)言程序結(jié)構(gòu)C語(yǔ)言通過(guò)一個(gè)或多個(gè)函數(shù)來(lái)實(shí)現(xiàn)程序功能,函數(shù)是C語(yǔ)言的基本組成部分。C語(yǔ)言程序中必有一個(gè)主函數(shù)main(),它是每個(gè)程序執(zhí)行過(guò)程的起始位置。(1)C語(yǔ)言程序中包含3種函數(shù)。

main():主函數(shù),每個(gè)C語(yǔ)言程序有且僅有一個(gè)主函數(shù)。系統(tǒng)提供的庫(kù)函數(shù),如printf()、scanf()等。程序員自行設(shè)置的函數(shù),如max()。(2)一個(gè)完整的函數(shù)主要由以下兩部分組成。函數(shù)首部(函數(shù)頭),包括函數(shù)名、函數(shù)類型(返回值類型)、函數(shù)屬性、形式參數(shù)名、形式參數(shù)類型等。函數(shù)體,即大括號(hào)中的部分。函數(shù)體中包含變量定義部分和執(zhí)行部分。3.4C語(yǔ)言的基本框架2.C語(yǔ)言程序結(jié)構(gòu)下面以主函數(shù)為例說(shuō)明函數(shù)的結(jié)構(gòu):main() //函數(shù)首部,指定函數(shù)名、函數(shù)參數(shù)等信息{ //函數(shù)體的開始

//函數(shù)體內(nèi)的語(yǔ)句} //函數(shù)體的結(jié)束(3)程序中的每條語(yǔ)句均以分號(hào)結(jié)束。例如:c=a+b;(4)C語(yǔ)言程序書寫格式自由,一條語(yǔ)句可以占多行,一行也可以有多條語(yǔ)句。(5)C語(yǔ)言程序從主函數(shù)開始執(zhí)行,隨著主函數(shù)的結(jié)束而結(jié)束,其他函數(shù)通過(guò)函數(shù)嵌套來(lái)執(zhí)行。(6)C語(yǔ)言程序用函數(shù)進(jìn)行輸入和輸出。3.4C語(yǔ)言的基本框架3.5PARTFIVEC語(yǔ)言程序設(shè)計(jì)過(guò)程C語(yǔ)言程序設(shè)計(jì)過(guò)程主要包含以下幾個(gè)步驟。(1)需求分析:通過(guò)分析用戶的特定需求,找到解決問題的方法。(2)算法設(shè)計(jì):給出解決問題的具體算法與實(shí)施步驟。(3)編寫程序:將算法翻譯成計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,對(duì)源程序進(jìn)行編輯、編譯和鏈接。(4)運(yùn)行和調(diào)試程序:運(yùn)行可執(zhí)行程序,得到運(yùn)行結(jié)果,并對(duì)運(yùn)行結(jié)果進(jìn)行分析。若結(jié)果不合理,則需要對(duì)程序進(jìn)行調(diào)試,以排除程序中的錯(cuò)誤。(5)編寫程序文檔:程序調(diào)試完成后,須向用戶提供程序說(shuō)明書,包括程序名稱、程序功能、執(zhí)行環(huán)境、注意事項(xiàng)等。3.5C語(yǔ)言程序設(shè)計(jì)過(guò)程C語(yǔ)言程序要經(jīng)過(guò)編輯、編譯、鏈接和運(yùn)行等環(huán)節(jié)才能實(shí)現(xiàn)具體功能。具體實(shí)現(xiàn)過(guò)程如圖所示。3.5C語(yǔ)言程序設(shè)計(jì)過(guò)程(1)編輯源程序。在IDE的相關(guān)程序編輯器中完成對(duì)原始代碼的編輯,輸入的語(yǔ)句一般以文本形式存儲(chǔ)在計(jì)算機(jī)中,文件擴(kuò)展名為.c。其中,編輯器可以是ArduinoIDE和Dev-C++等自帶的文本編輯器,也可以是Windows操作系統(tǒng)提供的“寫字板”或各種字符處理軟件等。(2)編譯源程序。寫好的原始代碼是無(wú)法直接被計(jì)算機(jī)執(zhí)行的,計(jì)算機(jī)只能執(zhí)行0和1的機(jī)器指令,因此需要將源程序翻譯成機(jī)器指令,這個(gè)過(guò)程稱為源程序的編譯過(guò)程。源程序編譯之后生成的機(jī)器指令程序稱為目標(biāo)程序,其文件擴(kuò)展名為.obj。(3)鏈接程序。在源程序中使用的標(biāo)準(zhǔn)函數(shù),如scanf()、printf()等,是從系統(tǒng)函數(shù)庫(kù)中調(diào)用的庫(kù)函數(shù)。因此,必須將目標(biāo)程序與庫(kù)函數(shù)進(jìn)行鏈接,才能生成擴(kuò)展名為.exe的可執(zhí)行程序文件。(4)運(yùn)行程序。執(zhí)行.exe文件,得到最終結(jié)果。3.5C語(yǔ)言程序設(shè)計(jì)過(guò)程3.6PARTSIX編寫簡(jiǎn)單的C語(yǔ)言程序【例3-6-1】第一個(gè)程序“Hello,World!”#include<stdio.h>intmain(){printf("Hello,World!\n");}程序運(yùn)行結(jié)果如圖所示。

小貼士(1)C程序一般用小寫字母書寫。(2)每個(gè)C程序有且僅有一個(gè)主函數(shù)。(3)程序體必須放在一對(duì)大括號(hào)中。(4)每條語(yǔ)句的結(jié)尾處必須有分號(hào)。(5)printf()函數(shù)的功能是顯示程序運(yùn)行結(jié)果。(6)“\n”是換行符,即回車換行。(7)“#include”是文件包含命令,屬于預(yù)處理命令,通常放在主函數(shù)之前,用于將有關(guān)的頭文件包含到用戶源文件中。被包含的文件通常是由系統(tǒng)提供的,其擴(kuò)展名為.h?!皊tdio.h”為標(biāo)準(zhǔn)輸入/輸出庫(kù)文件,其內(nèi)定義了printf()函數(shù)的原型?!纠?-6-2】求兩個(gè)整數(shù)中的大數(shù)#include<stdio.h>intmax(intx,inty){ intz; if(x>y)z=x;elsez=y; return(z);}main(){ inta,b,c; printf("請(qǐng)輸入兩個(gè)整數(shù):");scanf("%d,%d",&a,&b); c=max(a,b); printf("%d,%d中的大數(shù)為:%d\n\n\n",a,b,c);}程序運(yùn)行結(jié)果如圖所示。

小貼士(1)本程序的功能是輸入兩個(gè)整數(shù),輸出其中較大的數(shù)。(2)本程序由兩個(gè)函數(shù)模塊組成:主函數(shù)main()和子函數(shù)max()。子函數(shù)max()是一個(gè)用戶自定義函數(shù),功能是比較兩個(gè)數(shù)的大小,然后把較大的數(shù)返回給主函數(shù)。(3)標(biāo)準(zhǔn)庫(kù)函數(shù)由系統(tǒng)定義,用戶在程序中直接調(diào)用即可,比如程序中的輸入/輸出函數(shù)scanf()和printf()。與標(biāo)準(zhǔn)庫(kù)函數(shù)不同,自定義函數(shù)由用戶定義,定義好后就可以像標(biāo)準(zhǔn)庫(kù)函數(shù)一樣使用。(4)本程序從main()函數(shù)開始執(zhí)行,執(zhí)行到語(yǔ)句“c=max(a,b);”時(shí)轉(zhuǎn)到max()函數(shù),遇到return語(yǔ)句返回主函數(shù)繼續(xù)執(zhí)行,直到程序結(jié)束。(5)本程序的執(zhí)行過(guò)程如下:首先在屏幕上顯示提示字符串,請(qǐng)用戶輸入兩個(gè)數(shù),回車后由scanf()函數(shù)語(yǔ)句接收這兩個(gè)數(shù),并送入變量a和b中,然后調(diào)用max()函數(shù),把a(bǔ)和b的值傳給max()函數(shù)的參數(shù)x和y,在max()函數(shù)中比較x和y的大小,把大者通過(guò)中間變量返回給主函數(shù)中的變量c,最后在屏幕上輸出c的值。【例3-6-3】計(jì)算并輸出一個(gè)數(shù)的平方#include<stdio.h>main(){ floata,b; a=2.8; b=a*a; printf("%f\n",b);}程序運(yùn)行結(jié)果如圖所示。小貼士(1)本程序由一個(gè)主函數(shù)main()構(gòu)成,包含4條語(yǔ)句。程序的功能是計(jì)算一個(gè)數(shù)的平方,并輸出結(jié)果。(2)C語(yǔ)言用函數(shù)進(jìn)行輸入和輸出,如printf()、scanf()。(3)每條語(yǔ)句必須以分號(hào)結(jié)尾,但預(yù)處理命令、函數(shù)頭和大括號(hào)后不能加分號(hào)。練一練1.運(yùn)行下面的程序,記錄運(yùn)行結(jié)果,并保存程序。#include"stdio.h"main(){inta,b,sum;floataver;a=12;b=25; sum=a+b; aver=sum/2.0; printf("sumis%d\n",sum); printf("averis%f\n",aver);}練一練2.調(diào)試下面的程序,并改正其中的錯(cuò)誤,使之順利運(yùn)行。#include<stdio.h>;main(){floata,b;a=2.8b=4.5;print("a=%f,b=%f\n",a,b);}練一練參照例3-6-1,編寫自己的第一個(gè)程序,程序運(yùn)行結(jié)果如圖所示。講解完畢,謝謝觀看!第四章:點(diǎn)亮一個(gè)LED

為響應(yīng)節(jié)能減排號(hào)召,某企業(yè)調(diào)研普通家庭用戶中冰箱、洗衣機(jī)、電視機(jī)和空調(diào)四件家電的能效情況,測(cè)試每件家電的功率后,如何計(jì)算總功率呢?【案例導(dǎo)入】【案例導(dǎo)入】:案例源代碼#include<stdio.h>intmain() //主函數(shù) { inta,b,c,d; //用整型定義四件家電各自的功率 longp; //用長(zhǎng)整型定義總功率 printf("請(qǐng)分別輸入四件家電的功率:"); scanf("%d%d%d%d",&a,&b,&c,&d); //輸入各個(gè)功率值 p=a+b+c+d; //求總功率 printf("總功率為:"); printf("%ld\n",p); //輸出總功率的值return0;}【案例導(dǎo)入】:案例運(yùn)行結(jié)果思考:數(shù)據(jù)類型有什么意義?4.1PARTONEC語(yǔ)言數(shù)據(jù)類型4.1.1常量常量是指程序運(yùn)行過(guò)程中其值不發(fā)生變化的量。C語(yǔ)言中的常量有整型常量、實(shí)型常量、字符常量、字符串常量和符號(hào)常量等。1.整型常量整型常量就是整常數(shù),有以下三種表示形式。(1)十進(jìn)制數(shù):以非0數(shù)字開頭的數(shù),如123、-123等,其每個(gè)數(shù)字位可以是0~9。(2)八進(jìn)制數(shù):以數(shù)字0開頭的數(shù),如0123、-0123等,其每個(gè)數(shù)字位可以是0~7。(3)十六進(jìn)制數(shù):以0x(或0X)開頭的數(shù),如0xffff、0x1111、-0x123等,其每個(gè)數(shù)字位可以是0~9、A~F(或a~f)。2.實(shí)型常量

實(shí)型常量在C語(yǔ)言中又被稱為實(shí)數(shù)或浮點(diǎn)數(shù)。在C語(yǔ)言中,實(shí)數(shù)只采用十進(jìn)制表示。它有兩種表示形式。(1)普通十進(jìn)制形式。這種形式的數(shù)由整數(shù)部分、小數(shù)點(diǎn)和小數(shù)部分組成(注意:必須有小數(shù)點(diǎn)),如3.14、0.618、.520、1314.、234.0、0.0等。(2)指數(shù)形式。這種形式的數(shù)由三部分組成:實(shí)數(shù)部分、字母E或e和整數(shù)部分。例如,1.23×104可以表示為1.23E4或1.23e4。3.字符常量C語(yǔ)言中的字符常量是用單引號(hào)(')括起來(lái)的一個(gè)字符。如'A'、'x'、'D'、'?'、'3'、'X'等都是字符常量。它有以下特點(diǎn):(1)字符常量只能用單引號(hào)括起來(lái)。(2)字符常量只能是單個(gè)字符,不能是字符串。(3)字符可以是計(jì)算機(jī)系統(tǒng)所采用的字符集中的任意字符。字符在計(jì)算機(jī)內(nèi)是用二進(jìn)制代碼來(lái)表示的,大多數(shù)計(jì)算機(jī)系統(tǒng)采用ASCII碼?!纠?-1-1】分析以下程序,思考程序運(yùn)行結(jié)果是否符合所學(xué)知識(shí)。#include<stdio.h>intmain() //主函數(shù){ inta=123,b=-0x123; //整型常量實(shí)例 floatc=3.14,d=.520,e=1.23e4; //實(shí)型常量實(shí)例 charf='A',g='?'; //字符常量實(shí)例 printf("%d %d\n",a,b); //輸出整型數(shù)據(jù) printf("%f %f %f\n",c,d,e); //輸出實(shí)型數(shù)據(jù) printf("%c %c\n",f,g); //輸出字符型數(shù)據(jù)return0;}程序運(yùn)行結(jié)果如圖所示。4.字符串常量字符串常量是用雙引號(hào)括起來(lái)的字符序列,如"string"、"Thisismyfirstprogram!"。C語(yǔ)言規(guī)定字符串的存儲(chǔ)方式如下:字符串中的每個(gè)字符(轉(zhuǎn)義字符只能被看成一個(gè)字符)按照它們的ASCII碼的二進(jìn)制形式存儲(chǔ)在內(nèi)存中,并在存放字符串中最后一個(gè)字符的位置后面再存入一個(gè)字符'\0'(ASCII碼為0的字符),這是字符串結(jié)束標(biāo)志。5.符號(hào)常量C語(yǔ)言允許將程序中的常量定義為一個(gè)標(biāo)識(shí)符,稱為符號(hào)常量。符號(hào)常量一般使用大寫英文字母表示,以區(qū)別于用小寫英文字母表示的變量。符號(hào)常量在使用前必須先定義,定義的形式如下:#define標(biāo)識(shí)符常量其中,#define是宏定義命令的專用定義符,標(biāo)識(shí)符是符號(hào)常量的名稱,常量可以是前面介紹的幾種類型中的任何一種。4.1.2變量

在程序運(yùn)行過(guò)程中,其值能被改變的量稱為變量。

C語(yǔ)言中變量的名稱用標(biāo)識(shí)符來(lái)表示。所謂標(biāo)識(shí)符,是指用來(lái)標(biāo)識(shí)程序中用到的變量名、函數(shù)名、類型名、數(shù)組名、文件名及符號(hào)常量名等的有效字符序列。

合法的標(biāo)識(shí)符

C語(yǔ)言規(guī)定標(biāo)識(shí)符只能由字母、數(shù)字和下畫線三種字符組成,且第一個(gè)字符必須為字母或下畫線。例如:

year、sum、student_name、_above、lotus_1_2_3是合法的標(biāo)識(shí)符。

M.D.john、$123、#33、3d64、a>b是不合法的標(biāo)識(shí)符。變量的命名規(guī)則小貼士變量的命名規(guī)則如下:(1)變量名只能由字母、數(shù)字和下畫線組成,且第一個(gè)字符不能為數(shù)字。(2)變量名應(yīng)做到望文知意,便于記憶和閱讀,最好采用英文單詞或其組合,不要使用漢語(yǔ)拼音。(3)變量名要符合言簡(jiǎn)意賅的原則。例如,變量名MaxVal就比MaxValueUntilOverflow好用。(4)當(dāng)變量名由多個(gè)單詞組成時(shí),每個(gè)單詞的第一個(gè)字母大寫,其余字母全部小寫。(5)盡量避免變量名中出現(xiàn)數(shù)字編號(hào),如Value1、Value2等。(6)變量名不能與系統(tǒng)中的關(guān)鍵字或特定字相同,也要避免相似。1.整型變量

整型變量可分為基本型、短整型、長(zhǎng)整型和無(wú)符號(hào)型。無(wú)符號(hào)型又分為無(wú)符號(hào)整型、無(wú)符號(hào)短整型和無(wú)符號(hào)長(zhǎng)整型。基本型以int表示。短整型以shortint表示,或以short表示。長(zhǎng)整型以longint表示,或以long表示。無(wú)符號(hào)整型以u(píng)nsignedint表示。無(wú)符號(hào)短整型以u(píng)nsignedshort表示。無(wú)符號(hào)長(zhǎng)整型以u(píng)nsignedlong表示。整型數(shù)據(jù)所占內(nèi)存及數(shù)值范圍

以IBMPC和TurboC語(yǔ)言為例,整型數(shù)據(jù)所占內(nèi)存及數(shù)值范圍見表2-4-1,表中方括號(hào)表示內(nèi)容可選。整型數(shù)據(jù)所占內(nèi)存及數(shù)值范圍

以IBMPC和TurboC語(yǔ)言為例,整型數(shù)據(jù)所占內(nèi)存及數(shù)值范圍見表2-4-1,表中方括號(hào)表示內(nèi)容可選。整型變量的定義整型變量的定義如下所示:【例4-1-2】企業(yè)調(diào)研中需計(jì)算兩個(gè)統(tǒng)計(jì)a、b數(shù)據(jù)的和,試編程解決。#include<stdio.h>intmain(){ inta,b,c; //定義a、b、c為整型變量

a=3276; b=3; c=a+b; printf("c=%d",c); //按整型格式輸出變量c的值return0;}程序運(yùn)行結(jié)果如圖所示:2.實(shí)型變量C語(yǔ)言中的實(shí)型變量分為單精度(float型)和雙精度(double型)兩類。實(shí)型變量必須在使用前加以定義。例如:floatx,y; /*指定x、y為單精度實(shí)數(shù)*/doublez; /*指定z為雙精度實(shí)數(shù)*/

通常,一個(gè)單精度實(shí)數(shù)在內(nèi)存中占4字節(jié)(32位),一個(gè)雙精度實(shí)數(shù)在內(nèi)存中占8字節(jié)。單精度實(shí)數(shù)提供6位或7位有效數(shù)字,雙精度實(shí)數(shù)提供15位或16位有效數(shù)字,數(shù)值范圍隨計(jì)算機(jī)系統(tǒng)而異?!纠?-1-3】某企業(yè)工程應(yīng)用中經(jīng)常需要根據(jù)圓的半徑,計(jì)算圓的周長(zhǎng)和面積,試編程解決。#include<stdio.h>#definePI3.1416 /*定義符號(hào)常量PI*/main(){ floatr,c,s; printf("請(qǐng)輸入半徑的值:"); scanf("%f",&r); c=2*PI*r; /*編譯時(shí)用3.1416替換PI*/ s=PI*r*r; printf("c=%f,s=%f",c,s); return0;}程序運(yùn)行結(jié)果如圖所示:

定義變量時(shí)僅為變量分配內(nèi)存,并不對(duì)這部分內(nèi)存進(jìn)行清空操作,其中的原值會(huì)被保留且無(wú)法確定。

C語(yǔ)言規(guī)定,可以在定義變量的同時(shí)給變量賦初值。例如:

inta=3,b=4;

floatPI=3.1415926;

charch1,ch2='a'; /*可對(duì)部分變量賦初值*/小貼士練一練

編程實(shí)現(xiàn):輸入圓柱體的高和半徑,求圓柱體的體積。4.2PARTTWO點(diǎn)亮一個(gè)LED的控制系統(tǒng)設(shè)計(jì)

日常生活中,進(jìn)入房間按一次開關(guān),電源導(dǎo)通,就可以打開燈,再按一次開關(guān),電源斷開,就可以熄滅燈。本章要求利用Arduino開發(fā)板,通過(guò)程序設(shè)計(jì)來(lái)點(diǎn)亮LED?!景咐龑?dǎo)入】4.2.1硬件電路設(shè)計(jì)

所需硬件包括:

ArduinoUNO(1塊)。

面包板(1塊)。

220電阻(1個(gè))。

LED(1個(gè))。

面包板導(dǎo)線(2根)。4.2.1硬件電路設(shè)計(jì)

(a)ArduinoUNO(b)面包板

(c)電阻(d)LED(e)面包板導(dǎo)線硬件連接示意圖

使用ArduinoIDE編寫源程序,如圖。4.2.2程序設(shè)計(jì)程序代碼如下:4.2.2程序設(shè)計(jì)正確完成操作步驟,在程序上傳成功之后,Arduino開發(fā)板會(huì)自動(dòng)重啟,如果一切正常,將會(huì)看到LED被點(diǎn)亮。

4.2.3任務(wù)實(shí)施及效果練一練

如何實(shí)現(xiàn)LED閃爍?參考程序

voidsetup(){pinMode(13,OUTPUT); //將13號(hào)引腳設(shè)置為輸出引腳}voidloop()

//系統(tǒng)調(diào)用,一直循環(huán)執(zhí)行下去{digitalWrite(13,HIGH); //13號(hào)引腳輸出高電平,將LDE點(diǎn)亮delay(1000); //延時(shí)1秒digitalWrite(13,LOW); //13號(hào)引腳輸出低電平,將LED熄滅delay

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論