基于單片機(jī)簡(jiǎn)單實(shí)現(xiàn)圖形顯示的方法
摘要:本文闡述了單片機(jī)在光源顯示方面一種應(yīng)用,利用單片機(jī)設(shè)計(jì)實(shí)現(xiàn)用點(diǎn)光源顯示出各種幾何圖形的方法。分別設(shè)計(jì)
原理、硬件電路和軟件設(shè)計(jì)思路的方面進(jìn)行詳細(xì)敘述。關(guān)鍵詞:?jiǎn)纹瑱C(jī)圖形顯示電光源中圖分類(lèi)號(hào): TP317文獻(xiàn)標(biāo)識(shí)碼: A文章編號(hào): 1007-9416(2011)02一O0 56—02
隨著單片機(jī)在當(dāng)今社會(huì)中的應(yīng)用越來(lái)越廣泛,本設(shè)計(jì)從單片機(jī)應(yīng)用方面為教學(xué)提供一種教學(xué)項(xiàng)目,并為點(diǎn)光源的圖形顯示提
出一種方法。
1設(shè)計(jì)思路
當(dāng)一個(gè)電光源的光束射人到鏡面上時(shí)就會(huì)發(fā)生反射現(xiàn)象,當(dāng)我們讓光束以固定角度入射到鏡面上時(shí),就會(huì)在另一面反射出來(lái)。這時(shí),我們讓鏡面以水平方向中心軸為支點(diǎn)前后快速晃動(dòng)時(shí),由于人眼的余輝效應(yīng),我們就會(huì)觀測(cè)到反射出來(lái)的光在顯示屏上呈現(xiàn)出一條豎向的光線;同樣當(dāng)我們以豎直方向中心軸為支點(diǎn)前后陜速晃動(dòng)時(shí),我們就會(huì)在顯示屏上觀測(cè)到一條豎向的光線。
我們就以這種現(xiàn)象為模型,讓點(diǎn)光源發(fā)出的光線先經(jīng)過(guò)一個(gè)以水平中心軸為支點(diǎn),前后轉(zhuǎn)動(dòng)的鏡面,反射出來(lái)的光線再經(jīng)過(guò)一個(gè)以豎直中心軸為支點(diǎn)前后晃動(dòng)的鏡面。當(dāng)兩面鏡子都不晃動(dòng)時(shí)所產(chǎn)生的點(diǎn)稱(chēng)為原點(diǎn);把其中一個(gè)鏡面沿水平方向軸晃動(dòng)時(shí),另一面鏡子不動(dòng)時(shí)產(chǎn)生的光線稱(chēng)為Y軸;把其中的一面不動(dòng),而另一面沿豎直方向軸晃動(dòng)時(shí)
所產(chǎn)生的光線稱(chēng)為x軸。
這樣我們通過(guò)這兩個(gè)鏡子的不同晃動(dòng)的組合就產(chǎn)生各種各樣的圖形,例如:通過(guò)晃動(dòng)其中一個(gè)鏡面就可以產(chǎn)生一條橫線或者是豎線,當(dāng)兩個(gè)鏡面—起晃動(dòng)時(shí)就可以產(chǎn)生斜線、三角形、矩形和圓形,當(dāng)我們快速的在同部位上利用這些圖形的組合就可以形成各種美麗的圖案,這就是我們?cè)诟鞣N娛樂(lè)場(chǎng)所看到的燈光效果。
我們只需要利用上面所建立的坐標(biāo)系和最后所需要產(chǎn)生的圖形,就可以轉(zhuǎn)換成各種兩個(gè)不同的鏡面組合。我們把鏡面中心軸固定,其中一測(cè)裝上彈簧這樣的恢復(fù)裝置,另外
一側(cè)裝上動(dòng)力裝置,如:在一側(cè)貼上貼片,利用電磁鐵的吸引力就可以驅(qū)動(dòng)鏡面晃動(dòng);還可以利用耳機(jī)中的發(fā)聲裝置產(chǎn)生動(dòng)力??傊?,就是把鏡面的轉(zhuǎn)動(dòng)轉(zhuǎn)化電量的變化。
2硬件電路設(shè)計(jì)
在電路的設(shè)計(jì)中,我們只需要完成利用單片機(jī)控制兩個(gè)電量的可控變化就可以完成整體設(shè)計(jì)。我們利用單片機(jī)的P0口和P 2口分別輸出兩個(gè)二進(jìn)制數(shù),然后經(jīng)過(guò)DA轉(zhuǎn)化為模擬信號(hào),然后在經(jīng)過(guò)功放電路之后傳給動(dòng)力裝置,這就是硬件設(shè)計(jì)的整體思路。
下面分別進(jìn)行詳細(xì)說(shuō)明。
A控制部分:在學(xué)校教學(xué)中考慮到教學(xué)成本,經(jīng)常采用8 9C51作為控制核心,因?yàn)槠渚哂谐錾男詢(xún)r(jià)比及可靠的穩(wěn)定性。控制器的作用是我們可以利用控制器完成產(chǎn)生何種波形的選擇,還要利用單片機(jī)的運(yùn)算能力,運(yùn)算各種圖形形成所需要的變化量,還要利用單片機(jī)不斷的輸出各種中間變化量,從而使電路中產(chǎn)生一種我們所需要的信號(hào)。電路是一個(gè)基本的最小系統(tǒng),外加一個(gè)利用中斷源擴(kuò)展的八個(gè)按鈕按鍵,八個(gè)按鍵分別接P1口各位。按鍵的作用是:產(chǎn)生直線圖形、產(chǎn)生三角形圖形、產(chǎn)生矩形圖形、產(chǎn)生圓型圖形、產(chǎn)生型圖形、使圖形變大、使圖形變小、使產(chǎn)生圖形閃爍的頻率變化。具體連接具體原理是,當(dāng)我們按下其中某一個(gè)按鍵時(shí),對(duì)應(yīng)的電路信號(hào)就會(huì)從高電平變?yōu)榈碗娖?,這八個(gè)信號(hào)經(jīng)過(guò)與電路的運(yùn)算之后從 INTO端就會(huì)輸出一個(gè)低電平,使單片機(jī)的外部中斷0上的信號(hào)變低,進(jìn)人中斷程序。這八個(gè)信號(hào)線和單片機(jī)的P1口相連,從而傳給單片機(jī)一個(gè)對(duì)應(yīng)的數(shù)值。從而使單片機(jī)判斷出,是那個(gè)按鍵按下,進(jìn)而進(jìn)行程序處理。
B外圍電路:把從單片機(jī)的PO口和P2口輸出的數(shù)據(jù)經(jīng)過(guò)轉(zhuǎn)換為模擬信號(hào)。這部分主要是AD轉(zhuǎn)換電路,由于我們的顯示的圖形比較多,所以在圖案比較復(fù)雜時(shí),信號(hào)的變化頻率是比較決的,具體的芯片型號(hào)需要根據(jù)圖形顯示時(shí)間以及閃爍變化的頻率計(jì)算后的數(shù)據(jù)來(lái)選擇。只要芯片的工作速度跟的上就行。
C驅(qū)動(dòng)部分:由于系統(tǒng)的動(dòng)力部分是由電流驅(qū)動(dòng)的,所以經(jīng)過(guò)外圍電路輸出的電信號(hào)不能直接連接到動(dòng)力裝置上,需要經(jīng)過(guò)一個(gè)功率放大電路加強(qiáng)電路輸出的驅(qū)動(dòng)能力,可以采用功放芯片或者是經(jīng)典的OTC功率放大電路均可,后者可以提高制作者對(duì)模擬電路的理解和調(diào)試電路的能力。
3軟件設(shè)計(jì)
當(dāng)單片機(jī)上點(diǎn)復(fù)位后,Po__P3口均輸出高電平,所以在上電復(fù)位之后,我們首先用程序把所有端口置零,使輸出電壓為零,從而使鏡面處于原始靜止位置,并把中斷開(kāi)啟,并置一些初始值。
當(dāng)程序開(kāi)始運(yùn)行之后就會(huì)進(jìn)入圖形顯示的選擇程序,我們?cè)O(shè)置一個(gè)延時(shí)程序,當(dāng)這段時(shí)問(wèn)內(nèi)沒(méi)有按鍵按下時(shí),單片機(jī)按照我們?cè)O(shè)置的初始值顯示一個(gè)固定的圖形;當(dāng)這段時(shí)間內(nèi)有按鍵按下時(shí),程序會(huì)根據(jù)我們按下的按鍵賦值,從而顯示不同的圖形或改變圖形的大小或者是改變圖形閃爍的頻率。本段程序的按鍵判斷可用比較法來(lái)完成,當(dāng)有按鍵按下時(shí),程序會(huì)進(jìn)入中斷,我們判斷Pl寄存器中的數(shù)據(jù)是否為FEH,若是則說(shuō)明此時(shí)P1.0連接的按鍵按下,此時(shí)我們讓程序返回執(zhí)行某一圖形的顯示程序。圖形顯示程序是最重要的部分,我們根據(jù)對(duì)應(yīng)的按鍵按下時(shí),從中斷程序返回的數(shù)值判斷出,主程序中應(yīng)該要執(zhí)行某個(gè)圖形的顯示程序。圖形顯示程序中我們首先從直線開(kāi)始說(shuō)明,直線顯示比較簡(jiǎn)單,我們想顯示一條橫線的時(shí)候,就從單片機(jī)的P2口輸出一組從H開(kāi)始逐漸增大,然后又逐漸減小的值,從而是動(dòng)力裝置得到一個(gè)從0逐漸變大再逐漸變小的信號(hào),使其中一個(gè)鏡面沿中心軸逐漸的向一側(cè)偏轉(zhuǎn),然后在彈簧的恢復(fù)力的作用下漸漸復(fù)原,在顯示屏上投下一條橫線。同樣想顯示豎線的時(shí)候,我們只需要使程序從P2口輸出一段&H逐漸變大,然后由大逐漸變小的值即可。
顯示一條斜線時(shí),根據(jù)函數(shù)Y:KX+B可知,當(dāng)X軸上變化的值已知時(shí),就能算出對(duì)應(yīng)的Y軸的值,我們x軸上的數(shù)值從00H開(kāi)始變大,然后變小時(shí),就能得到對(duì)應(yīng)的Y的值的變化趨勢(shì),把這兩個(gè)值分別從P0口和P2口輸出,就會(huì)使兩個(gè)鏡子共同轉(zhuǎn)動(dòng),使顯示的圖形呈Y=KX+B趨勢(shì)。
同樣,我們想顯示三角形時(shí),任何三角形都是有三條兩兩相交的有限的直線夠成,分別記作Y=KX,+B.,Y,=K,X,+BY= KX+B,我們把X軸的變量從H逐漸變大,再逐漸變小,而Y軸上的值分別按照各自的值在各自的區(qū)間內(nèi)變化一次,從而在P0口和P2口分別輸出一組對(duì)應(yīng)的變化信號(hào),使輸出的圖形顯示出三角形。
最后,矩形是由四條有限直線的構(gòu)成,并且是有兩組平行線,我們按照這個(gè)規(guī)律讓X軸和Y軸的數(shù)值各自變化一次,即可得到結(jié)果。型圖形,是由四條相交于一點(diǎn)的直線構(gòu)成,顯示的時(shí)候,我們必須首先計(jì)算出,相交點(diǎn)的坐標(biāo),然后分別按各自的變化規(guī)律,從P0口和P2口輸出一次就行。圓形顯示時(shí),我們首先計(jì)算出圓點(diǎn)的坐標(biāo)然后,按照公式 Xz+Yz:Rz計(jì)算出各個(gè)點(diǎn)的坐標(biāo),進(jìn)而輸出顯示即可。
圖形的大小的確定,圖形的大小是由兩個(gè)鏡面每次變化的最大范圍決定,當(dāng)我們改變每次變化時(shí)X的最大值時(shí),就會(huì)改變各個(gè)圖形對(duì)應(yīng)的大小。我們?cè)诔绦虻钠鹗紩r(shí),給一個(gè)中間值,當(dāng)我們按下變大按鍵式,在中斷程序中改變這個(gè)值,主程序中,當(dāng)X或者Y的值增大到這個(gè)值時(shí),開(kāi)始變小。注意,因?yàn)殓R面的轉(zhuǎn)動(dòng)是有限的,超過(guò)這個(gè)值時(shí),光線就不會(huì)被反射,所以當(dāng)增大按鍵一直按下,中間值就會(huì)一直增大,當(dāng)達(dá)到極限值后,就不在增大。圖像變小按鍵的程序算法也一樣,只是變化時(shí),是讓中間值變小而已。
圖形閃爍的原理,就是利用當(dāng)我們讓入射光線和鏡面的夾角小于0?;蛘呤谴笥?0。時(shí),光線就不會(huì)被反射到外界了,所以,系統(tǒng)顯示時(shí),鏡面和 ^射光線的夾角應(yīng)在0。到90。之間。我們?cè)趫D形完成一次整體顯示時(shí),改變P0和P2口的輸出值,使鏡面和光線的夾角小于0。或者是大于90。,使外界沒(méi)有顯示,在運(yùn)行延時(shí)程序,程序開(kāi)始時(shí)給一個(gè)延時(shí)值,通過(guò)按鍵按下時(shí),在中斷程序中改變這個(gè)延時(shí)值的大小,這樣當(dāng)我們不斷的按這個(gè)按鍵時(shí),圖形的閃爍頻率從快到慢,或者是從慢到快。系統(tǒng)程序總體流程圖如圖2所示。
本設(shè)計(jì)為單片機(jī)應(yīng)用實(shí)例一種可行的方案,但是由于經(jīng)驗(yàn)和水平有限,在設(shè)計(jì)中難免存在一些缺陷,還望批評(píng)指正。