廣東理工學(xué)院電氣工程系 張曉亞 唐東成 任 瑾 鄧超兵 李欣雪
淺談C語言在單片機(jī)中的運(yùn)用
廣東理工學(xué)院電氣工程系 張曉亞 唐東成 任 瑾 鄧超兵 李欣雪
C語言是一門高級(jí)的計(jì)算機(jī)語言,很容易被初學(xué)者讀懂,并接受。這也是工科類等非計(jì)算機(jī)專業(yè)為什么在學(xué)習(xí)程序設(shè)計(jì)的時(shí)候,大多數(shù)院校都選擇C語言程序設(shè)計(jì)為教材,并結(jié)合以軟件VC++6.0為輔上機(jī)掌握C語言知識(shí)的原因。C語言是在培養(yǎng)應(yīng)用型人才的工科類中也是一種非常重要的語言基礎(chǔ),例如在單片機(jī)和嵌入式中,C語言具有舉足輕重的作用。
C語言;單片機(jī);工科類
隨著計(jì)算機(jī)應(yīng)用的發(fā)展,單片機(jī)微型計(jì)算機(jī)在人們?nèi)粘5纳钪袘?yīng)用的也就越來越廣泛,甚至從工業(yè)到農(nóng)業(yè)及第三產(chǎn)業(yè)都會(huì)有涉及到。所以很有必要了解單片機(jī)的控制原理及編程設(shè)計(jì)原理。
目前在單片機(jī)編程過程中主要有匯編語言和C語言兩種。但是匯編語言的編寫程序的難度要比C語言編程的難度大,不容易被學(xué)生理解和接受。運(yùn)用匯編語言的前提是要對(duì)單片機(jī)的程序執(zhí)行流程及內(nèi)部結(jié)構(gòu)工作原理都要非常熟悉,才能運(yùn)用自如。另外匯編語言可移植性比較差,開發(fā)效率不高,造成了在目前很少運(yùn)用匯編語言來開發(fā)產(chǎn)品。在教學(xué)的過程中,學(xué)生對(duì)用匯編語言來編寫單片機(jī)的項(xiàng)目代碼的學(xué)習(xí)積極性遠(yuǎn)不如用用C語言編程。
C語言是面向過程的一種語言,比較符合事物發(fā)展的過程規(guī)律。C語言按照事物發(fā)展的邏輯很容易編寫代碼,并且C語言對(duì)平臺(tái)硬件的要求不高,不依賴硬件的高內(nèi)存,這點(diǎn)和匯編語言又有很大區(qū)別。另外C語言的的軟件環(huán)境要求比較低,目前的計(jì)算機(jī)都能達(dá)到要求,學(xué)生完全可以在自己的筆記本上安裝,只要有閑暇時(shí)間都可以學(xué)習(xí),相比較匯編語言,學(xué)生的積極性比較高,他們學(xué)習(xí)C語言的自信心也就提高了很多。另外C語言的通用性比較強(qiáng),在編寫程序的過程中,實(shí)現(xiàn)相同的功能,完全可以編成實(shí)現(xiàn)程序的功能模塊,在需要用的時(shí)候直接調(diào)用即可,不需要再重新編寫源程序。
C語言被認(rèn)為是使用最廣泛的可編程嵌入式處理器的語言,在工科類的學(xué)習(xí)中特別是單片機(jī)的學(xué)習(xí)過程中,C語言一般都會(huì)作為基礎(chǔ)專業(yè)課學(xué)習(xí)是有一定的道理。在單片機(jī)的編程學(xué)習(xí)中利用了大量的C語言現(xiàn)有的庫函數(shù),并且單片機(jī)的許多工具包也都是由C語言來編寫的。針對(duì)有C語言基礎(chǔ)的同學(xué),編程的基本概念知識(shí)點(diǎn),數(shù)據(jù)類型,各種運(yùn)算符表達(dá)式,控制結(jié)構(gòu)語句,數(shù)組,輸入輸出函數(shù)及內(nèi)部數(shù)據(jù)處理等等知識(shí)點(diǎn)均可以直接在單片機(jī)的簡(jiǎn)單項(xiàng)目中使用,并加以練習(xí),大大提高學(xué)生學(xué)習(xí)的積極性和主動(dòng)性。不然針對(duì)理工科的學(xué)生,學(xué)習(xí)了C語言很難有機(jī)會(huì)把學(xué)到的知識(shí)運(yùn)用到實(shí)際生活中,只能使學(xué)習(xí)變得機(jī)械乏味。當(dāng)然C語言衍生的其他語言,如C++,Java,C#等,但是針對(duì)非計(jì)算機(jī)專業(yè)的工科類學(xué)生,相對(duì)來講也很難接觸,何談使用其語言做項(xiàng)目。并且C語言由于自身的特點(diǎn),用C語言編寫單片機(jī)的程序是目前學(xué)習(xí)單片機(jī)的大勢(shì)所趨。
針對(duì)沒有C語言基礎(chǔ)的同學(xué)來講,一般情況下只要求理解并掌握順序結(jié)構(gòu),循環(huán)結(jié)構(gòu),選擇結(jié)構(gòu)及函數(shù)的調(diào)用和數(shù)組等知識(shí)點(diǎn)就夠了,沒有必要要求掌握指針等概念,大大降低了學(xué)生的負(fù)擔(dān)。匯編語言可以輔助理解單片機(jī)的內(nèi)部結(jié)構(gòu)及內(nèi)部資源。兩者結(jié)合,針對(duì)單片機(jī)的一些經(jīng)典的實(shí)踐項(xiàng)目,如花樣流水燈,數(shù)碼管的靜態(tài)及動(dòng)態(tài)掃描顯示,獨(dú)立鍵盤和矩陣鍵盤的調(diào)節(jié)數(shù)碼管的變化,音樂播放器,萬年歷及搶答器等等項(xiàng)目都可以在教師的講解下,讓學(xué)生理解其中的道理,自己主動(dòng)編程調(diào)試完成相應(yīng)的任務(wù)。這樣既調(diào)動(dòng)了他們的積極性,又可以在實(shí)踐中找到他們的興趣點(diǎn),為以后的工作做準(zhǔn)備。
學(xué)好單片機(jī)最好的途徑就是動(dòng)手操作,在學(xué)習(xí)過程中有些院校會(huì)配備相應(yīng)的開發(fā)板,但是大多數(shù)院校需要學(xué)生通過仿真軟件來完成項(xiàng)目的實(shí)現(xiàn)。涉及到的軟件有Keil和Protues,Keil C51是一款提供51系列單片機(jī)編程,編譯,調(diào)試于一體的開發(fā)平臺(tái)。Keil的界面比較友好,使用比較方便易懂,功能比較全,里面幾乎包含了目前流行的各大廠家生產(chǎn)的單片機(jī)芯片,在編程調(diào)試時(shí)各個(gè)芯片的端口及串行口通信所有的信息都可以通過調(diào)試調(diào)用相應(yīng)的按鈕都可以實(shí)時(shí)觀測(cè)到程序運(yùn)行的過程。并且Keil中C程序,可以通過調(diào)試隨時(shí)修改,重新進(jìn)行編譯,通過查看仿真結(jié)果確定是否成功,效果非常好。Protues軟件也是目前運(yùn)用比較廣泛的仿真軟件,特別是針對(duì)工科類的學(xué)生,在學(xué)習(xí)很多專業(yè)課以后,很難有機(jī)會(huì)真正把上課所學(xué)的知識(shí)點(diǎn)實(shí)際操作運(yùn)用,該軟件彌補(bǔ)了這個(gè)缺陷,可以把工科類所學(xué)的專業(yè)課相應(yīng)的知識(shí)點(diǎn)通過仿真觀察到相應(yīng)的效果。除此之外,就是可以由Protues得到由單片機(jī)開發(fā)的項(xiàng)目原理圖,不需要實(shí)際當(dāng)中的電路板,它可以識(shí)別由C語言在Keil軟件中編寫的程序,檢測(cè)學(xué)生自己編寫的程序是否達(dá)到自己預(yù)期的目標(biāo)。
在教學(xué)的過程中,無論是C語言還是單片機(jī),經(jīng)常跟學(xué)生說∶:只要你寫的程序合乎你自己邏輯,寫的合情合理,那么你寫的程序肯定沒問題,即便是有問題,在Keil編程軟件中耐心調(diào)試,最終一定會(huì)達(dá)到你要的效果。他們大多數(shù)都愿意主動(dòng)編寫一些程序代碼來實(shí)現(xiàn)他們想要的效果。
學(xué)習(xí)是一個(gè)循序漸進(jìn)的過程,最為重要的是讓學(xué)生看到自己從書本上所學(xué)的知識(shí)點(diǎn)是有用的,可以用到實(shí)際當(dāng)中。單片機(jī)的出現(xiàn)讓C語言有了實(shí)踐性的意義,加上Keil和Protues兩個(gè)軟件的結(jié)合,可以使學(xué)生有了相對(duì)獨(dú)立的編程思想,不再是以老師為主。在上機(jī)實(shí)踐的時(shí)候,一旦有問題出現(xiàn),教師不再像以前一味的去代替學(xué)生調(diào)試程序,找錯(cuò)誤的地方,這樣下去只能使學(xué)生形成惰性,況且在編程的過程中一個(gè)微不足道的細(xì)節(jié)可能會(huì)導(dǎo)致整個(gè)程序編譯不成功,有時(shí)候老師也會(huì)苦惱的。在用單片機(jī)完成實(shí)際項(xiàng)目的時(shí)候,學(xué)生學(xué)習(xí)的積極性被帶動(dòng)起來,他們遇到問題會(huì)主動(dòng)的彼此討論,查閱資料,真正的從“要我學(xué)”變成了“我要學(xué)”。另外就是在用Keil軟件編寫單片機(jī)代碼的時(shí)候,很多同學(xué)普遍出現(xiàn)的一個(gè)問題是看不懂程序在編譯以后出現(xiàn)的錯(cuò)誤提示,本質(zhì)原因就是英語基礎(chǔ)不到位。針對(duì)這個(gè)問題,最好的解決辦法就是在學(xué)生親自動(dòng)手實(shí)際操作以后出現(xiàn)問題了,把提示的信息單獨(dú)拿出來給大家翻譯講解,并告訴其解決辦法。還有就是學(xué)生常犯的另外一個(gè)錯(cuò)就是想當(dāng)然,不注意邏輯上的銜接問題,程序運(yùn)行的結(jié)果達(dá)不到效果。這就需要在教學(xué)的過程中,加強(qiáng)學(xué)生的練習(xí),多列舉一些經(jīng)典的例子。讓學(xué)生通過現(xiàn)象看本質(zhì),明白其中的道理,使他們知其然,也要知其所以然,讓他們?cè)诿看紊险n都有所收獲,有所感悟。
C語言對(duì)初學(xué)者而言是全新概念,針對(duì)非計(jì)算機(jī)專業(yè)的學(xué)生可能會(huì)遇到一切阻礙,主要是在書本上學(xué)到的知識(shí)看不到它的使用價(jià)值。單片機(jī)的出現(xiàn)讓學(xué)生感受到C語言的作用,我們?nèi)粘I钪薪佑|到的電子類產(chǎn)品完全可以用C語言編程實(shí)現(xiàn)其控制,這也揭開了現(xiàn)代科技神秘的面紗,讓學(xué)生充分感受C語言的魅力。
[1]張德偉.單片機(jī)課程教學(xué)模式的探索與實(shí)踐[J].中國(guó)科技,2007(6): 268-270.
[2]裴霞.C語言課程的教與學(xué)改革初探[J].赤峰學(xué)院學(xué)報(bào),2014(7): 253-264.
[3]胡建波.何守亮.單片機(jī)原理與應(yīng)用[M].2015(10).
[4]程傳鵬.基于大學(xué)生心理特點(diǎn)的C語言教學(xué)方法[J].計(jì)算機(jī)教育,2012(1):68-71.
張曉亞(1987—),女,河南漯河人,碩士研究生,助教,研究方向:過程工業(yè)的故障診斷。