【正文】
WHEN 4=num1_2=4。 WHEN 6=num1_2=6。 END CASE。 IF(num1_1 /=0 AND num1_2 /=0)THEN game_counter=game_counter+1。 game_counter_gewei=game_counter mod 10。 END IF。 END PROCESS BTN0_DOWN。 乙玩家按btn1 BTN1_DOWN:PROCESS(btn1,reset) BEGIN IF(reset=39。)THEN num1_1=0。 num2_1=0。 btn0_counter=0。 game_counter=1。 ELSIF(btn139。139。 WHEN 2=num2_1=2。 WHEN 4=num2_1=4。 WHEN 6=num2_1=6。 END CASE。 WHEN 2=num2_2=2。 WHEN 4=num2_2=4。 WHEN 6=num2_2=6。 END CASE。 END IF。 sum2=num2_1+num2_2。139。 judge1=39。 judge2To5=39。 judge2To5_2=39。 judge3=39。 judge4=39。 ELSIF(btn0_counter=btn1_counter AND num2_1 /=0 AND num2_2 /=0)THEN若甲乙按鍵次數(shù)相同,則表示都按了 CASE current_state IS WHEN s0 = first_sum1 =sum1。 IF(num1_10 AND num1_20 AND num2_10 AND num2_20) THEN IF((sum1=7 OR sum1=11)AND(sum2 /=7 AND sum2 /=11)) THEN judge1 = 39。 win_name= 1。139。 ELSE judge1 = 39。 win_name = 0。 END IF。139。 ELSIF(sum1 /=first_sum1 AND sum2=first_sum2) THEN judge2To5 = 39。 win_name = 2。039。 END IF。 WHEN s2 = IF(num1_10 AND num1_20 AND num2_10 AND num2_20) THEN IF(sum1=first_sum1 AND sum2 /=first_sum2) THEN judge2To5 = 39。 win_name = 1。139。 ELSIF(sum1sum2) THEN judge3 = 39。 judge2To5 = 39。 win_name = 1。139。039。 ELSE judge3 = 39。 judge2To5 = 39。 win_name = 0。 END IF。139。 ELSIF(sum1sum2) THEN judge4 = 39。 win_name = 2。039。 END IF。 WHEN OTHERS = NULL。 END IF。 分頻器,周期為1ms,分頻比為25000,數(shù)碼管和點(diǎn)陣共用此分頻器; DIV_1MS:PROCESS(clk) BEGIN IF(clk39。139。 clk_scan= NOT clk_scan。 END IF。 END PROCESS DIV_1MS。event and clk_scan=39。)THEN CASE cat_temp IS WHEN 011111=cat_temp=101111。 WHEN 110111=cat_temp=111011。 WHEN 111101=cat_temp=111110。 END CASE。 WHEN 10111111=row_temp=11011111。 WHEN 11101111=row_temp=11110111。 WHEN 11111011=row_temp=11111101。 WHEN OTHERS =row_temp=01111111。 END IF。 cat=cat_temp。 共陰極數(shù)碼管顯示09時(shí)各段對(duì)應(yīng)的編碼 SEG7_1:PROCESS(a_temp) BEGIN CASE a_temp IS WHEN 0000=b_temp=1111110。1 WHEN 0010=b_temp=1101101。3 WHEN 0100=b_temp=0110011。5 WHEN 0110=b_temp=1011111。7 WHEN 1000=b_temp=1111111。9 WHEN OTHERS=b_temp=0000000。 END PROCESS SEG7_1。 用數(shù)碼管顯示當(dāng)前的點(diǎn)數(shù)和局?jǐn)?shù); SHOW_SEG:PROCESS(cat_temp) BEGIN CASE cat_temp IS WHEN 011111 =a_temp=conv_std_logic_vector(game_counter_shiwei, 4)。 WHEN 110111 =IF(btn0_counter=btn1_counter)THEN a_temp=conv_std_logic_vector(num2_2, 4)。 END IF。 ELSE a_temp=0000。 WHEN 111101 =a_temp=conv_std_logic_vector(num1_2, 4)。 WHEN OTHERS=a_temp=0000。 END CASE。 用LED8*8點(diǎn)陣顯示屏顯示勝者 SHOW_WINNER:PROCESS(row_temp) BEGIN IF(num2_1 /=0 AND num2_2 /=0 AND btn0_counterbtn1_counter=0) THEN IF(win_name=1) THEN CASE row_temp IS WHEN 01111111 =col_temp=01111100。 WHEN 11011111 =col_temp=01111100。 WHEN 11110111 =col_temp=01111100。 WHEN 11111101 =col_temp=00010000。 WHEN OTHERS=col_temp=00010000。 ELSIF(win_name=2)THEN CASE row_temp IS WHEN 01111111 =col_temp=11111100。 WHEN 11011111 =col_temp=00010010。 WHEN 11110111 =col_temp=01111110。 END CASE。 WHEN 10111111 =col_temp= 01000010。 WHEN 11101111 =col_temp= 00011000。 WHEN 11111011 =col_temp= 00100100。 WHEN 11111110 =col_temp= 10000001。 END CASE。 ELSE col_temp= 00000000。