呂倩 葛文瀟 李金虎
摘 要:?jiǎn)纹瑱C(jī)是采用超大規(guī)模集成電路技術(shù)的微型計(jì)算機(jī)系統(tǒng),現(xiàn)已廣泛應(yīng)用于各種領(lǐng)域。本文利用MSP430單片機(jī)、IAR和Proteus軟件對(duì)多模式的花樣流水燈進(jìn)行設(shè)計(jì)。通過Proteus軟件的仿真,系統(tǒng)的穩(wěn)定性和正確性得到驗(yàn)證,且具有較強(qiáng)的應(yīng)用價(jià)值。
關(guān)鍵詞:MSP430;Proteus;單片機(jī);花樣流水燈
單片機(jī)作為計(jì)算機(jī)發(fā)展的一個(gè)重要分支領(lǐng)域,憑借其強(qiáng)大的控制功能和靈活的編程實(shí)現(xiàn)特性,得到了廣泛的應(yīng)用。本文設(shè)計(jì)的電路除了能實(shí)現(xiàn)基本功能:花樣燈左右循環(huán)流水點(diǎn)亮和交替點(diǎn)亮,還能實(shí)現(xiàn)兩個(gè)附加功能:實(shí)現(xiàn)變量控制花樣流水燈頻率可變,實(shí)現(xiàn)跑馬燈的多模式控制。
1 相關(guān)原理介紹
1.1 基本功能原理
從編程角度來考慮,本文用到的兩個(gè)基本功能:循環(huán)移位,延遲環(huán)節(jié)。首先,將循環(huán)移位和延時(shí)環(huán)節(jié)制作成兩個(gè)封裝好的庫函數(shù),以方便后面調(diào)用。其次,在主程序中進(jìn)行使用端口的屬性設(shè)置,端口設(shè)置寄存器功能及指令說明如下表所示。
設(shè)置好端口類型后,在主循環(huán)中使 8個(gè)LED燈呈現(xiàn)正反向循環(huán)流水點(diǎn)亮,并調(diào)用延時(shí)函數(shù)控制閃爍頻率。當(dāng)按下開關(guān),使外部中斷請(qǐng)求引腳呈低電平,然后在中斷處理程序中將P端口輸出賦值 0xaa或0x55,再通過環(huán)移指令和延時(shí)環(huán)節(jié),使LED燈交替點(diǎn)亮,松開開關(guān)后,跳出外部中斷處理,進(jìn)程恢復(fù)至主程序段繼續(xù)執(zhí)行。
1.2 實(shí)現(xiàn)變量控制頻率可變的跑馬燈
這部分系統(tǒng)設(shè)計(jì)的想法建立在延時(shí)函數(shù)的調(diào)用次數(shù)參數(shù)從定值設(shè)為變量n,通過外部控制按鍵的中斷,觸發(fā)對(duì)n的函數(shù)運(yùn)算,從而改變流水燈閃爍周期,影響閃爍頻率,關(guān)鍵在于對(duì)實(shí)際基頻和1s周期的計(jì)算與控制。
由于實(shí)際誤差的存在,可以使用實(shí)測(cè)法,按照理論調(diào)用參數(shù)為1000的Delayms函數(shù),理論上是1s,將該函數(shù)調(diào)用60次,測(cè)量程序執(zhí)行時(shí)間與一分鐘的誤差,并根據(jù)誤差進(jìn)行調(diào)整,直到誤差可接受為止。
1.3 實(shí)現(xiàn)跑馬燈的多模式控制
由于使用外部按鍵控制的方式調(diào)節(jié)跑馬燈模式的方法太過浪費(fèi)資源,所以本文采用基礎(chǔ)功能中使用的一個(gè)按鍵,將按鍵按下的次序作為變量“FLAG”存儲(chǔ)起來,每次按下操作都會(huì)使FLAG值改變,進(jìn)而通過FLAG值的不同控制不同的流水燈操作方式,這樣可以減少對(duì)于外部串口資源的占用。
系統(tǒng)的設(shè)計(jì)中擴(kuò)展的流水燈模式為“流水燈從上向下依次點(diǎn)亮,再反向依次熄滅;再由下向上依次點(diǎn)亮,再反向依次熄滅”。
2 總體設(shè)計(jì)方案與實(shí)現(xiàn)
2.1 軟件設(shè)計(jì)總方案
從系統(tǒng)設(shè)計(jì)的整個(gè)過程來看,包括:“功能需求分析,功能模塊化,器件選擇,電路設(shè)計(jì),程序設(shè)計(jì),仿真調(diào)試”。其中,仿真調(diào)試需要多次進(jìn)行,以確保系統(tǒng)的穩(wěn)定性和正確性。
以MSP430為核心芯片,用P1和P2口分別作為中斷端口與I/O口。首先僅對(duì)基礎(chǔ)功能進(jìn)行討論,將功能分為兩個(gè)子模塊:模塊一由P2口主要完成,用于點(diǎn)亮正常的依次循環(huán)的流水燈;模塊二需要加上P1口,用于控制中斷信號(hào),轉(zhuǎn)向第二種流水燈模式。同時(shí)也負(fù)責(zé)檢測(cè)按鍵的松開,并返回模塊一的功能。
2.2 花樣流水燈電路設(shè)計(jì)
對(duì)于MSP4430的電路設(shè)計(jì),實(shí)際電路中需要用到對(duì)晶振電路,Vcc以及GND的設(shè)置。但由于Proteus中MSP430默認(rèn)內(nèi)部時(shí)鐘以及供電和地段是設(shè)置好的,所以在仿真界面不予顯示。
如下圖1所示,P1口僅P1.3屬于基本功能控制按鈕,用于為中斷提供觸發(fā)信號(hào)。
P2口并行輸出到八個(gè)LED上,控制流水燈閃爍。“R”均為保護(hù)電阻,在此將其設(shè)置為一般值:330歐姆。此處提供+5V直流電源。LED選用前向電壓為2.2V,工作電流在10Ma左右的普通黃色燈,擊穿電壓為4V,可以算出,供電5V,使用串聯(lián)330歐姆電阻的方案是可取的。
整體上P1引線外端共地,P2引線外端供電。MSP430內(nèi)部時(shí)鐘共有3個(gè)輸出模式:ACLK(一般用于低速模塊)、MCLK(主要用于CPU和系統(tǒng))、SMCLK(主要用于高速模塊)。本文將MSP430選擇頻率方式定為MCLK,設(shè)為8MHz。
2.3 花樣流水燈程序設(shè)計(jì)
首先,在主程序前進(jìn)行必要的聲明和約定。
其次,在主程序階段對(duì)P1和P2口進(jìn)行設(shè)置。
接著,端口設(shè)置好后編寫延時(shí)子程序以及中斷函數(shù)。延時(shí)程序主要利用i++或i--語句反復(fù)調(diào)用一個(gè)機(jī)器周期的語句進(jìn)行計(jì)時(shí)。中斷函數(shù)則依靠(P1IN & 0x08)==0x08的語句檢測(cè)P1.3是否按下,并轉(zhuǎn)入while循環(huán)中執(zhí)行流水燈交替點(diǎn)亮命令即可。
最后,子程序編寫好后進(jìn)入主程序編寫。利用環(huán)移指令(P2OUT=~(1<
本文用示波器顯示LED電量的P2口輸出,顯示情況為L(zhǎng)ED的交替電量,可以發(fā)現(xiàn),交替時(shí)間為1s,但低電平存在不平坦現(xiàn)象。
2.4 查詢方式程序設(shè)計(jì)
任何查詢方式程序都滿足如圖3的流程圖,包含狀態(tài)標(biāo)記,狀態(tài)規(guī)則,目標(biāo)操作三個(gè)主要部分。目標(biāo)操作與使用中斷的內(nèi)容一致,就是安排流水燈以一定的規(guī)律閃爍。檢查狀態(tài)標(biāo)志設(shè)為“(P1IN & 0x08)==0x00”,而狀態(tài)規(guī)則是:當(dāng)該條件不滿足的時(shí)候,對(duì)應(yīng)中斷觸發(fā)的情況;當(dāng)該條件滿足時(shí),對(duì)應(yīng)原本主程序點(diǎn)亮狀態(tài)。
2.5 頻率控制功能設(shè)計(jì)
首先,前面的測(cè)量提供了真實(shí)的工作頻率。根據(jù)理論計(jì)算和實(shí)際測(cè)量,本文將delayms函數(shù)中的i++最大值設(shè)為167。此時(shí)調(diào)用一次delayms函數(shù)的時(shí)間正好為1ms,在程序中定義整數(shù)型變量n,表示delayms的輸入?yún)?shù),即調(diào)用次數(shù)。顯然,n=1000時(shí),表示運(yùn)行的LED閃爍間隔時(shí)間為1s,考慮到人體眼球?qū)︻l率變化的敏感程度,將n=1000設(shè)為頻率初始值。
為了盡量使用較少的鍵位控制較多的頻率變化取值,本文外設(shè)了P1.4~P1.7為四種頻率變化模式:“加速”,“減速”,“速度加倍”,“速度減半”。其中加減速度是通過n加減100得到,由于0.1s的頻率變化接近人體能夠直觀察覺的頻率變化臨界值,所以n的變化量取100為間隔是合理的;但僅通過100的變化量對(duì)頻率進(jìn)行控制可能會(huì)導(dǎo)致變化較慢,或者說操作不便捷,為了彌補(bǔ)大步長(zhǎng)改變頻率的空缺,本文中通過對(duì)n進(jìn)行乘以和除以2的運(yùn)算進(jìn)行大幅的概率調(diào)整。
此外,為了防止頻率調(diào)整后不方便返回默認(rèn)的1s周期,本文中另加了頻率復(fù)位按鍵,通過“n=1000”將頻率之間復(fù)位。
3 調(diào)試過程及問題解決
3.1 問題一:如何在按鍵松開后跳出中斷,并返回主程序
對(duì)按鍵按下的操作,系統(tǒng)設(shè)計(jì)時(shí)擬用中斷方式觸發(fā),所以對(duì)于按鍵松開后的操作,有兩種方式:(1)查詢按鍵松開;(2)下降沿觸發(fā)中斷。一開始嘗試使用中斷嵌套,進(jìn)行下降沿中斷觸發(fā),但由于優(yōu)先級(jí)設(shè)置不當(dāng)以及單一按鍵的資源占用沖突,導(dǎo)致失敗。于是改用查詢方式,當(dāng)檢測(cè)到低電平時(shí),說明按鍵已經(jīng)松開,且具有抗抖動(dòng)的能力,結(jié)束當(dāng)前循環(huán),返回主程序。
3.2 問題二:按鍵松開后引腳高阻態(tài)
在按鍵與引腳之間的連線上再連接一個(gè)電阻(一般設(shè)為通常值330R),延伸至地端。這樣保證在按鍵提供的高電平結(jié)束后,由地端提供低電平,以供引腳狀態(tài)監(jiān)測(cè)使用。
4 總結(jié)
本文設(shè)計(jì)的花樣流水燈不僅能實(shí)現(xiàn)基本的循環(huán)點(diǎn)亮、交替點(diǎn)亮功能,還能另外實(shí)現(xiàn)“加速”“減速”“速度加倍”“速度減半”四種模式。本文中的多模式的花樣流水燈控制系統(tǒng)具有良好的正確性和穩(wěn)定性,可應(yīng)用于生活的中的多種領(lǐng)域,很容易根據(jù)實(shí)際需求生成不同的智能化產(chǎn)品。因此,該系統(tǒng)具有較強(qiáng)的應(yīng)用價(jià)值。
參考文獻(xiàn):
[1]顧亞軍,周悅,郭威,王彪.基于MSP430的輸入輸出模塊設(shè)計(jì)與實(shí)現(xiàn)[J].測(cè)控技術(shù),2018,37(03):145-149.
[2]謝鵬輝,岳全勝,余世賢,王鏈琿,王洋.基于MSP430單片機(jī)的超聲波測(cè)距系統(tǒng)設(shè)計(jì)[J/OL].電子技術(shù)與軟件工程,2018(08):252-253[2018-05-10].http://kns.cnki.net/kcms/detail/10.1108.TP.20180425.1721.386.html.
[3]姜涵.基于MSP430的無線壓力變送器設(shè)計(jì)[J].無線互聯(lián)科技,2018,15(08):20-21.
[4]冀慶恩,葛立明,李宗剛,高溥.基于MSP430的無線水質(zhì)監(jiān)測(cè)系統(tǒng)[J].工業(yè)儀表與自動(dòng)化裝置,2018(02):23-28.
[5]許話.基于MSP430單片機(jī)的環(huán)境噪聲監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)[J].電子技術(shù)與軟件工程,2018(07):255.