張婧婧
(新疆農(nóng)業(yè)大學(xué) 計(jì)算機(jī)與信息工程學(xué)院,新疆 烏魯木齊 830052)
C 語言是一門通用、面向過程的計(jì)算機(jī)程序設(shè)計(jì)語言。Proteus軟件是一款蘊(yùn)含巨大的教學(xué)資源,用于模擬各類電路、微控系統(tǒng)、單片機(jī)及嵌入式系統(tǒng)設(shè)計(jì)的EDA仿真平臺。在Proteus軟件中演繹C語言教學(xué)專題無疑是程序設(shè)計(jì)類課程的一種全新嘗試。架構(gòu)于硬件仿真平臺之上的語言類課程教學(xué),旨在為學(xué)習(xí)者還原課程的真實(shí)應(yīng)用情景,為教學(xué)者瞄準(zhǔn)學(xué)以致用的教學(xué)目標(biāo)[1]。
首先,作為教學(xué)助手,Proteus軟件的教學(xué)應(yīng)用前景廣闊,支持C語言和匯編語言的編程[2]。就微程序控制技術(shù)而言,基于C語言的程序設(shè)計(jì)更受青睞,因此用于情景式教學(xué)的原型案例資源豐富,易于為C語言教學(xué)設(shè)計(jì)者提供各類專題及教學(xué)素材。
其次,應(yīng)用Proteus仿真平臺開展C語言程序設(shè)計(jì)致力于豐富初學(xué)者的編程體驗(yàn)。例如,電路的仿真過程通常融入功能模塊設(shè)計(jì),嚴(yán)密的邏輯推理能夠強(qiáng)化初學(xué)者對C語言各類程序結(jié)構(gòu)(分支、循環(huán)、遞歸等)的理解和運(yùn)用;定義仿真電路的輸入、輸出部分,如按鍵、指示燈的設(shè)置,數(shù)碼管、傳感器的應(yīng)用等能夠大幅提升初學(xué)者對各類變量、數(shù)組、指針、作用域規(guī)則等概念的認(rèn)識和把握;仿真電路追求硬件功能的完整性,往往包含輸入、存儲、控制、顯示等模塊,在此基礎(chǔ)上的編程能夠加深初學(xué)者對C程序完整性設(shè)計(jì)的理解;在仿真電路的運(yùn)行過程中,豐富的虛擬資源和形象的仿真效果能夠讓編程、調(diào)試過程更加直觀、生動,且Proteus仿真軟件簡單易學(xué)、容易上手,適于初學(xué)者的實(shí)踐和體驗(yàn)。
最后,仿真模型能夠?yàn)榻虒W(xué)設(shè)計(jì)者提供生動的教學(xué)場景,優(yōu)化教學(xué)資源。以簡易交通燈的C語言設(shè)計(jì)為例,在授課過程中,教學(xué)者可以借助仿真電路展現(xiàn)動態(tài)的程序設(shè)計(jì)過程(即紅、黃、綠燈的閃爍),如圖1所示。其中,憑借程序的隱蔽性和仿真的靈活性,教學(xué)互動過程將更具吸引力和趣味性,另外仿真平臺還支持C程序運(yùn)行過程的反復(fù)推理和演繹,使學(xué)習(xí)者自覺融入其情景設(shè)計(jì)中。
此外,鑒于微控制器的程序存儲及運(yùn)算能力有限,系統(tǒng)的硬件仿真將有助于促進(jìn)設(shè)計(jì)者對C程序算法[3]在時(shí)間和空間上優(yōu)劣與否進(jìn)行思考,進(jìn)而對程序算法提出更精細(xì)的要求,這對提高C語言程序設(shè)計(jì)質(zhì)量具有重要意義。
更值得一提的是,C語言作為微控系統(tǒng)、單片機(jī)及嵌入式系統(tǒng)設(shè)計(jì)的首選編程語言,在相應(yīng)課程開課過程中沒有分配獨(dú)立課時(shí),通常以自學(xué)為主。對電子類及相關(guān)專業(yè)的初學(xué)者而言,在C語言課程入門階段就接觸硬件仿真,對其將來的專業(yè)學(xué)習(xí)意義非凡。
圖1 交通燈系統(tǒng)的仿真電路
基于Proteus的仿真平臺進(jìn)行C語言課程的教學(xué)嘗試,其教學(xué)重點(diǎn)和難點(diǎn)在于如何忽略硬件對程序設(shè)計(jì)的“干擾”,為硬件“零”基礎(chǔ)的學(xué)習(xí)者提供“無障礙”的虛擬平臺,進(jìn)而在系統(tǒng)仿真中體會C語言編程的內(nèi)涵和魅力。以單片機(jī)的仿真模型為例,筆者將C語言案例教學(xué)設(shè)計(jì)的具體內(nèi)容解析如下,供相關(guān)教學(xué)設(shè)計(jì)者參考。
基于硬件設(shè)計(jì)平臺,C語言教學(xué)應(yīng)甄選硬件簡潔、情景直觀的系統(tǒng)作為原型案例。多模式的花樣流水燈的電路設(shè)計(jì)簡單,無需對硬件進(jìn)行深度學(xué)習(xí),如圖2所示。多路按鍵、多路LED燈、一位數(shù)碼管電路將分別指向分支語句、循環(huán)語句及數(shù)組的運(yùn)用,同時(shí)LED燈、數(shù)碼管的顯示過程還伴隨著延時(shí)子程序的反復(fù)調(diào)用,屬于復(fù)合結(jié)構(gòu)程序設(shè)計(jì)的原型案例,符合C語言教學(xué)用例的綜合評判。
C語言遵循結(jié)構(gòu)化程序設(shè)計(jì)的規(guī)則[4],利用仿真平臺進(jìn)行的C程序結(jié)構(gòu)分析無疑彰顯了仿真教學(xué)模式的天然優(yōu)勢。對初學(xué)者而言,較之其他開發(fā)工具,基于仿真模型的設(shè)計(jì)更容易分化程序結(jié)構(gòu)和構(gòu)思編程策略,如圖3所示。
圖3中,(a)和(b)兩幅仿真圖分別模擬按鍵發(fā)音和一位計(jì)數(shù)器的設(shè)計(jì)。在按鍵發(fā)音電路中,判斷按鍵是否按下,否則將執(zhí)行相應(yīng)的代碼是C語言中典型的多分支語句,可采用if…else結(jié)構(gòu)或switch…case結(jié)構(gòu)完成;在一位計(jì)數(shù)器的電路中,數(shù)碼管將會在0~9 之間循環(huán)顯示,且譯碼過程通常采用數(shù)組查詢方式,因此編程時(shí)需要定義數(shù)組且構(gòu)造循環(huán)結(jié)構(gòu),亦屬于C程序設(shè)計(jì)的典型應(yīng)用。
基于仿真平臺中的C程序設(shè)計(jì)與標(biāo)準(zhǔn)C語言設(shè)計(jì)運(yùn)行著不同的指令集[5],如果仿真案例僅以專題形式講授,教學(xué)設(shè)計(jì)者就必須為初學(xué)者厘清二者的區(qū)別和一致性。以單片機(jī)仿真設(shè)計(jì)為例,其C51的編程與標(biāo)準(zhǔn)C的編程在語法規(guī)定、程序結(jié)構(gòu)、編程技巧方面高度一致,但在數(shù)據(jù)類型、變量存儲模式、輸入輸出處理、函數(shù)等方面有一定的區(qū)別。例如,標(biāo)準(zhǔn)C中的頭文件是stdio.h,在單片機(jī)C51中的頭文件為reg51.h或reg52.h;再如常用函數(shù)printf在標(biāo)準(zhǔn)C中用于輸出字符至屏幕,而單片機(jī)中則輸出到串口等。
對各專業(yè)的初學(xué)者而言,不同指令集下編程必定會增加學(xué)習(xí)的難度。為了避免學(xué)習(xí)者的抵觸情緒,教學(xué)中應(yīng)該為其配套相應(yīng)的指令使用指南,梳理并解析兩類指令系統(tǒng)的區(qū)別與一致性。
圖2 多模式的花樣流水燈的仿真電路
圖3 各類典型的程序結(jié)構(gòu)案例
就C語言的教學(xué)目標(biāo)而言,學(xué)習(xí)者針對程序中結(jié)構(gòu)和算法的設(shè)計(jì)遠(yuǎn)遠(yuǎn)重要于對某類定義、數(shù)據(jù)處理模式的掌握。本著這一原則,教學(xué)實(shí)踐環(huán)節(jié)中,設(shè)計(jì)者還需要儲備仿真案例的程序模板,旨在跳過部分硬件驅(qū)動和數(shù)據(jù)處理模式的編程,同時(shí)弱化不同指令之間的區(qū)別,為初學(xué)者呈現(xiàn)與標(biāo)準(zhǔn)C語言近乎“無差別”的仿真設(shè)計(jì)平臺。
以水量檢測系統(tǒng)[6]為例,其程序模板如下:
基于硬件仿真平臺的C語言課程教學(xué)目前正處于課改的規(guī)劃和資源整合階段,尚無成熟的教材和豐富的教學(xué)資料,因此為教學(xué)設(shè)計(jì)相應(yīng)配套實(shí)驗(yàn)教材,是實(shí)施課程教學(xué)計(jì)劃的重要環(huán)節(jié)[7]。根據(jù)案例的選取和知識點(diǎn)的銜接,設(shè)計(jì)難度相當(dāng)、知識點(diǎn)匹配的實(shí)驗(yàn)項(xiàng)目無疑是對教學(xué)設(shè)計(jì)者的客觀要求。值得注意的是,在項(xiàng)目的設(shè)計(jì)階段,還需同時(shí)儲備程序模板和指令解析指南,供學(xué)習(xí)者在實(shí)踐過程中參考。
與C語言編譯器的功能不同,Proteus仿真軟件支持Keil C編譯器編譯的.HEX文件[8],并用于程序的加載和運(yùn)行,為此,針對Keil C編譯器的使用及Proteus仿真軟件的運(yùn)行編寫一部基本操作指南,即能幫助學(xué)習(xí)者在課程實(shí)踐中解決各類仿真操作的問題。
(1)課程知識點(diǎn)的銜接處理。在標(biāo)準(zhǔn)C語言的教學(xué)中,初學(xué)者很容易適應(yīng)該課程“從易到難”的教學(xué)進(jìn)度和“由淺入深”的推演原則;而在Proteus的硬件仿真平臺中,如何循序漸進(jìn)地分解程序設(shè)計(jì)的知識點(diǎn),并進(jìn)行硬件設(shè)計(jì)“不留痕跡”的銜接處理,對教學(xué)設(shè)計(jì)者提出很大的挑戰(zhàn)。
(2)軟、硬件的配套設(shè)計(jì)。為防止基于硬件仿真的C語言教學(xué)過程本末倒置,電路仿真適于選取硬件結(jié)構(gòu)簡單、程序算法復(fù)雜的案例進(jìn)行,這與程控系統(tǒng)設(shè)計(jì)的實(shí)際情況相互矛盾,因此在案例設(shè)計(jì)中,為了選取仿真電路和軟件設(shè)計(jì)都難度適宜的項(xiàng)目,設(shè)計(jì)者還需在仿真資源、程序模板、操作指南、指令解析等教學(xué)資料的準(zhǔn)備中權(quán)衡內(nèi)容,匹配素材。
基于仿真軟件的C語言課程教學(xué)屬于“軟”件“硬”學(xué)的課程改革和嘗試,一經(jīng)實(shí)施,定會與標(biāo)準(zhǔn)C語言的教學(xué)內(nèi)容之間展開博弈,在教學(xué)目標(biāo)、授課內(nèi)容、實(shí)踐方式上都表現(xiàn)出很大的差異。該模式能否對C語言教學(xué)產(chǎn)生深遠(yuǎn)影響還需要各種實(shí)施數(shù)據(jù)和分析,但能夠預(yù)見此方式更貼合“應(yīng)用型”人才培養(yǎng)目標(biāo),尤其作為通識教育的語言類課程,C語言的仿真教學(xué)將比傳統(tǒng)教學(xué)形式更具吸引力。
[1]張婧婧, 李勇偉. 電子類仿真軟件應(yīng)用的教學(xué)之道[J]. 計(jì)算機(jī)教育, 2016(7): 126-129.
[2]蘇變玲, 朱志平, 袁衛(wèi). 基于Proteus的單片機(jī)仿真教學(xué)的研究[J]. 實(shí)驗(yàn)室研究與探索, 2009(4): 75-78.
[3]魯強(qiáng), 李效戀, 王智廣. 程序算法識別研究綜述[J]. 計(jì)算機(jī)應(yīng)用, 2012, 32(10): 2863-2868.
[4]汪紅兵, 姚琳, 武航星, 等. C語言程序設(shè)計(jì)課程中的計(jì)算思維探析[J]. 中國大學(xué)教學(xué), 2014(9): 59-62.
[5]王恒廠, 周燕飛.由C語言程序格式解析宏程序[J]. 現(xiàn)代制造工程, 2008(5): 126-128.
[6]任洪娥, 孫麗萍, 韓麗萍, 等. 智能霍爾效應(yīng)水流量測試儀[J]. 東北林業(yè)大學(xué)學(xué)報(bào), 1996(3): 99-102.
[7]陳婷. C語言程序設(shè)計(jì)實(shí)驗(yàn)教學(xué)改革探究[J]. 實(shí)驗(yàn)技術(shù)與管理, 2010, 27(10): 182-184.
[8]鄧力. 基于Keil時(shí)序邏輯和Proteus的電路仿真[J]. 實(shí)驗(yàn)室研究與探索, 2017, 36(1): 80-83.