色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

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

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

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

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

          本文引用地址:http://cafeforensic.com/article/202311/452860.htm

          ====硬件說明====

          在之前的實(shí)驗(yàn)中我們?yōu)樽x者詳細(xì)介紹過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ù)位鍵可消抖的按鍵,編譯完成后下載,通過按鍵就可以翻轉(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ù)來調(diào)節(jié)計(jì)時(shí)時(shí)間。下一節(jié)將介紹PWM調(diào)制技術(shù)的應(yīng)用 呼吸燈。



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉