【文章內(nèi)容簡介】
I/O141141I/O142142I/O143143I/O144144E P 2 C5 T 1 4 4 C8 ND10EP 2 C 5 T1 4 4 C 8 NabfcgdeD P Y[ L E D g n ]1234567abcdefgD S 4abfcgdeD P Y[ L E D g n ]1234567abcdefgD S 2abfcgdeD P Y[ L E D g n ]1234567abcdefgD S 3abfcgdeD P Y[ L E D g n ]1234567abcdefgD S 1P I N _ 1 4 3RRRRD2 LEDD3 LEDD5 LEDD6 LEDD7 LEDD8 LEDD1 LEDD9D4R111KR121KR131KR161KR171KR181KR151KR11KR141K+3.3V+3.3VP I N _ 1 4 1P I N _ 1 3 7P I N _ 1 3 5P I N _ 1 3 3P I N _ 1 2 9P I N _ 1 2 5P I N _ 1 2 1P I N _ 1 1 9P I N _ 1 1 8P I N _ 1 1 7P I N _ 1 1 6P I N _ 1 1 5P I N _ 1 1 4P I N _ 1 0 1P I N _ 9 9P I N _ 9 6P I N _ 9 3P I N _ 9 2P I N _ 8 7P I N _ 7 9P I N _ 5 8P I N _ 5 5P I N _ 5 2P I N _ 4 8P I N _ 4 5P I N 4 3P I N _ 4 1PIN_142PIN_139PIN_136PIN_134PIN_132PIN_126PIN_1221 K * 71 K * 71 K * 71 K * 7123456121110987S1P I N _ 5 7P I N _ 5 9P I N _ 6 3P I N _ 6 5P I N _ 6 9P I N _ 7 11 K * 6+3.3VR4 13 2VCCNCGNDOUTY150MHzC0104+3.3VCLKPIN_17Vin1GND2Vout3U2C20.1uF+C1100uF+5V+3.3V 9 時鐘分頻設(shè)計 分頻是將一個給定的頻率較高的數(shù)字輸入信號經(jīng)過適當?shù)奶幚矶a(chǎn)生一個或數(shù)個頻率較低的數(shù)字輸出信號。 由于開發(fā)板的時鐘信號頻率是 50MHz,直接作為二極管點亮 頻率和數(shù)碼管掃描頻率過大,不符合設(shè)計要 求 ,如 下 圖5所示為 50MHz有源晶振電路圖 。因此需將時鐘信號分 頻,分頻成兩個時鐘信號分別給發(fā)光二極管作為移動速度和數(shù)碼管的顯示 信號, 分別 設(shè)置分頻系數(shù)為 25000000、 5000000, 分頻后的信號頻率為 1Hz、 ,此時發(fā)光二極管的移動速度為 1s,符合設(shè)計要求。 4132V C CNC G N DO U TY15 0 M HzC01 0 4+ 3 .3 VC L KP I N_ 1 7 圖 5 50MHz 有源晶振電路圖 部分時鐘分頻源程序: p1:process(count,clk) 25000000 倍分頻,發(fā)光二極管 begin if clk39。event and clk=39。139。 then count=count+1。 if count=25000000 then tmp=39。139。 count=0。 else tmp=39。039。 end if。 end if。 end Process。 p2:process(couny) 5000000 倍分頻,數(shù)碼管 begin if clk39。event and clk=39。139。 then couny=couny+1。 if couny=5000000 then tmg=39。139。 couny=0。 else tmg=39。039。 end if。 end if。 end Process。 狀態(tài)機設(shè)計 7種狀態(tài)及狀態(tài)轉(zhuǎn)移 狀態(tài)機設(shè)置了 7 個狀態(tài),分別是等待發(fā)球狀態(tài)( waitserve) 、第一盞燈亮狀態(tài)( light1on)、第七 盞燈亮狀態(tài)( light7on)、球向乙移動狀態(tài)( ballmoveto2)、球向甲移動狀態(tài)( ballmoveto1)、允許甲擊球狀態(tài)( allow1hit)和允許乙擊球狀態(tài)( allow2hit) 如表 1 所示。 這是該程序中起決定作用的七個狀態(tài)。開始的時候處于“等待發(fā)球狀態(tài)”,若甲發(fā)球 則狀態(tài)轉(zhuǎn)移到“第 一盞燈亮狀態(tài)”,若乙發(fā)球則轉(zhuǎn)移到“第七 盞燈亮狀態(tài)”,具體說明以乙 球為例。 10 若發(fā)球后甲 沒有提前擊球 規(guī)定球移動到對方第一個發(fā)光二極管時允許擊球,那么狀態(tài)機從“第七盞燈亮狀態(tài)”轉(zhuǎn)移到“球向甲移動狀態(tài)”。若在“球向甲移動狀態(tài)”甲 仍然沒有提前擊球, 狀態(tài)就轉(zhuǎn)移到“允許甲 擊球狀態(tài)”,在此狀態(tài)下,如果甲 擊球了,那么狀態(tài)就轉(zhuǎn)移到“ 球向乙移動狀態(tài)”。在“第七 盞燈亮狀態(tài)”, “球向甲移動狀態(tài)”中,如果甲 擊球了,就算提前擊球,這樣甲得分,狀態(tài)轉(zhuǎn)移到“等待發(fā)球狀態(tài)”等待發(fā)球,“ 球向乙 移動狀態(tài)”之后的過程和前面 的過程只是甲乙角色的調(diào)換。狀態(tài)轉(zhuǎn)移規(guī)則都是一樣的。 表 1 狀態(tài)機的 7 種狀態(tài)及含義 狀 態(tài) 含 義 waitserve 等待發(fā)球狀態(tài) light1on 第一盞燈亮狀態(tài) ballmoveto2 球向乙移動狀態(tài) allow2hit 允許乙擊球狀態(tài) light7on 第七盞燈亮狀態(tài) ballmoveto1 球向甲移動狀態(tài) allow1hit 允許甲擊球狀態(tài) 結(jié)合表 1,從 圖 6 乒乓球游戲機的 MDS 圖 中很清楚地看出乒乓游戲機比賽過程中球的移動情況,及加分方法圖 7 乒乓球游戲機轉(zhuǎn)移圖, 還可以初步了解到 本狀態(tài)機設(shè)計的基本思路。 /球臺控制程序 狀態(tài)機是種很重要的時序電路,也是本設(shè)計的核心部件 。 狀態(tài)機屬于時序電路范疇,實現(xiàn)一個控制功能更為方便,并提高了控制速度 [6]。在本設(shè)計中,狀態(tài)機用兩個信號表示狀態(tài) : STATE 表示當前狀態(tài), I表示下一個狀態(tài)。此狀態(tài)機由兩個進程構(gòu)成,狀態(tài)機的輸入 /輸出引腳的作用如表 2 所示。其中SCORE11[6..0]、 SCORE12[6..0]、 SCORE21[6..0]、 SCORE22[6..0]用七段 BCD碼譯碼器顯示得分情況,而 SCORE SCORE2 用二進制進 行加分,由記分器反饋回來。 11 圖 6 乒乓球游戲機的 MDS 圖 表 2 輸入 /輸出引腳的作用 引 腳 作 用 Clk 10Hz 的時鐘,可由系統(tǒng)時鐘分頻得到。此時時鐘決定了球移動的速度, 可根據(jù)實際需要調(diào)整。 Reset 復位鍵,比賽重新開始,記分器清 0 Sever[1..0] 發(fā)球信號 Hit hit2 甲和乙雙方的擊球鍵 (可以將其與開球鍵合并 ) Start Start 控制游戲是否開始 Tmp、 tmg tmp,tmg 為輸入輸出類型,作為分頻后的信號,供給數(shù)碼管掃描和發(fā)光二極管 點亮使用 Score11[6..0]score12[6..0] Score21[6..0]score22[6..0] 甲、乙雙方的分數(shù) (由記分器給出 ) Light[6..0] 接 7 個發(fā)光二極管 Wait Light1on Light7on Ballmoveto2 Ballmoveto1 Allow2hit Allow1hit S1 Hit1 Hit2 S2 L7 L1 Hit2 Hit1 Hit1 Hit2 Hit2 Hit1 Hit2 Hit1 12 甲發(fā)球 ? 乙發(fā)球? 靠近甲的 L1 燈亮 靠近乙 的 L7 燈亮 球向乙移動 球向甲移動 乙擊球? 球移動到 L7? 球移動到 L1? 等待發(fā)球 甲擊球? 乙得分 甲得分 Yes Yes No Yes Yes No No No 圖 7 乒乓游戲機狀態(tài)轉(zhuǎn)移圖 狀態(tài)機的 主要部分源 程序如下: p3:process(tmp) 狀態(tài)機部分 begin case state is when waitserve = 等待狀態(tài)下 進程處于等待發(fā)球狀態(tài) case serve is when 00 = i=0。 when 10 = i=1。state=light1on。 when 01 = i=7。state=light7on。 when 11 = i=0。 when others = i=0。 13 end case。 when light1on = i=2。 light1on 狀態(tài)下 進程處于第一盞燈亮狀態(tài) if hit2=39。139。 then i=0。 count1=count1+1。state=waitserve。 else state=ballmoveto2。 end if。 when light7on = i=6。 light7on 狀態(tài)下 進程處于第八盞燈亮狀態(tài) if hit1=39。139。 then i=0。 count2=count2+1。state=waitserve。 else state=ballmoveto1。 end if。 when ballmoveto1 = 進程處于球向 2 移動狀態(tài) if hit1=39。139。 then i=0。 count2=count2+1。state=waitserve。 elsif i=2 then i=1。 state=allow1hit。 else i=i1。 end if。 when ballmoveto2 = 進程處于球向 1 移動狀態(tài) if hit2=39。139。 then i=0。 count1=count1+1。state=waitserve。 elsif i=6 then i=7。 state=allow2hit。 else i=i+1。 end if。 when allow1hit = 進程處于允許 1 擊球狀態(tài) if hit1=39。139。 then i=2。 state=ballmoveto2。 else count2=count2+1。i=0。 state=waitserve。 end if。 when allow2hit = 進程處于允 許 2 擊球狀態(tài) if hit2=39。139。 then i=6。state=ballmoveto1。 else count1=count1+1。i=0。 state=waitserve。 end if。 end case。 end if。 end if。 end process。 end one。 譯碼顯示電路設(shè)計 數(shù)碼管的 動態(tài)掃描 顯示 就是指我們采用分時的方法,輪流控制各個顯示器的公共端,使各個顯示器輪流點亮。 在輪流點亮掃描過程中,每位顯示器的點亮時間是極 為短暫的,但由于人的視覺暫留現(xiàn)象及發(fā)光二極 管的余輝效應(yīng),盡管實際上各位顯示器并非同時點亮,但只要掃描的速度足夠快,給人的