燕哲
摘要:隨著電子技術(shù)的不斷發(fā)展,單片機技術(shù)顯得越來越重要,很多技工學(xué)校都把單片機技術(shù)作為電子專業(yè)或者自動化控制專業(yè)的一門必修課程。但是在單片機的教學(xué)中,也存在著很多困難,尤其是對于技工類學(xué)校,學(xué)生多為初中畢業(yè)生,英文基礎(chǔ)較為薄弱,學(xué)習(xí)起來難度較大,老師教起來也頗為費勁,教學(xué)效果不是很理想。Arduino作為一款開源軟件,簡單靈活,使用方便,配合ArduBlock的圖形化編程,可以極大地降低單片機學(xué)習(xí)的難度。本文以七段數(shù)碼管的顯示為例,結(jié)合技工院校學(xué)生的實際情況,探索單片機教學(xué)的新思路,僅供大家參考。
關(guān)鍵詞:單片機教學(xué) Arduino ArduBlock ArduBlock圖形化編程
一、技工院校中單片機教學(xué)的現(xiàn)狀
筆者是一名技工院校教師,從事單片機教學(xué)也有幾年時間。單片機作為電子或者自動化控制專業(yè)的一門必修課程,在很多學(xué)校都有開設(shè)。在多數(shù)技工院校,生源多為初中畢業(yè)生,且經(jīng)過優(yōu)秀普通高中的篩選后,進入到學(xué)校就讀的學(xué)生基礎(chǔ)并不扎實,學(xué)習(xí)主動性也不是很高,而單片機作為一門需要語言編程,需要英文基礎(chǔ)又需要邏輯思維能力的課程,在實際教學(xué)中學(xué)生學(xué)習(xí)起來頗有難度。學(xué)生即便剛開始有興趣,但是碰到編程就不會,看到英文就頭疼,久而久之,對學(xué)生的學(xué)習(xí)積極性造成很大影響,教學(xué)效果也不盡如人意。
以筆者的實際教學(xué)效果為例,筆者學(xué)校學(xué)生多為初中畢業(yè)生,根據(jù)專業(yè)方向的區(qū)別一般在二年級或者三年級開設(shè)單片機課程。學(xué)生在剛開始流水燈教學(xué)時基本上都能熟練掌握;當(dāng)加入定時器,進入數(shù)碼管學(xué)習(xí)后,只有一半學(xué)生能夠掌握;繼續(xù)進行到中斷,點陣液晶顯示后只能有四分之一的學(xué)生能夠跟上了;到了后期的各種傳感器控制、雙機通信等學(xué)生更是一頭霧水,只有極少數(shù)學(xué)生能夠跟上進度。因此越往后進行就越難教學(xué),多數(shù)學(xué)生只是機械地把老師給出的程序敲進去進行驗證,并不理解。課程學(xué)完后,學(xué)生只能說是了解了單片機,并不能夠掌握。因此,在多數(shù)技工院校中,單片機課程變成了極少數(shù)精英學(xué)生才愿意學(xué)、學(xué)得懂的課程,多數(shù)老師也不愿意承擔(dān)該課程的教學(xué)工作。
二、Arduino和ArduBlock圖形化編程軟件介紹
1.Arduino介紹
Arduino是一款便捷靈活、方便上手的開源電子原型平臺。包含硬件(各種型號的Arduino板)和軟件(Arduino IDE)。它是由一個歐洲開發(fā)團隊于2005年冬季開發(fā)的,目前可以說還處于起步階段,市場上的應(yīng)用還不是很多。Arduino包含兩個主要的部分:硬件部分是可以用來做電路連接的Arduino電路板;另外一個則是Arduino IDE,計算機中的程序開發(fā)環(huán)境。
2.ArduBlook圖形化編程軟件
ArduBlock是一款專門為Arduino設(shè)計的圖形化編程軟件,由上海新車間創(chuàng)客開發(fā)。ArduBlock軟件是一款A(yù)rduino官方編程環(huán)境的第三方軟件,目前必須依附于Arduino軟件下運行,區(qū)別于Arduino傳統(tǒng)的文本式編程環(huán)境。ArduBlock是以圖形化積木搭建的方式編程的。這樣的方式會使編程的可視化和交互性加強,編程門檻大大降低,即使沒有編程經(jīng)驗的人也可以輕松嘗試給Arduino控制器編寫程序。具體的軟件界面在后面應(yīng)用實例中大家會看到。
Arduino結(jié)合ArduBlock可以讓教師非常方便地完成程序編寫,下載調(diào)試,對于沒有語言基礎(chǔ)的技工院校學(xué)生是非常方便的。因為免去了傳統(tǒng)單片機的C語言或者匯編語言的學(xué)習(xí),不需要英文基礎(chǔ),同時加入了圖形化編程,學(xué)生學(xué)習(xí)起來會非常直觀,也可以大大激發(fā)學(xué)生的學(xué)習(xí)興趣。下面本人通過實際教學(xué)中的案例(七段數(shù)碼管的控制)來為大家介紹下這兩款軟件的使用。
三、教學(xué)實例:控制七段數(shù)碼管顯示器
在此例子中,教師選用的是Arduino Uno。這是一款基于ATmega328P芯片的單片機開發(fā)板,ATmega328P具有32KB閃存(其中0.5KB被啟動加載器占用),它還具有2KB SRAM和1KB EEPROM(可以利用EEPROM庫讀取和寫入)。該開發(fā)板由14路數(shù)字輸入/輸出引腳(其中6路可以用作PWM輸出)、6路模擬輸入、1個16MHz的石英晶體振蕩器、一個USB接口、1個電源接頭、1個ICSP數(shù)據(jù)頭以及1個復(fù)位按鈕組成。Arduino Uno包含了單片機運行所需的所有要素,只需要用USB連接線將其連接到計算機,或利用AC-DC適配器或者電池供電后即可啟動。Arduino Uno的特色在于將Atmega16U2編程為一個USB-to-serial轉(zhuǎn)換器,以便能簡單、輕松和自由地安裝驅(qū)動程序。目前,Arduino Uno已成為Arduino主推的產(chǎn)品。
七段數(shù)碼管顯示器是人們生活中常用的顯示器件,也是單片機教學(xué)中非常重要的一部分,具體原理我們在此就不再介紹。在此教學(xué)案例中教師選用單個七段共陽型數(shù)碼管(不控制小數(shù)點)。分析電路圖可知我們需要用到Arduino的6個數(shù)字引腳,在此我們使用引腳3-8。因為七段數(shù)碼管顯示器也是LED顯示的一種,因此我們需要加上1kΩ的限流電阻。
因為選用的數(shù)碼管為共陽型,根據(jù)數(shù)碼管顯示原理,只有當(dāng)Arduino的引腳輸出低電位時,對應(yīng)的LED才會點亮。因此,教師需要在程序的初始化中將每個針腳都輸出高電平,然后再將需要的引腳降低為低電平,以便確保數(shù)碼管能夠穩(wěn)定顯示。在此先嘗試顯示單個數(shù)字6,然后再擴展0到9循環(huán)顯示。根據(jù)數(shù)碼管的顯示原理可知,教師要將數(shù)碼管的a、c、d、e、f、g置為低電平,對應(yīng)的需要將Arduino的3-8腳改變?yōu)榈停ǔ跏蓟癁楦撸?。在此因為印刷問題,圖不再此文顯示。
在ArduBlock軟件中,各個函數(shù)命令被做成了一個個的功能方塊,需要什么命令教師只需要從左邊找到對應(yīng)的方塊拖到右邊編輯區(qū)即可。若是想要移除某個功能,直接拖到左半邊即可,使用起來非常方便。數(shù)字6的數(shù)碼管顯示程序編輯完成后點擊界面上方的“上載到Arduino”按鈕,程序便會被上傳到Arduino開發(fā)板中,同時軟件會自動生成對應(yīng)的程序代碼,不需要手動編寫。上傳后自動生成的程序代碼如下圖所示。
從圖中可以看出,即便是語言編程,Arduino也并不復(fù)雜,看起來也是簡單明了。以上例子是單獨顯示一個數(shù)字6的程序,那么如果要顯示0到9,是不是程序會很長效率又很低呢?當(dāng)然不是,C語言中教師經(jīng)常會用到子程序來簡化程序,主程序中我們只需要調(diào)用相應(yīng)的子程序即可。在ArduBlock軟件中,教師同樣可以引入子程序,該功能模塊也在“控制”中,名稱即為“子程序”,點擊該模塊教師可以對它進行重命名。在此教師將剛剛設(shè)置好的初始化程序命名為reset子程序,數(shù)字6的函數(shù)命名為set6子程序。以此類推,我們分別寫出數(shù)字0到9的子程序,分別命名為set0到set9。因為是0到9循環(huán)顯示,還需要用到延遲函數(shù)。ArduBlock也把延遲函數(shù)做成了功能模塊,只需要拖出來,修改好后面的時間即可,不像傳統(tǒng)單片機還需要計算延時時間。引入子程序后整個程序看起來就簡單多了,也很容易理解。這些子程序的模塊只需要擺放到右側(cè)空余地方即可,堆疊起來也沒有關(guān)系。在此因為印刷問題,圖不再此文顯示。
通過這樣一個實際教學(xué)案例,相信大家對Arduino和ArduBlock都已經(jīng)有了一個初步的認(rèn)識??梢钥闯?,在ArduBlock軟件中,沒有了傳統(tǒng)的c語言出現(xiàn),各種命令都被做成了小模塊,而且可以漢化過來變成全中文界面,看起來非常直觀,搭積木的形式也可以很清楚的理清程序的流程,讓學(xué)生更加容易理解。實際教學(xué)中利用ArduBlock圖形化編程軟件配合Arduino開發(fā)板使用,可以讓學(xué)生真正做到零基礎(chǔ)學(xué)習(xí)程序控制,降低單片機學(xué)習(xí)難度,大大激發(fā)學(xué)生的學(xué)習(xí)興趣。
四、小結(jié)
筆者在經(jīng)過一個學(xué)期兩個班級的實際教學(xué)后,將教學(xué)效果總結(jié)如下:對于流水燈相關(guān)的程序,所有學(xué)生都能熟練掌握,而且可以自主變化;對于串口通信、馬達控制、傳感器驅(qū)動等相關(guān)的程序,絕大多數(shù)學(xué)生也可以熟練掌握。最為重要的是,學(xué)生覺得單片機不再高深莫測,而是觸手可及的東西,稍微動動腦子就可以完成很多有意思的試驗,極大地提高了學(xué)生學(xué)習(xí)單片機的興趣。
當(dāng)然,Arduino在目前來說也有一定的局限性,筆者認(rèn)為更適合做一些小型的項目,市場應(yīng)用也不是很廣泛,可以作為單片機學(xué)習(xí)的入門,如果要真正深入學(xué)習(xí)單片機,可能還是要去學(xué)習(xí)AVR、ARM嵌入式等。但是對于零基礎(chǔ)的技校生來說剛剛合適,當(dāng)然在實際教學(xué)中教師也可以讓學(xué)生先接觸Arduino,當(dāng)學(xué)生有了學(xué)習(xí)興趣和一定的程序基礎(chǔ)后再去學(xué)習(xí)AVR、ARM等,讓學(xué)生也有一個循序漸進的過程,以后接受語言編程相對也會更加容易一些。正所謂師傅領(lǐng)進門,修行在個人,作為老師,需要做的也就是幫學(xué)生打開單片機學(xué)習(xí)的大門,剩下的就是靠興趣去引導(dǎo)學(xué)生不斷探索學(xué)習(xí)。