新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Altera MAX10: 計(jì)時(shí)控制

        Altera MAX10: 計(jì)時(shí)控制

        作者: 時(shí)間:2023-11-14 來(lái)源:電子森林 收藏

        計(jì)時(shí)控制

        在之前的實(shí)驗(yàn)中我們掌握了如何進(jìn)行時(shí)鐘分頻、如何進(jìn)行數(shù)碼管顯示與按鍵消抖的處理,那么在本節(jié)實(shí)驗(yàn)之中,我們將會(huì)實(shí)現(xiàn)一個(gè)籃球賽場(chǎng)上常見(jiàn)的24秒

        本文引用地址:http://www.104case.com/article/202311/452860.htm

        ====硬件說(shuō)明====

        在之前的實(shí)驗(yàn)中我們?yōu)樽x者詳細(xì)介紹過(guò)MXO2板卡上的按鍵、數(shù)碼管、LED等硬件外設(shè),在此不再贅述。本節(jié)將實(shí)現(xiàn)由數(shù)碼管作為顯示模塊,按鍵作為控制信號(hào)的輸入(包含復(fù)位信號(hào)和暫停信號(hào)),Altera MAX10作為控制核心的籃球讀秒系統(tǒng),實(shí)現(xiàn)框圖如下:

        ====Verilog代碼====

        // ********************************************************************
        // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
        // ********************************************************************
        // File name    : debounce.v
        // Module name  : debounce
        // Author       : STEP
        // Description  : 
        // 
        // --------------------------------------------------------------------
        // Code Revision History : 
        // --------------------------------------------------------------------
        // Version: |Mod. Date:   |Changes Made:
        // V1.0     |2017/03/02   |Initial ver
        // --------------------------------------------------------------------
        // Module Function: 
        module segment_counter(
        	clk				,
        	rst				,
        	hold			,
        	seg_led_1		,
        	seg_led_2		,); 	
        	input 	clk,rst;
        	input	hold; 	
        	output reg	[8:0]	seg_led_1,seg_led_2; 	
        	reg			clk_divided;
        	reg			hold_flag;
        	reg					back_to_zero_flag	=	0;
        	reg   		[6:0]   seg		[9:0];  
        	reg 		[23:0]	cnt;
        	reg			[3:0]	cnt_ge;
        	reg			[3:0]	cnt_shi; 	
        	parameter	PERIOD=6000000;	//1秒 	
        	initial 
        	begin
        		seg[0] = 7'h3f;	   //  0
        		seg[1] = 7'h06;	   //  1
        		seg[2] = 7'h5b;	   //  2
        		seg[3] = 7'h4f;	   //  3
        		seg[4] = 7'h66;	   //  4
        		seg[5] = 7'h6d;	   //  5
        		seg[6] = 7'h7d;	   //  6
        		seg[7] = 7'h07;	   //  7
        		seg[8] = 7'h7f;	   //  8
        		seg[9] = 7'h6f;	   //  9/*若需要顯示A-F,解除此段注釋即可
        		seg[10]= 7'hf7;	   //  A
        		seg[11]= 7'h7c;	   //  b
        		seg[12]= 7'h39;    //  C
        		seg[13]= 7'h5e;    //  d
        		seg[14]= 7'h79;    //  E
        		seg[15]= 7'h71;    //  F*/
        	end 	
        	always @ (posedge clk) begin		// 用于分出一個(gè)1Hz的頻率
        			if (!rst == 1) begin
        				cnt <= 0;
        				clk_divided <= 0; end
        			else begin
        				if (cnt < PERIOD-1)
        					cnt <= cnt + 1;
        				else begin
        					cnt <= 0;
        					clk_divided <= ~clk_divided; end
        				end
        		end 	
        		always @ (*) begin
        		if (!rst == 1)
        			back_to_zero_flag <= 1;
        		else if (((cnt_shi*10) + cnt_ge)==24)
        			back_to_zero_flag <= 1;
        		else
        			back_to_zero_flag <= 0;
        		end 	
        		always @ (posedge hold)
        		hold_flag <= ~hold_flag; 	
        		always @ (posedge clk_divided or posedge back_to_zero_flag) begin
        		if (back_to_zero_flag == 1) begin
        			cnt_ge <= 0;
        			cnt_shi <= 0; end
        		else if (cnt_ge == 9) begin
        			cnt_ge <= 0;
        			cnt_shi <= cnt_shi + 1; end
        		else if (hold_flag == 1)
        			cnt_ge <= cnt_ge;
        		else
        			cnt_ge <= cnt_ge + 1;
        		end 	
        		always @ (cnt_ge) begin
        		seg_led_1[8:0] <= {2'b00,seg[cnt_ge]};
        	 	end 	
        	 	always @ (cnt_shi) begin
        		seg_led_2[8:0] <= {2'b00,seg[cnt_shi]};
        	 	end 
        	 	endmodule

        ====引腳分配====

        設(shè)置好復(fù)位鍵可消抖的按鍵,編譯完成后下載,通過(guò)按鍵就可以翻轉(zhuǎn)LED。你也可以定義多個(gè)按鍵控制多個(gè)LED,還可以比較不加按鍵消抖情況下實(shí)際的效果對(duì)比如何。

        信號(hào)引腳
        clkJ5
        rstJ9
        holdK14
        segled1[0]E1
        segled1[1]D2
        segled1[2]K2
        segled1[3]J2
        segled1[4]G2
        segled1[5]F5
        segled1[6]G5
        segled1[7]L1
        segled1[8]E2
        segled2[0]A3
        segled2[1]A2
        segled2[2]P2
        segled2[3]P1
        segled2[4]N1
        segled2[5]C1
        segled2[6]C2
        segled2[7]R2
        segled2[8]B1


        ====小結(jié)====

        本實(shí)驗(yàn)主要介紹了的實(shí)現(xiàn)方式,并且包含了復(fù)位與暫停功能,讀者可自行修改程序內(nèi)部的時(shí)鐘參數(shù)來(lái)調(diào)節(jié)計(jì)時(shí)時(shí)間。下一節(jié)將介紹PWM調(diào)制技術(shù)的應(yīng)用 呼吸燈。



        評(píng)論


        相關(guān)推薦

        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 资溪县| 石阡县| 随州市| 安顺市| 余干县| 望江县| 盐源县| 双鸭山市| 噶尔县| 青田县| 当阳市| 廉江市| 鞍山市| 陆良县| 旬阳县| 安泽县| 海林市| 鸡西市| 山西省| 澳门| 奉贤区| 郑州市| 屏南县| 彭泽县| 齐齐哈尔市| 视频| 桃园县| 黄石市| 鄂伦春自治旗| 东明县| 桦甸市| 乡城县| 新余市| 乌什县| 东海县| 石家庄市| 固始县| 井研县| 开原市| 大冶市| 甘肃省|