版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 交通信號燈控制器</b></p><p> 一、課程設計的要求及目的:</p><p> 1.了解電子設計的具體流程和方法。</p><p> 2. 掌握電子設計的基本要求,能夠運用所學的知識解決生活中的一些問題。</p><p> 3. 初步掌握VHDL語言編程,并設計出一個有意義
2、的小型系統(tǒng)。</p><p> 4. 掌握Altium Designer6軟件的應用,并且了解相關硬件的組成和功能。</p><p> 二、設計的功能要求:</p><p> 1、交通燈分南北方向和東西方向紅綠燈安排,SN為主</p><p> 干道,EW為支干道。此交通燈分為正常模式和緊急</p><p>
3、 模式,在正常模式下分為白天模式和夜間模式。</p><p> 2、交通燈可以根據(jù)時鐘的時間自動從白天模式轉為黑夜模式,交通燈緊急模式和正常模式之間的轉換通過開關控制,且當從緊急模式回復到正常模式時,數(shù)碼管顯示回到最初狀態(tài)。</p><p> 3、白天模式:主干道工作時:SN(南北直走)綠燈40秒,黃燈5秒;SWNE(南拐西、北拐東)綠燈20秒,黃燈5秒。支干道工作時:EW(東西直走)
4、綠燈20秒,黃燈5秒,WNES(西拐北、東拐南)綠燈20秒,黃燈5秒。(設計直走與左拐的功能是為了防止左拐與對面直走的車輛相撞)</p><p> 4、黑夜模式:主干道工作時:SN(南北直走)綠燈20秒,黃燈5秒;SWNE(南拐西、北拐東)綠燈10秒,黃燈5秒。支干道工作時:EW(東西直走)綠燈15秒,黃燈5秒,WNES(西拐北、東拐南)綠燈10秒,黃燈5秒。</p><p> 5、緊
5、急模式:主干道與支干道全亮紅燈且顯示為00。</p><p><b> 三、模塊說明</b></p><p><b> 原理圖:</b></p><p><b> 1、信號模塊</b></p><p> 說明:從器件庫提出的,提供20M赫茲的脈沖信號。</p>
6、;<p><b> 2、開關模塊</b></p><p> 說明:從器件庫提出,控制下載JTDLCD上燈的顯示,控制主控 模塊上CM的選擇,CM為0時為正常模式,CM為1時為緊 急模式??刂奇I盤模塊的復位R,鍵盤只有在復位后才能 正常使用,R為1有效。</p><p><b> 3、鍵盤模塊</b
7、></p><p> 說明:KEYPAD器件從器件庫提出,將板上鍵盤變?yōu)?6個按鍵, 從左上到右下,按鍵按下時,對應輸出為1,松開為0。 支持多個按鍵(必須是同一行)同時按下,帶防抖,與 NANOBOARD庫中器件KEYPAD直接相連。</p><p> 管腳說明: ICOL[3..0]、OROW[3..0]連接KEYPAD器件,</p&g
8、t;<p> 輸入:CPIN 時鐘脈沖輸入 按20MHz設計,鏈接脈沖發(fā)生器。</p><p> 復位R鏈接開關O4。</p><p> 輸出:Y[15..0] 16個按鍵輸出。當按下Y1時,JTD模塊、時鐘模塊和JTDLCD模塊復位,Y1鏈接JTD模塊R、時鐘模塊R、R1和JTDLCD模塊R。</p><p> 模塊程序VHDL語言如下:&l
9、t;/p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> entity PADTOKEY is</p><p> port (CPIN,R :IN
10、 STD_LOGIC;</p><p> Y: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);</p><p> ICOL : IN STD_LOGIC_VECTOR(3 DOWNTO 0); --ICOL[3..0]連接KEYPAD器件 </p><p> OROW : OUT STD_LOGIC_VECTOR(
11、3 DOWNTO 0) --ROW[3..0]連接KEYPAD器件 </p><p><b> );</b></p><p> END ENTITY;</p><p> architecture JGT of PADTOKEY is</p><p> TYPE STATES IS (S
12、0,S1,S2,S3,S4);</p><p> SIGNAL S: STATES;</p><p> SIGNAL SROW : STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p> SIGNAL CPCT : INTEGER RANGE 0 TO 255;</p><p> SIGNAL CTDELAY:
13、 INTEGER RANGE 0 TO 511;</p><p> SIGNAL CP:STD_LOGIC;</p><p> BEGIN --KEY分頻 </p><p> PROCESS(CPIN)</p><p><b> BEGIN</b&g
14、t;</p><p> IF CPIN='1' AND CPIN 'EVENT THEN</p><p> IF CPCT=255 THEN</p><p> CPCT<=0;CP<= NOT CP;</p><p><b> ELSE</b></p><p
15、> CPCT<=CPCT+1;</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(CP,R)</p><p> VARIAB
16、LE N:INTEGER RANGE 0 TO 12; --整數(shù)變量 </p><p><b> BEGIN</b></p><p> IF R='1' THEN</p><p> S<=S0;Y<="0000000000000000";SROW<="1110&q
17、uot;;N:=0;</p><p> ELSIF CP='1' AND CP'EVENT THEN</p><p><b> CASE S IS</b></p><p> WHEN S0=>S<=S1;</p><p> WHEN S1=>OROW<=SROW;S
18、<=S2;</p><p> WHEN S2=>S<=S3;</p><p><b> CASE N IS</b></p><p> WHEN 0 =>Y(3 DOWNTO 0)<=NOT ICOL;</p><p> WHEN 4 =>Y(7 DOWNTO 4)<=NO
19、T ICOL;</p><p> WHEN 8 =>Y(11 DOWNTO 8)<=NOT ICOL;</p><p> WHEN 12 =>Y(15 DOWNTO 12)<=NOT ICOL;</p><p> WHEN OTHERS=>NULL;</p><p><b> END CASE;
20、</b></p><p> WHEN S3=>IF N=12 THEN</p><p> N:=0;S<=S4;CTDELAY<=0;SROW<="1110";</p><p><b> ELSE</b></p><p> N:=N+4;S<=S1;S
21、ROW<=SROW(2 DOWNTO 0)&SROW(3);</p><p><b> END IF;</b></p><p> WHEN S4=>IF CTDELAY=511 THEN</p><p> S<=S1;CTDELAY<=0;</p><p><b> EL
22、SE</b></p><p> CTDELAY<=CTDELAY+1;</p><p><b> END IF;</b></p><p><b> END CASE;</b></p><p><b> END IF;</b></p>&l
23、t;p> END PROCESS;</p><p><b> END JGT;</b></p><p><b> 4、JTD模塊</b></p><p> 說明: 此為主控模塊,在此模塊中將20MHZ的脈沖分頻為2.6HZ的脈沖,實現(xiàn)交通燈紅黃綠的變換,實現(xiàn)紅黃綠燈分秒的計數(shù),實現(xiàn)正常模式與緊急模式的轉換,接
24、收來自時鐘的脈沖,實現(xiàn)白天模式與黑夜模式的自動轉換。</p><p><b> 管腳說明:</b></p><p> 輸入:CM:為0時選擇正常模式,為1時選擇緊急模式,連接開關O2。</p><p> CPIN:脈沖輸入,連接脈沖端口。</p><p> SWITCH:為1時選擇白天模式,為0時選擇黑夜模式,連
25、接時鐘模塊的MICOUT1。</p><p> R:復位,連接鍵盤模塊KEY0。</p><p> 輸出:EW[7..0]:輸出東西直走方向分秒信號。</p><p> EWRYG[2..0]:輸出東西直走方紅黃綠燈狀態(tài)信號。</p><p> SN[7..0]: 輸出南北直走方向分秒信號。</p><p>
26、 SNRYG[2..0]: 輸出南北直走方紅黃綠燈狀態(tài)信號</p><p> SWNE[7..0]: 輸出南拐西、北拐東方向分秒信號。</p><p> SWNERYG[2..0]: 輸出南拐西、北拐東紅黃綠燈狀態(tài)信號</p><p> WNES[7..0]:輸出西拐北、東拐南方向分秒信號。</p><p> WNESRYG[2..0
27、]: 輸出西拐北、東拐南方紅黃綠燈狀態(tài)信號。</p><p> 程序VHDL語言如下:</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>
28、 USE IEEE.STD_LOGIC_ARITH.ALL;</p><p> entity JTD is</p><p> port (CPIN,R ,SWITCH,CM:IN STD_LOGIC;</p><p> SN,SWNE,EW,WNES :OUT STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p>
29、 EWRYG,SNRYG,SWNERYG,WNESRYG : OUT STD_LOGIC_VECTOR(2 DOWNTO 0)</p><p><b> );</b></p><p> end entity ;</p><p> architecture JGT of JTD is</p><p> SIGNA
30、L CTEW,CTSN,CTSWNE,CTWNES: STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p> SIGNAL CTFP: INTEGER RANGE 0 TO 4000000;</p><p> SIGNAL CP: STD_LOGIC;</p><p> TYPE STATES IS (S0,S1,S2,S3,S4,S5
31、,S6,S7);</p><p> SIGNAL S: STATES;</p><p><b> BEGIN</b></p><p> PROCESS(CPIN)</p><p><b> BEGIN</b></p><p> IF CPIN='1'
32、 AND CPIN 'EVENT THEN</p><p> IF CTFP=4000000 THEN</p><p> CTFP<=0;CP<=NOT CP;</p><p><b> ELSE</b></p><p> CTFP<=CTFP+1;</p><p&g
33、t;<b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(SWITCH,CM,CP,R)</p><p><b> BEGIN</b></p>&
34、lt;p> IF CM='0' THEN -- 正常模式 </p><p> IF SWITCH='1' THEN -- 白天</p><p> -- SN SWNE EW WNES</p><p> --S0:
35、G40 R70 00</p><p> --S1:Y05 R30</p><p> --S2: 00 G20 R25</p><p> --S3: Y05 R05</p><p> --S4:R50 00 G20</p><p> --S5:
36、R30 Y05</p><p> --S6:R25 00 G20</p><p> --S7:R05 Y05</p><p> IF R='1' THEN --復位 </p><p> S<
37、=S0;CTSN<=X"28";CTEW<=X"46";CTWNES<=X"00"; SNRYG<="001";EWRYG<="100";</p><p> ELSIF CP='1' AND CP 'EVENT THEN</p><p>
38、;<b> CASE S IS</b></p><p> WHEN S0=>IF CTSN=X"01" THEN</p><p> S<=S1;CTSN<=X"05";CTEW<=X"1E";SNRYG<="010";EWRYG<="10
39、0";</p><p><b> ELSE</b></p><p> CTSN<=CTSN-1;CTEW<=CTEW-1;</p><p><b> END IF;</b></p><p> WHEN S1=>IF CTSN=X"01" THE
40、N</p><p> S<=S2;CTEW<=X"19";CTSN<=X"00";CTSWNE<=X"14";SWNERYG<="001";EWRYG<="001";</p><p><b> ELSE</b></p>
41、<p> CTSN<=CTSN-1;CTEW<=CTEW-1;</p><p><b> END IF;</b></p><p> WHEN S2=>IF CTSWNE=X"01" THEN</p><p> S<=S3;CTSWNE<=X"05";CT
42、EW<=X"05";SWNERYG<="010";EWRYG<="100";</p><p><b> ELSE</b></p><p> CTSWNE<=CTSWNE-1;CTEW<=CTEW-1;</p><p><b> END IF
43、;</b></p><p> WHEN S3=>IF CTSWNE=X"01" THEN</p><p> S<=S4;CTSN<=X"32";CTSWNE<=X"00";CTEW<=X"14";SNRYG<="100";EWRYG<
44、="001";</p><p><b> ELSE</b></p><p> CTSWNE<=CTSWNE-1;CTEW<=CTEW-1;</p><p><b> END IF;</b></p><p> WHEN S4=>IF CTEW=X"
45、;01" THEN</p><p> S<=S5;CTSN<=X"1E";CTEW<=X"05";SNRYG<="100";EWRYG<="010";</p><p><b> ELSE</b></p><p> CTS
46、N<=CTSN-1;CTEW<=CTEW-1;</p><p><b> END IF;</b></p><p> WHEN S5=>IF CTEW=X"01" THEN</p><p> S<=S6;CTSN<=X"19";CTWNES<=X"14&q
47、uot;;CTEW<=X"00";SNRYG<="100";WNESRYG<="001";</p><p><b> ELSE</b></p><p> CTSN<=CTSN-1;CTEW<=CTEW-1;</p><p><b> END
48、 IF;</b></p><p> WHEN S6=>IF CTWNES=X"01" THEN</p><p> S<=S7;CTSN<=X"05";CTWNES<=X"05";SNRYG<="100";EWRYG<="010";</
49、p><p><b> ELSE</b></p><p> CTSN<=CTSN-1;CTWNES<=CTWNES-1;</p><p><b> END IF;</b></p><p> WHEN S7=>IF CTWNES=X"01" THEN</p
50、><p> S<=S0;CTSN<=X"28";CTEW<=X"46";CTWNES<=X"00"; SNRYG<="001";EWRYG<="100";</p><p><b> ELSE</b></p><p&
51、gt; CTSN<=CTSN-1;CTWNES<=CTWNES-1;</p><p><b> END IF;</b></p><p> WHEN OTHERS=>NULL;</p><p><b> END CASE;</b></p><p><b> END
52、 IF;</b></p><p> ELSIF SWITCH='0' THEN --黑夜</p><p> -- SN SWNE EW WNES</p><p> --S0:G20 R40 00</p><p> --S1:
53、Y05 R20</p><p> --S2:00 G10 R15</p><p> --S3: Y05 R05</p><p> --S4:R35 00 G15</p><p> --S5:R20 Y05</p><p> --S6:R15
54、 00 G10</p><p> --S7:R05 Y05</p><p> IF R='1' THEN --復位 </p><p> S<=S0;CTSN<=X"14";CTEW<=X"28
55、";CTWNES<=X"00"; SNRYG<="001";EWRYG<="100";</p><p> ELSIF CP='1' AND CP 'EVENT THEN</p><p><b> CASE S IS</b></p><
56、p> WHEN S0=>IF CTSN=X"01" THEN</p><p> S<=S1;CTSN<=X"05";CTEW<=X"14";SNRYG<="010";EWRYG<="100";</p><p><b> ELSE<
57、;/b></p><p> CTSN<=CTSN-1;CTEW<=CTEW-1;</p><p><b> END IF;</b></p><p> WHEN S1=>IF CTSN=X"01" THEN</p><p> S<=S2;CTEW<=X&quo
58、t;05";CTSN<=X"00";CTSWNE<=X"0F";SWNERYG<="001";EWRYG<="001";</p><p><b> ELSE</b></p><p> CTSN<=CTSN-1;CTEW<=CTEW-1;&l
59、t;/p><p><b> END IF;</b></p><p> WHEN S2=>IF CTSWNE=X"01" THEN</p><p> S<=S3;CTSWNE<=X"05";CTEW<=X"05";SWNERYG<="010&qu
60、ot;;EWRYG<="100";</p><p><b> ELSE</b></p><p> CTSWNE<=CTSWNE-1;CTEW<=CTEW-1;</p><p><b> END IF;</b></p><p> WHEN S3=>I
61、F CTSWNE=X"01" THEN</p><p> S<=S4;CTSN<=X"23";CTSWNE<=X"00";CTEW<=X"0F";SNRYG<="100";EWRYG<="001";</p><p><b>
62、 ELSE</b></p><p> CTSWNE<=CTSWNE-1;CTEW<=CTEW-1;</p><p><b> END IF;</b></p><p> WHEN S4=>IF CTEW=X"01" THEN</p><p> S<=S5;C
63、TSN<=X"14";CTEW<=X"05";SNRYG<="100";EWRYG<="010";</p><p><b> ELSE</b></p><p> CTSN<=CTSN-1;CTEW<=CTEW-1;</p><p&
64、gt;<b> END IF;</b></p><p> WHEN S5=>IF CTEW=X"01" THEN</p><p> S<=S6;CTSN<=X"0F";CTEW<=X"00";CTWNES<=X"0A";SNRYG<="1
65、00";WNESRYG<="001";</p><p><b> ELSE</b></p><p> CTSN<=CTSN-1;CTEW<=CTEW-1;</p><p><b> END IF;</b></p><p> WHEN S6=&g
66、t;IF CTWNES=X"01" THEN</p><p> S<=S7;CTSN<=X"05";CTWNES<=X"05";SNRYG<="100";EWRYG<="010";</p><p><b> ELSE</b></p
67、><p> CTSN<=CTSN-1;CTWNES<=CTWNES-1;</p><p><b> END IF;</b></p><p> WHEN S7=>IF CTWNES=X"01" THEN</p><p> S<=S0;CTSN<=X"14&qu
68、ot;;CTEW<=X"28";CTWNES<=X"00"; SNRYG<="001";EWRYG<="100";</p><p><b> ELSE</b></p><p> CTSN<=CTSN-1;CTWNES<=CTWNES-1;</p
69、><p><b> END IF;</b></p><p> WHEN OTHERS=>NULL;</p><p><b> END CASE;</b></p><p><b> END IF;</b></p><p><b> E
70、ND IF;</b></p><p> ELSIF CM='1'THEN --緊急模式 SN EW 亮紅燈</p><p> CTSN<=X"00" ;CTEW<=X"00";CTSWNE<=X"00" ;CTWNES<=X&quo
71、t;00";EWRYG<="100";SNRYG<="100";WNESRYG<="100";SWNERYG<="100" ;</p><p><b> END IF;</b></p><p> END PROCESS;</p><
72、p> PROCESS(CTEW,CTSN,CTSWNE,CTWNES) --將16進制轉換為BCD碼</p><p><b> BEGIN</b></p><p> IF CTEW<X"0A" THEN</p><p><b> EW<=CTEW;</b><
73、;/p><p> ELSIF CTEW<X"14" THEN</p><p> EW<=CTEW+6;</p><p> ELSIF CTEW<X"1E" THEN</p><p> EW<=CTEW+12;</p><p> ELSIF CTEW&
74、lt;X"28" THEN</p><p> EW<=CTEW+18;</p><p> ELSIF CTEW<X"32" THEN</p><p> EW<=CTEW+24;</p><p> ELSIF CTEW<X"3C" THEN</p&
75、gt;<p> EW<=CTEW+30;</p><p> ELSIF CTEW<X"46" THEN</p><p> EW<=CTEW+36;</p><p><b> ELSE</b></p><p> EW<=CTEW+42;</p>
76、<p><b> END IF;</b></p><p> IF CTSN<X"0A" THEN</p><p><b> SN<=CTSN;</b></p><p> ELSIF CTSN<X"14" THEN</p><
77、p> SN<=CTSN+6;</p><p> ELSIF CTSN<X"1E" THEN</p><p> SN<=CTSN+12;</p><p> ELSIF CTSN<X"28" THEN</p><p> SN<=CTSN+18;</p>
78、;<p> ELSIF CTSN<X"32" THEN</p><p> SN<=CTSN+24;</p><p> ELSIF CTSN<X"3C" THEN</p><p> SN<=CTSN+30;</p><p> ELSIF CTSN<X&
79、quot;46" THEN</p><p> SN<=CTSN+36;</p><p><b> ELSE</b></p><p> SN<=CTSN+40;</p><p><b> END IF;</b></p><p> IF CTSWN
80、E<X"0A" THEN</p><p> SWNE<=CTSWNE;</p><p> ELSIF CTSWNE<X"14" THEN</p><p> SWNE<=CTSWNE+6;</p><p> ELSIF CTSWNE<X"1E" T
81、HEN</p><p> SWNE<=CTSWNE+12;</p><p> ELSIF CTSWNE<X"28" THEN</p><p> SWNE<=CTSWNE+18;</p><p> ELSIF CTSWNE<X"32" THEN</p><
82、;p> SWNE<=CTSWNE+24;</p><p> ELSIF CTSWNE<X"3C" THEN</p><p> SWNE<=CTSWNE+30;</p><p><b> ELSE</b></p><p> SWNE<=CTSWNE+36;<
83、/p><p><b> END IF;</b></p><p> IF CTWNES<X"0A" THEN</p><p> WNES<=CTWNES;</p><p> ELSIF CTWNES<X"14" THEN</p><p>
84、 WNES<=CTWNES+6;</p><p> ELSIF CTWNES<X"1E" THEN</p><p> WNES<=CTWNES+12;</p><p> ELSIF CTWNES<X"28" THEN</p><p> WNES<=CTWNES+1
85、8;</p><p> ELSIF CTWNES<X"32" THEN</p><p> WNES<=CTWNES+24;</p><p> ELSIF CTWNES<X"3C" THEN</p><p> WNES<=CTWNES+30;</p><
86、p><b> ELSE</b></p><p> WNES<=CTWNES+36;</p><p><b> END IF;</b></p><p> END PROCESS;</p><p><b> END JGT;</b></p>&l
87、t;p><b> 5、時鐘模塊</b></p><p> 說明:將20MHZ的脈沖分頻為2.6HZ,由此脈沖作為分秒的計數(shù),秒計數(shù)為60進制,分計數(shù)為5進制。當分秒從00計數(shù)到20時,MICOUT1輸出為1;當分秒從20計數(shù)到40時,MICOUT1輸出為0。</p><p><b> 管腳說明:</b></p><
88、p> 輸入:CPIN:連接脈沖端口。</p><p> R、R1:復位,連接鍵盤模塊KEY0,為1有效。</p><p> 輸出:MICOUT:輸出信號,連接SWITCH。</p><p> 程序WHDL語言如下:</p><p> LIBRARY IEEE;</p><p> USE IEEE.
89、STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> USE IEEE.STD_LOGIC_ARITH.ALL;</p><p> ENTITY CLOCK1 IS</p><p> PORT(CPIN,R,R1:IN STD_LOGIC;<
90、/p><p> MICOUT1: OUT STD_LOGIC);</p><p> END CLOCK1;</p><p> ARCHITECTURE JGT OF CLOCK1 IS</p><p> TYPE STATES IS (S0,S1,S2); --3個狀態(tài):分秒:00 20 40</
91、p><p> SIGNAL S:STATES;</p><p> SIGNAL MICC:STD_LOGIC_VECTOR( 3 DOWNTO 0);</p><p> SIGNAL SCE:STD_LOGIC_VECTOR( 7 DOWNTO 0);</p><p> SIGNAL CTFP: INTEGER RANGE 0 TO 40
92、00000;</p><p> SIGNAL CP:STD_LOGIC;</p><p><b> BEGIN</b></p><p> PROCESS(CPIN) --分頻到2.6HZ, T=0.38S </p><p><b> B
93、EGIN</b></p><p> IF CPIN='1' AND CPIN 'EVENT THEN</p><p> IF CTFP=4000000 THEN</p><p> CTFP<=0;CP<=NOT CP;</p><p><b> ELSE</b>&l
94、t;/p><p> CTFP<=CTFP+1;</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(CP,R)</p>&l
95、t;p><b> BEGIN</b></p><p> IF R='1' THEN --復位到00</p><p> MICOUT1<='1';</p><p> S<=S0;
96、 -- 分秒 輸出</p><p> ELSIF RISING_EDGE(CP) THEN --S0 00 1</p><p> CASE S IS --S1 20 0</p><p> WHEN S0=>MICOUT1<='
97、;1'; --S2 40 1</p><p><b> S<=S1;</b></p><p> WHEN S1=>IF MICC="0010" THEN</p><p> MICOUT1<='0';</p><p>
98、;<b> S<=S2;</b></p><p><b> END IF;</b></p><p> WHEN S2=>IF MICC="0100" THEN</p><p><b> S<=S0;</b></p><p><
99、b> END IF;</b></p><p><b> END CASE;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(CP,R1)</p><p><
100、;b> BEGIN</b></p><p> IF R1='1' THEN --復位</p><p> SCE<="00000000";</p><p> MICC<="0000";</p><p> EL
101、SIF RISING_EDGE(CP) THEN --若秒為*9則變*0,在此情況下: </p><p> IF SCE(3 DOWNTO 0)="1001" THEN --若*=5則秒為00,在此情況下:</p><p> SCE(3 DOWNTO 0)<="0000&quo
102、t;; --若分為4則分0;否則分++ </p><p> IF SCE(7 DOWNTO 4)="0101" THEN</p><p> SCE<="00000000";</p><p> IF MICC="0100" THEN</p><
103、p> MICC<="0000";</p><p><b> ELSE</b></p><p> MICC<=MICC+1;</p><p><b> END IF;</b></p><p><b> ELSE</b></p&
104、gt;<p> SCE( 7 DOWNTO 4)<=SCE(7 DOWNTO 4)+1; --若*!=5則*++ </p><p><b> END IF ;</b></p><p><b> ELSE</b></p><p> SCE(3 DOWNTO 0)<=SCE(3 DO
105、WNTO 0)+1; --若秒個位不為9,則個位++ </p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p><b> END JGT;</b><
106、/p><p> 6、JTDLCD模塊</p><p> 說明:將主控模塊輸入的交通燈狀態(tài),數(shù)字轉換為數(shù)碼管可識別的BCD碼,并在數(shù)碼管上顯示。</p><p><b> 管腳說明:</b></p><p> 輸入:R:復位為1有效,連接鍵盤模塊KEY0。</p><p> CPIN:連接脈沖
107、發(fā)生器。</p><p> EW[7..0]:輸入東西直走方向分秒信號,連接主控模塊。 EWRYG[2..0]:輸入東西直走方紅黃綠燈狀態(tài)信號,連接主控模 塊。</p><p> SN[7..0]: 輸入南北直走方向分秒信號,連接主控模塊。</p><p> SNRYG[2..0]: 輸入南北直走方紅黃綠燈狀態(tài)信號,連接主控模塊。
108、</p><p> SWNE[7..0]: 輸入南拐西、北拐東方向分秒信號,連接主控模塊。</p><p> SWNERYG[2..0]: 輸入南拐西、北拐東紅黃綠燈狀態(tài)信號,連接主控模塊。</p><p> WNES[7..0]:輸入西拐北、東拐南方向分秒信號,連接主控模塊。</p><p> WNESRYG[2..0]: 輸入西拐
109、北、東拐南方紅黃綠燈狀態(tài)信號,連接主控模塊。</p><p> BUSY:連接顯示端口BUSY,判斷數(shù)碼管是否忙碌。</p><p> 輸出:CLK:給顯示端口脈沖。</p><p> REST:給顯示端口復位信號。</p><p> DATA[7..0]:輸出顯示端口可識別的分秒計數(shù)。</p><p> A
110、DDR[3..0]:給顯示端口可識別的交通燈狀態(tài)顯示。</p><p><b> OUTLINE:</b></p><p> STORBE:輸出顯示端口的數(shù)據(jù)輸入信號,1有效。</p><p> 程序VHDL語言如下:</p><p> LIBRARY IEEE;</p><p> US
111、E IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> entity JTDLCD is</p><p> port (CPIN,R,BUSY :IN STD_LOGIC;</p><p> EW,SWNE,WNES,SN :IN ST
112、D_LOGIC_VECTOR(7 DOWNTO 0);</p><p> EWRYG,SWNERYG,WNESRYG,SNRYG : IN STD_LOGIC_VECTOR(2 DOWNTO 0);</p><p> CLK,RST,STROBE,OUTLINE : OUT STD_LOGIC;</p><p> DATA : OUT STD_LOGIC_VE
113、CTOR(7 DOWNTO 0);</p><p> ADDR : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)</p><p><b> );</b></p><p> end entity ;</p><p> architecture JGT of JTDLCD is</p>
114、<p> TYPE STATES IS (S0,S1,S2,S3,S4);</p><p> SIGNAL S: STATES;</p><p> SIGNAL LCDPT : INTEGER RANGE 0 TO 24;</p><p> SIGNAL CPCT : INTEGER RANGE 0 TO 65535;</p>&
115、lt;p> SIGNAL CP: STD_LOGIC;</p><p> SIGNAL ASCEW,ASCSWNE,ASCWNES,ASCSN : STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p><b> begin</b></p><p> PROCESS(CPIN,R)</p><
116、;p><b> BEGIN</b></p><p> CLK<=CPIN; --分頻為500US周期 </p><p> IF R='1' THEN</p><p> CPCT<=65535;</p><p> ELSIF
117、 CPIN='1' AND CPIN 'EVENT THEN</p><p> IF CPCT=0 THEN</p><p> CPCT<=65535;CP<=NOT CP;</p><p><b> ELSE</b></p><p> CPCT<=CPCT-1;<
118、/p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(CP,R) --主進程:擬采用500us時鐘,即在500u
119、s后完成狀態(tài)轉換,修改LCDPT指針</p><p> BEGIN --S1,S2完成初始化固定顯示的功能</p><p> IF R='1' THEN</p><p> S<=S0;LCDPT<=0;RST<='1';</p&
120、gt;<p> ELSIF CP='1' AND CP 'EVENT THEN --S0:初始狀態(tài),在R=1時,處于S0狀態(tài),LCDPT=0</p><p><b> CASE S IS</b></p><p> WHEN S0=> S<=S1;LCDPT<=0;RST<=&
121、#39;1'; --輸出rst=1, 轉S1 </p><p> WHEN S1=> RST<='0';STROBE<='0'; --S1:輸出RST=0;LCD數(shù)據(jù)輸入無效</p><p> IF BUSY='0' THEN --判斷BUSY=0?&
122、lt;/p><p> LCDPT<=LCDPT+1; --Y: LCDPT+1; </p><p> IF LCDPT=13 THEN --LCDPT到固定最后? ¿</p><p> S<=S3; --是:到最后就到動態(tài)掃描S3 &l
123、t;/p><p> ELSE --否: ->S2</p><p><b> S<=S2;</b></p><p><b> END IF;</b></p><p> END IF;
124、 --N; NULL</p><p> WHEN S2=> S<=S1;STROBE<='1'; --S2:給出STROBE信號。轉S1 </p><p> --S3~S4完成掃描顯示功能 </p><p> WHEN S3=> STROBE<='0';
125、 --S3:BUSY=0? :Y: LCDPT循環(huán)+1 ,轉S4 </p><p> IF BUSY='0' THEN</p><p> IF LCDPT=24 THEN</p><p> LCDPT<=13;</p><p><b> ELSE</b></p>
126、<p> LCDPT<=LCDPT+1;</p><p><b> END IF;</b></p><p><b> S<=S4;</b></p><p><b> END IF;</b></p><p> WHEN S4=> STRO
127、BE<='1';S<=S3; --S4:給出STROBE信號,輸入數(shù)據(jù),轉S3 </p><p> WHEN OTHERS=> NULL;</p><p><b> END CASE;</b></p><p><b> END IF;</b></p&
128、gt;<p> END PROCESS;</p><p> PROCESS(LCDPT)</p><p><b> BEGIN</b></p><p> CASE LCDPT IS --選擇輸出進程(LCDPT)</p>
129、<p> WHEN 0 => NULL; --LCDPT=0,NULL </p><p> --LCDPT=1~12 顯示SN SWNE EW WNES </p><p> WHEN 1=> DATA<="01010011";ADDR&l
130、t;="0001";OUTLINE<='0'; --S</p><p> WHEN 2=> DATA<="01001110";ADDR<="0010";OUTLINE<='0'; --N</p><p> WHEN 3=> DATA<="
131、;01010011";ADDR<="0100";OUTLINE<='0'; --S</p><p> WHEN 4=> DATA<="01010111";ADDR<="0101";OUTLINE<='0'; --W</p><p> WHEN
132、 5=> DATA<="01001110";ADDR<="0110";OUTLINE<='0'; --N</p><p> WHEN 6=> DATA<="01000101";ADDR<="0111";OUTLINE<='0'; --E</
133、p><p> WHEN 7=> DATA<="01000101";ADDR<="1000";OUTLINE<='0'; --E</p><p> WHEN 8=> DATA<="01010111";ADDR<="1001";OUTLINE<=&
134、#39;0'; --W</p><p> WHEN 9=> DATA<="01010111";ADDR<="1011";OUTLINE<='0'; --W</p><p> WHEN 10=> DATA<="01001110";ADDR<="1
135、100";OUTLINE<='0'; --N</p><p> WHEN 11=> DATA<="01000101";ADDR<="1101";OUTLINE<='0'; --E</p><p> WHEN 12=> DATA<="0101001
136、1";ADDR<="1110";OUTLINE<='0'; --S</p><p> WHEN 13=>DATA<=ASCSN;ADDR<="0001";OUTLINE<='1'; --SN:GYR 計數(shù) </p><p>
137、WHEN 14=>DATA<="0011"&SN(7 DOWNTO 4);ADDR<="0010";OUTLINE<='1';</p><p> WHEN 15=>DATA<="0011"&SN(3 DOWNTO 0);ADDR<="0011";OUTLINE
138、<='1';</p><p> WHEN 16=>DATA<=ASCSWNE;ADDR<="0100";OUTLINE<='1'; --SWNE:GYR 計數(shù) WHEN 17=>DATA<="0011"&SWNE(7 DOWNTO 4);ADDR<="
139、;0101";OUTLINE<='1';</p><p> WHEN 18=>DATA<="0011"&SWNE(3 DOWNTO 0);ADDR<="0110";OUTLINE<='1';</p><p> WHEN 19=>DATA<=ASCEW;AD
140、DR<="1000";OUTLINE<='1'; -- EW: GYR 計數(shù) </p><p> WHEN 20=>DATA<="0011"&EW(7 DOWNTO 4);ADDR<="1001";OUTLINE<='1';</p>
141、;<p> WHEN 21=>DATA<="0011"&EW(3 DOWNTO 0);ADDR<="1010";OUTLINE<='1';</p><p> WHEN 22=>DATA<=ASCWNES;ADDR<="1011";OUTLINE<='1
142、9;; -- WNES: GYR 計數(shù) WHEN 23=>DATA<="0011"&WNES(7 DOWNTO 4);ADDR<="1100";OUTLINE<='1';</p><p> WHEN 24=>DATA<="0011"&WNES(3 DOWNT
143、O 0);ADDR<="1101";OUTLINE<='1';</p><p> WHEN OTHERS=> NULL;</p><p><b> END CASE;</b></p><p> END PROCESS;</p><p> PROCESS(EWR
144、YG)</p><p> BEGIN --EW :RYG 顯示 </p><p> CASE EWRYG IS</p><p> WHEN "100" => ASCEW<="01010010";</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)電交通信號燈課程設計---交通信號燈控制器仿真設計
- 交通信號燈課程設計---交通信號燈系統(tǒng)設計
- 信號燈課程設計---簡易交通信號燈控制器
- eda課程設計--交通信號燈控制器
- 數(shù)電課程設計---交通信號燈控制器
- 交通信號燈課程設計--交通信號燈控制電路的設計
- eda課程設計---交通信號燈控制器設計
- 數(shù)電交通信號燈課程設計
- 課程設計---交通信號燈控制器
- 課程設計---交通信號燈控制器
- 交通信號燈控制器課程設計
- 課程設計---交通信號燈控制器
- eda課程設計報告交通信號燈控制
- eda課程設計報告--交通信號燈控制
- 交通信號燈控制課程設計
- 數(shù)電課程設計--簡易交通信號燈
- 數(shù)電課程設計報告——交通信號燈
- 課程設計交通信號燈
- 交通信號燈課程設計
- 交通信號燈控制課程設計
評論
0/150
提交評論