摘 要:針對學(xué)生在單片機(jī)學(xué)習(xí)中自主設(shè)計能力比較弱的特點,本文開發(fā)了一款基于流程圖編程的單片機(jī)軟件系統(tǒng)。該系統(tǒng)使用形象化的模塊,采用自頂向下的方法設(shè)計流程圖,流程圖設(shè)計完畢,程序相應(yīng)編寫完成。該方法形象直觀,易于理解,編程人員可專注于程序的邏輯關(guān)系,從而發(fā)揮更大的創(chuàng)造力。
關(guān)鍵詞:單片機(jī);流程圖;編程
中圖分類號: TP319
Software Development of Single Chip Computer based on Flow Chart Programming
CHEN Ruisen
(Department of Information, Xiamen Ocean Vocational College, Xiamen Fujian 361012,China)
Abstract: According to the characteristics that the independent design ability of students is weak in learning SCM, a software of SCM based on flow chart programming is developed. The system uses visualization modules, and the method of top-down is used in the design of flow chart. In this system, when the design of the flow chart is completed, the corresponding program has been written. This method is visual, and easy to understand, the programmers can focus on the logical relationship, and thus play a greater creativity.
Key words:Single Chip Computer; Flow Chart; Programming
0引 言
“單片機(jī)”是一門理論性和應(yīng)用性都較強(qiáng)的課程,也是相關(guān)專業(yè)的核心課程。該課程偏重于工程思維,其任務(wù)是利用單片機(jī)技術(shù)和各種芯片,設(shè)計實用的電路系統(tǒng),編寫相關(guān)的應(yīng)用程序。現(xiàn)今常用的單片機(jī)編程語言主要有C51等,編程時需要輸入復(fù)雜的程序代碼,編寫的程序還需要符合特定的語法規(guī)定,這往往增加了編程難度,是學(xué)生學(xué)習(xí)單片機(jī)的難點之一。針對單片機(jī)教學(xué)中“強(qiáng)化實踐,重在應(yīng)用”的辦學(xué)方針,本文設(shè)計了一款基于流程圖編程的單片機(jī)軟件開發(fā)系統(tǒng)。該系統(tǒng)采用EDA中“自頂向下”[1]的設(shè)計方法設(shè)計程序流程圖,程序流程圖由基本編程模塊連接而成。流程圖設(shè)計完畢,程序相應(yīng)編寫完成,該方法有利于重點關(guān)注尋求解決問題的方法,從而開發(fā)出更富有創(chuàng)造性的產(chǎn)品[2]。
1 系統(tǒng)工作原理
單片機(jī)中的程序流程圖用于描述程序內(nèi)部各種問題的解決方法、思路或算法,常使用各種圖形、符號、有向線段等來表示程序設(shè)計的過程。一般情況下,根據(jù)要完成的程序功能寫出總流程圖,基于總流程圖即將整個程序劃分成幾個主要的功能模塊,再針對每個功能模塊繪制基本流程圖。流程圖中使用的各種形態(tài)符號只表示某種處理的描述并沒有實際編程意義,主要是為程序編寫發(fā)揮導(dǎo)引性作用。系統(tǒng)對流程圖的圖形和符號等進(jìn)行了相應(yīng)的改造和簡化,系統(tǒng)中的流程圖只包括兩部分:
(1) 表示相應(yīng)操作的框(模塊)
系統(tǒng)設(shè)計了很多模塊庫,比如顯示模塊庫,判斷模塊庫,傳感器模塊庫等。每個模塊庫又包含很多子模塊,如判斷模塊庫包含次數(shù)循環(huán)模塊,永循環(huán)模塊,條件循環(huán)模塊,條件判斷循環(huán)模塊等,模塊組織結(jié)構(gòu)如圖1所示。模塊類似于Matlab軟件中各種工具箱的仿真模塊,每個模塊均相當(dāng)于一個子函數(shù),在流程圖中添加一個模塊即相當(dāng)于調(diào)用一個子函數(shù)。各個模塊提供一些屬性以供需要時進(jìn)行設(shè)置,設(shè)置后將改變模塊的功能,圖2為延時子模塊的屬性設(shè)置框及相應(yīng)的子函數(shù),只要在屬性設(shè)置框中輸入不同的數(shù)字,就可以得到不同的延時時間。系統(tǒng)中的模塊庫是一個開放庫,可以隨時增加。
void delayms(uchar t)
{ uchar x,y;
for(x=t;x>0;x--)
for(y=110;y>0;y--);
}
(2)帶箭頭的線(指定程序的執(zhí)行順序)
系統(tǒng)中的模塊暫時只用C51來編寫。由于C51中的變量分為局部變量和全局變量,這將有利于模塊的獨立性。用于進(jìn)行模塊之間傳遞參數(shù)的變量為全局變量,各個模塊內(nèi)部用到的變量則全部利用局部變量,如此模塊變量就不會相互影響。系統(tǒng)還提供了一個全局變量模塊,在該模塊中可以定義一些全局變量。系統(tǒng)中每一個模塊都可以完成一定的功能。只要依循清晰的思路連接這些模塊,就可以很快地完成一個程序的代碼。
2 流程圖到C51源程序的實時轉(zhuǎn)換
為了得到可編譯下載的程序,系統(tǒng)可以將流程圖自動轉(zhuǎn)換為C51源程序,類似于plc中的梯形圖和指令表的自動轉(zhuǎn)換[3-4]。編程人員可以直接對源程序進(jìn)行修改,作為流程圖編程的補(bǔ)充手段。下面具體介紹程序流程圖實時轉(zhuǎn)換成C51源程序的原理。
系統(tǒng)構(gòu)造的是由順序、分支和循環(huán)三種基本控制結(jié)構(gòu)通過各種復(fù)雜的組合、嵌套關(guān)系而組成的結(jié)構(gòu)化程序流程圖,其中的基本單元是已經(jīng)獨立開發(fā)的、相當(dāng)于一個子函數(shù)的各種模塊。流程圖轉(zhuǎn)換的對象C51程序基本是一個函數(shù)的集合(包括一個main主函數(shù)和各種子函數(shù)),因而和程序流程圖的對應(yīng)關(guān)系是較為明顯的。系統(tǒng)為了簡化軟件轉(zhuǎn)換的復(fù)雜度,采用了一種實時轉(zhuǎn)化方法,即在流程圖中每添加一個模塊就相應(yīng)的在C51源程序中添加該模塊的對應(yīng)子函數(shù)。流程圖中的主程序?qū)?yīng)于main函數(shù),全局變量模塊對應(yīng)于主函數(shù)前的變量定義,各個模塊對應(yīng)于主函數(shù)前的一個函數(shù)聲明以及主函數(shù)中的一個子函數(shù)調(diào)用,系統(tǒng)的轉(zhuǎn)換關(guān)鍵點則在于各個子函數(shù)的相應(yīng)嵌套關(guān)系。順序結(jié)構(gòu)中的模塊,在程序流程圖中每加入一個模塊,就按順序添加一個子函數(shù)調(diào)用;對于分支、循環(huán)模塊,當(dāng)用戶從模塊庫中拖動一個模塊到軟件設(shè)計區(qū)時,軟件將判斷該模塊是連接于分支、還是循環(huán)模塊的區(qū)域內(nèi)或區(qū)域外,圖3(a)表示模塊處于分支的區(qū)域內(nèi),圖3(b)表示模塊處于循環(huán)模塊的區(qū)域內(nèi),圖4(a) 表示模塊處于分支的區(qū)域外,圖4(b)表示模塊處于循環(huán)模塊的區(qū)域外。在分支結(jié)構(gòu)中,連接于分支模塊區(qū)域內(nèi)的模塊,其子函數(shù)調(diào)用則處于分支函數(shù)內(nèi),反之即處于分支函數(shù)外。分支模塊為每個分支建立一個分支子函數(shù),由分支子函數(shù)再調(diào)用下級各個小模塊的子函數(shù),即分支函數(shù)調(diào)用分支子函數(shù),分支子函數(shù)調(diào)用下一級子函數(shù)。循環(huán)模塊的函數(shù)調(diào)用與分支模塊類似。利用以上方法可以實時地將相應(yīng)的程序流程圖轉(zhuǎn)換為C51源程序。現(xiàn)在,本軟件系統(tǒng)只能轉(zhuǎn)換利用系統(tǒng)提供的模塊構(gòu)造的程序流程圖。
3 系統(tǒng)測試
在完成了系統(tǒng)的初步構(gòu)建后,對系統(tǒng)進(jìn)行了測試,文中構(gòu)建了一張控制8個LED燈閃爍四次的程序流程圖,如圖5(a)所示,圖5(b)、(c)分別為循環(huán)模塊和發(fā)送模塊的屬性設(shè)計框, 在完成了相應(yīng)的程序流程圖并轉(zhuǎn)換為對應(yīng)的程序代碼后,可通過keil軟件進(jìn)行編譯并下載到proteus軟件中的LED燈電路圖進(jìn)行測試,測試結(jié)果表明程序的正確性,圖6分別為LED滅和亮的情況。
4結(jié)束語
本文構(gòu)建的基于流程圖編程的單片機(jī)軟件開發(fā)系統(tǒng)是一個開放性的系統(tǒng),其中的流程圖模塊可以隨著開發(fā)的深入而加以豐富,同時軟件的功能也可進(jìn)一步增強(qiáng)。雖然經(jīng)過初步的開發(fā),軟件具有一定的實用性,但是開發(fā)復(fù)雜功能的流程圖時,軟件自動生成的程序代碼的準(zhǔn)確性還有待進(jìn)一步提高,這也是下一步研究工作的重點。
參考文獻(xiàn):
[1]徐獻(xiàn)靈.EDA技術(shù)在現(xiàn)代電子設(shè)計中的應(yīng)用[J].現(xiàn)代電子技術(shù),2003(17):103-105.
[2] 程向前.基于流程圖的可視化程序設(shè)計環(huán)境對大學(xué)計算機(jī)基礎(chǔ)教學(xué)的影響[J].計算機(jī)教育,2012(14):56-59.
[3]鐘志超,張志勝,戴敏等.流程圖與類C語言實時轉(zhuǎn)換方法[J].東南大學(xué)學(xué)報,2009, 39(3):502-506.
[4]王黎明,王幗釹,周明媛等.程序流程圖到代碼的自動生成算法[J].西安電子科技大學(xué)學(xué)報,2012,39(6):70-77.
作者簡介: 陳瑞森(1981-),男,福建晉江人,碩士,講師,主要研究方向:信息與控制.