楊元元

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