楊元元

摘要:單片機安裝與調(diào)試技能大賽是電工電子類競賽的一項關(guān)鍵賽事,其難點在于程序的編寫。從系統(tǒng)和模塊兩個層面運用有限狀態(tài)機的編程方法,能幫助參賽選手厘清思路、分解復(fù)雜的任務(wù)、提高程序的執(zhí)行效率和可靠性。
關(guān)鍵詞:有限狀態(tài)機;狀態(tài);菜單設(shè)計
中圖分類號:TP368.1 文獻標(biāo)識碼:A 文章編號:1007-9416(2020)02-0206-02
0 引言
中職單片機控制裝置安裝與調(diào)試技能大賽是電工電子類競賽的一項關(guān)鍵賽事,重在檢驗選手從事工業(yè)生產(chǎn)控制的職業(yè)技能,以及適應(yīng)未來社會發(fā)展的職業(yè)能力。大賽統(tǒng)一采用亞龍YL-236型單片機功能控制實訓(xùn)考核臺作為比賽設(shè)備,比賽中選手要按照工作任務(wù)書的要求在4小時里完成硬件電路的搭建、程序編寫、仿真調(diào)試、走線扎線、繪制系統(tǒng)電路圖等環(huán)節(jié)[1]。
單片機技能大賽是公認(rèn)的有難度的一項賽事,難度主要體現(xiàn)在程序的設(shè)計與編寫。選手是從中職生中選拔出來佼佼者,即便如此,他們擁有的軟件開發(fā)設(shè)計的知識與技能依然十分有限。工作任務(wù)書中描述的工作過程比較復(fù)雜,選手的背景知識往往比較缺乏,以致于在程序設(shè)計編寫時未能準(zhǔn)確把握工作過程,出現(xiàn)了誤解、混淆、遺漏技術(shù)要求的現(xiàn)象。選手未能正確解析工作過程,不能完整清晰的描述事件,導(dǎo)致程序編寫出現(xiàn)漏洞。
運用有限狀態(tài)機(Finite State Machine)的方法能夠幫助參賽選手在程序設(shè)計中厘清思路,提高效率。有限狀態(tài)機是時序邏輯電路設(shè)計中常用的建模方法,由于能高效地描述事件的邏輯順序和時序規(guī)律,被廣泛地應(yīng)用到了嵌入式編程、數(shù)字電路開發(fā)、硬件描述語言、游戲角色開發(fā)等多個領(lǐng)域。
1 運用有限狀態(tài)機編寫單片機程序的優(yōu)勢
1.1 符合單片機程序的特點
有限狀態(tài)機本質(zhì)上是事先描述系統(tǒng)的一系列“狀態(tài)”,并通過“外部事件”實現(xiàn)不同“狀態(tài)”的切換。由于嵌入式系統(tǒng)一般由外部事件來驅(qū)動的,響應(yīng)事件后分發(fā)給處理事件的代碼,這樣導(dǎo)致程序的執(zhí)行路徑不是嚴(yán)格順序執(zhí)行的,因此用狀態(tài)機來設(shè)計嵌入式系統(tǒng)是比較理想的方法[2]。技能大賽中用51系列單片機搭建的系統(tǒng)屬于低端嵌入式,其工作狀態(tài)是離散的,常常因為時間、按鍵與開關(guān)的動作、傳感器輸出量的變化等事件進行不同狀態(tài)的切換。這一特點與有限狀態(tài)機的描述方法是貼合的。
1.2 降低程序編寫的難度
有限狀態(tài)機的方法用“狀態(tài)”代替常規(guī)編程中名目繁多的標(biāo)志位,單片機系統(tǒng)狀態(tài)轉(zhuǎn)換時,只需要設(shè)置當(dāng)前狀態(tài)即可,避免了頻繁地對標(biāo)志位進行設(shè)置或清除,同時可以降低系統(tǒng)的復(fù)雜性,提高程序的可靠性。對于理論基礎(chǔ)薄弱的中專生來說,運用有限狀態(tài)機能降低編寫程序的難度,減少遺漏或設(shè)置錯誤。
1.3 可運用在系統(tǒng)與模塊兩個層面
由于單片機只能處理已經(jīng)數(shù)學(xué)化的客觀對象,選手首先要對任務(wù)書描述的對象做數(shù)學(xué)化的處理[3],簡單地說,即將系統(tǒng)劃分為不同的狀態(tài)。比如:將系統(tǒng)狀態(tài)劃分為開機狀態(tài)、設(shè)置狀態(tài)、運行狀態(tài)、暫停狀態(tài)等。這一點與有限狀態(tài)機使用前必須清晰地劃分狀態(tài)的特點相符。在日常訓(xùn)練中,指導(dǎo)老師運用狀態(tài)轉(zhuǎn)移圖表去分析任務(wù),建立有限狀態(tài)機模型,梳理各個狀態(tài)之間的轉(zhuǎn)換關(guān)系,選手通過一定量的訓(xùn)練,在比賽中能很好地運用本方法。有限狀態(tài)機的方法不僅可以用來描述系統(tǒng)模型,還可以高效可靠地處理YL-236平臺上的指令、顯示、電機等模塊中的器件。下面對常用模塊中的液晶菜單程序設(shè)計作重點闡述。
2 有限狀態(tài)機在液晶菜單設(shè)計中的運用
MCU04顯示模塊上安裝了TG12864液晶顯示器、RTC1602液晶顯示器、數(shù)碼管等器件。這些顯示設(shè)備主要用于系統(tǒng)的參數(shù)設(shè)置、運行狀態(tài)、輸出結(jié)果顯示、報警等人機交互界面,友好的人機交互是系統(tǒng)必備的功能,也是技能大賽考核的關(guān)鍵點。
液晶12864的應(yīng)用常常涉及菜單的設(shè)計,以相對簡單的菜單為例,其有主菜單、子菜單兩級結(jié)構(gòu),如表1所示:
菜單的操作一般由按鍵來執(zhí)行,這里假設(shè)有功能按鍵有“上移”、“下移”、“確認(rèn)”“退出”四個按鍵。運用有限狀態(tài)機來編寫菜單程序時,通常以不同的菜單界面來劃分狀態(tài),單擊按鍵作為事件,用switch-case語句來實現(xiàn),其部分代碼如下:
#define? down? 1
#define? up? ? ?2
#define? enter? ?3
#define? back? ?4
uchar page;//定義全局變量page,作為子菜單選擇變量.
……;
Menu_display(0,0); //主菜單界面顯示函數(shù).
switch(keynum)? //鍵值分別是下移:1;上移:2;確認(rèn):3;退出:4.
{ case down:
{? page+=1;
Menu_display(page,1); //按一下下移鍵,子菜單1被選中,反白顯示,以此類推。
……
If(page==4)? Menu_display(0,0); // 下移超過子菜單3時,主菜單界面正常顯示。
}? break;
case up: { 省略;}? break;
case enter:
{? switch(page)
{? case 1:? Menu1_display( ); break; //若子菜單1被選中,按下確認(rèn)鍵進入子菜單1顯示。
case 2:? Menu2_display();break;
case 3:? Menu3_display()break;
default:? Menu_display(0,0); break;
}
}
case back: { Menu_display(0,0); } break;
default: break;
}
上述代碼中Menu_display(line,rev)是菜單顯示函數(shù),參數(shù)line作為菜單選擇,0:不選擇任何一項;1~3:依次選中對應(yīng)的子菜單;參數(shù)rev為0:正常顯示,1:反白顯示[4-5]。利用有限狀態(tài)機的思想設(shè)計菜單程序,可以方便地擴展子菜單數(shù)量,菜單轉(zhuǎn)換方便、穩(wěn)定可靠。程序的結(jié)構(gòu)層次分明,有利于學(xué)生理解掌握。
按鍵消抖、液晶1602與數(shù)碼管的顯示界面的變換、電機的運行、機械手的控制都可以借鑒有限狀態(tài)機的思路,這里不再累述。
3 結(jié)論
有限狀態(tài)機的方法運用到單片機技能大賽的編程中,能幫助選手分解復(fù)雜的任務(wù),靈活地處理狀態(tài)間的轉(zhuǎn)換,提高程序的可靠性。大賽指導(dǎo)老師可以從系統(tǒng)和模塊兩個層面,將有限狀態(tài)機的思維運用到日常的訓(xùn)練中。實踐證明,有限狀態(tài)機是一種行之有效的單片機編程方法。
參考文獻
[1] 葛金印,商聯(lián)紅.單片機控制項目訓(xùn)練教程[M].北京:高等教育出版社,2010.
[2] 郭兆正.基于有限狀態(tài)機建模的單片機編程方法研究[J].渤海大學(xué)學(xué)報(自然科學(xué)版),2016,37(3):266-270.
[3] 周永東.單片機技術(shù)及應(yīng)用(C語言版)[M].北京:電子工業(yè)出版社,2012.
[4] 王成義,郭秀梅,叢曉燕.基于液晶顯示的有限狀態(tài)機在人機界面中的應(yīng)用[J].液晶與顯示,2010,25(2):257-261.
[5] 劉孫東,唐飛.基于有限狀態(tài)機的嵌入式菜單系統(tǒng)設(shè)計[J].順德職業(yè)技術(shù)學(xué)院學(xué)報,2009,7(2):22-25.
Programming Idea of? Single Chip Computer Skill Contest Based on
Finite State Machine
YANG Yuan-yuan
(Hubei Three Gorges Technical College, Yichang? Hubei? 443111)
Abstract:Micro-controller Unit installation and debugging skills competition is a key competition in electrical and electronic vocational students skills competition, the difficulty lies in the programming. Using the programming method of FSM from two levels of system and module can help contestants to clarify their ideas, decompose complex tasks, and improve the efficiency and reliability of program execution.
Key words:finite state machine;state;menu design