1. 程式人生 > >FPGA-07-50秒倒計時的實現(特權XILINX spartan-6開發板)

FPGA-07-50秒倒計時的實現(特權XILINX spartan-6開發板)

工具 ISE14.7

通過時間分頻在4位7段數碼管中顯示2個數字,給人眼一個錯覺是同時顯示出兩個數字。

實驗原理是輪流向各位數碼管送出字形碼和相應的位選訊號,利用數碼管閃爍的餘暉和人眼視覺的暫留作用,使人感覺像各位管同時在顯示

就像微控制器數碼管的思想一樣:這裡也要做相同的事情。

微控制器步驟如下:

動態顯示:

1)位選數碼管;  2)段選數碼管; 3)延時

            dula=1;//段選
            P0=table[i];
            dula=0;
            P0=0xff;
            wela=1;//位選
            P0=a;
            wela=0;
            delayms(500);//延時

這樣的程式碼實現流水顯示,如果延時時間夠短肉眼難以分辨;則可以實現幾位數據的同時顯示;

同理到FPGA中也是這樣,不過要考慮用不同的模組實現這個功能

EG 兩位數碼管顯示:

微控制器中延時用個delay就可以實現,但是這裡的延時要用一個計數器來模擬延時的狀態

1.0)段選選擇數碼管顯示的數值

1.1)因為這裡我程式碼中值用了4個位來顯示當前的資料(資料位寬為4)所以要在不同的時間選擇當前顯示的值

2)位選選擇數碼管的位數

3)延時(保證動態顯示肉眼分辨不出)

程式碼如下:

module seg(clk,ext_rst_n,TimeH,TimeL,dtube_cs_n,dtube_data
			
		);
	input clk;		//時鐘訊號25MHz
	input ext_rst_n;			//復位訊號
	input [3:0]TimeH;			//兩位輸入高位
	input [3:0]TimeL;			//兩位輸入低位
	output reg[1:0] dtube_cs_n;	//段選資料位
	output reg[6:0] dtube_data;//位選資料位
		
	reg[3:0] display_num;	//當前顯示資料
	reg[15:0] div_cnt;	//延時計數器計數位

initial div_cnt = 0;//賦初值為0
//延時計數器模組
	
[email protected]
(posedge clk or negedge ext_rst_n) begin if(!ext_rst_n) div_cnt <= 8'd0; else if(div_cnt==16'd50000) div_cnt <= 8'd0; else div_cnt <= div_cnt+1'b1; end //顯示當前的資料模組 always @(posedge clk or negedge ext_rst_n) begin if(!ext_rst_n) display_num <= 4'h0; else if(div_cnt < 25000) display_num <= TimeH; else display_num <= TimeL; end //段選資料譯碼模組(共陰數碼管) always @(posedge clk or negedge ext_rst_n) begin if(!ext_rst_n) dtube_data <= 8'h00; else begin case(display_num) 4'h0: dtube_data <= 8'h3f; 4'h1: dtube_data <= 8'h06; 4'h2: dtube_data <= 8'h5b; 4'h3: dtube_data <= 8'h4f; 4'h4: dtube_data <= 8'h66; 4'h5: dtube_data <= 8'h6d; 4'h6: dtube_data <= 8'h7d; 4'h7: dtube_data <= 8'h07; 4'h8: dtube_data <= 8'h7f; 4'h9: dtube_data <= 8'h6f; default:dtube_data <= 8'h00; endcase end end //位選選譯模組 always @(posedge clk or negedge ext_rst_n) begin if(!ext_rst_n) dtube_cs_n <= 2'b11; else if(div_cnt < 20000) dtube_cs_n <= 2'b01; else dtube_cs_n <= 2'b10; end endmodule

數碼管顯示模組定義好了就要想如何實現倒計時的完成

這裡的設計思路是 

                                                              頂層設計模組

分頻器模組  -->      計數器模組 ----->     數碼管顯示模組

輸入復位訊號 和系統時鐘

1)分頻器輸入25MHz輸出1Hz

2)IHz時鐘訊號傳給計數器模組用於計數

3)計數的值在數碼管顯示

輸出數碼管的段選和位選

和蜂鳴器(計時完成標誌位)

程式碼如下:

1,.TOP.v

module top(ext_clk_25m,ext_rst_n,beep,dtube_cs_n,dtube_data
    );
//頂層控制模組
	input ext_clk_25m; //時鐘訊號25MHz
	input ext_rst_n;  //復位訊號
	output [1:0] dtube_cs_n;	//段選資料位
	output [6:0] dtube_data;//位選資料位
	output beep;   //計時完成標誌位

	wire clk;//中間變數
	wire [3:0] TimeL;
	wire [3:0] TimeH;

	
	//分頻25MHZ變為1HZ
	div d1(
	.ext_clk_25m(ext_clk_25m),
	.ext_rst_n(ext_rst_n),
	.mclk(clk)
    );
	//倒計時計數模組
	counter c1(
	.mclk(clk),
	.ext_rst_n(ext_rst_n),
	.TimeH(TimeH),
	.TimeL(TimeL),
	.beep(beep)
    );
	//數碼管顯示模組
	seg s1(
	.clk(ext_clk_25m),		
	.ext_rst_n(ext_rst_n),			
	.TimeH(TimeH),
	.TimeL(TimeL),
	.dtube_cs_n(dtube_cs_n),	
	.dtube_data(dtube_data)	
	);

endmodule

2.div.v

module div(ext_clk_25m,ext_rst_n,mclk
    );
	input ext_clk_25m;//輸入時鐘
	input ext_rst_n; //復位埠
	output reg mclk;//輸出1Hz

	reg  [23:0] cnt;//存放計數器的值
initial cnt = 0;
	parameter TIME=24'd1250_0000;//時鐘25MHz
//分頻模組
//使得輸入時鐘為25MHz輸出時鐘為1Hz
	[email protected](posedge ext_clk_25m or negedge ext_rst_n)
	begin
		if(!ext_rst_n)
			begin
				mclk <=1'b0;
				cnt <=25'd0;
			end
		else if(cnt ==TIME-1'b1)
		begin
			mclk <=~mclk;
			cnt <=1'b0;
		end
		else
			cnt <=cnt + 1'b1;
	end
endmodule

3.counter.v

module counter(mclk,ext_rst_n,TimeH,TimeL,beep
    );
	input mclk;//時鐘訊號
	input ext_rst_n;//復位訊號
	
	output reg [3:0]TimeH;//兩位數碼管顯示高位
	output reg [3:0]TimeL;//兩位數碼管顯示低位
	
	output beep;		//計數完成位
	
	assign beep =({TimeH,TimeL}==8'h00);//當計數為0時,蜂鳴器響

initial {TimeH,TimeL} = 8'h50; //計數器賦初值
//計數器模組
	[email protected](posedge mclk or negedge ext_rst_n)
	begin
		if(!ext_rst_n)
			{TimeH,TimeL} <= 8'h50;
		else if({TimeH,TimeL}==8'h00)
			{TimeH,TimeL} <={TimeH,TimeL};
		else if(TimeL==4'h0)
			begin
				TimeH <=TimeH-1'b1;
				TimeL <=4'h9;
			end
		else
			begin
				TimeH <=TimeH;
				TimeL <=TimeL-1'b1;
			end
	end
endmodule

4.數碼管.v

上文已經貼出

相關推薦

FPGA-07-50倒計時實現特權XILINX spartan-6開發

工具 ISE14.7 通過時間分頻在4位7段數碼管中顯示2個數字,給人眼一個錯覺是同時顯示出兩個數字。 實驗原理是輪流向各位數碼管送出字形碼和相應的位選訊號,利用數碼管閃爍的餘暉和人眼視覺的暫留作用,使人感覺像各位管同時在顯示 就像微控制器數碼管的思想一樣:這裡也要做相同的事情。 微

FPGA-07-50倒計時實現特權XILINX spartan-6開發

工具 ISE14.7 通過時間分頻在4位7段數碼管中顯示2個數字,給人眼一個錯覺是同時顯示出兩個數字。 實驗原理是輪流向各位數碼管送出字形碼和相應的位選訊號,利用數碼管閃爍的餘暉和人眼視覺的暫留作用,使人感覺像各位管同時在顯示 就像微控制器數碼管的思想一樣:這裡也要做相

Android 搶購類倒計時實現 包括天數,小時,分鐘,

Android 搶購類倒計時實現,本文注重實現功能,程式碼裡有註釋,實現起來比較簡單,所有不做過多解釋。 先上圖: 實現倒計時可採用Message + Handler 來實現,具體實現如下: MainActivity的程式碼如下: package com.example

MOOC清華《面向對象程序設計》第8章:棧的實現采用模板實例化

com mooc html 程序 ndt wot 面向 tar dmz 3lztmo1xf豪已4茲6http://www.zcool.com.cn/collection/ZMTkxNTY1OTI=.html 6桓50勞爻拍62誹喜0栽2http://www.zcool.c

斐波那契數列的兩種實現遞歸和非遞歸

result 數列 == 非遞歸 fib color 效率 i++ 思想 查找斐波納契數列中第 N 個數。 所謂的斐波納契數列是指: 前2個數是 0 和 1 。 第 i 個數是第 i-1 個數和第i-2 個數的和。 斐波納契數列的前10個數字是: 0, 1, 1, 2,

unity_小功能實現客戶端相互通信功能

直接 endpoint 客戶端和服務器端 network hat sockets odi family void 服務器端:在VS中新建項目,用於服務器的搭建 using System;using System.Collections.Generic; using

c++中模板的實現模板類和模板函數

c++ 模板實例化 泛型編程 [TOC] 模板  當我們實現一個交換函數時,我們可以寫成如下。 void Swap(int& x, int& y) { int tmp = x; x = y; y = tmp; }  這裏只能交換兩個整

JAVA 畫圖板實現基本畫圖功能+界面UI一、界面實現

tor 做了 功能 分享圖片 重復 ble erase 選擇 width /*文章中用到的代碼只是一部分,需要源碼的可通過郵箱聯系我 [email protected]*/ 這段時間在學JAVA的swing界面開發,試著做了個畫圖板。實現了直線、曲線、噴槍、矩形、圓形、文字

JAVA 畫圖板實現基本畫圖功能+界面UI二、功能實現及重繪實現

cos 博客 tint ext min click 代碼 hints 按鈕 上篇博客中介紹了界面的實現方法,在這篇博客中將對每個按鈕的功能的實現進行講解並介紹重繪 首先肯定要添加事件監聽機制了,那麽問題來了,事件源對象是誰?需要添加什麽方法?事件接口是什麽? 1、我們需要點

機器學習:線性回歸——理論與代碼實現基於正規方程與梯度下降

overfit 返回 pen ear 隨機梯度 是否 很大的 建模 回歸 一 線性模型 給定由n個屬性描述的列向量\(f(\mathbf{x})={(x^{(1)};x^{(2)};...;x^{(n)})}\),其中 \(x^{(j)}\)是\(\textbf{x}\)

統計學習三:2.K近鄰法代碼實現以最近鄰法為例

數據集 learning pytho port 4.3 @property 存儲 uil github 通過上文可知感知機模型的基本原理,以及算法的具體流程。本文實現了感知機模型算法的原始形式,通過對算法的具體實現,我們可以對算法有進一步的了解。具體代碼可以在我的githu

FTP主動模式和被動模式在VRP上實現實驗、報文和理論解析

理解 客戶 warning 簡述 查看 inf 要求 sep mac 嗯~點關註不迷路 1.簡述主動模式的FTP建立連接的主要步驟 圖1-19 FTP主動模式示意圖基本原理FTP(文件傳輸協議)的特殊性: 大多數的TCP服務是使用單個的連接,一般是客戶向服務器的一個周知端口

併發伺服器的實現多程序、多執行緒...

一、多程序實現併發伺服器 程式碼如下:multiprocess_server.c /* ============================================================================ Name : TCPServ

簡單直播實現一:建立本地rtmp伺服器Mac上搭建直播伺服器Nginx+rtmp

簡介 nginx是非常優秀的開源伺服器,用它來做hls或者rtmp流媒體伺服器是非常不錯的選擇,本人在網上整理了安裝流程,分享給大家並且作備忘。 步驟安裝 1、安裝Homebrow Homebrew簡稱brew,是Mac OSX上的軟體包管理工具,能在Mac中方便的安裝軟體

線性表及其應用C語言實現資料結構複習最全筆記

一、順序表的表示與實現 1.線性表的順序結構定義 #define LIST_INIT_SIZE 100 //線性表儲存空間的初始分配量 #define LISTINCREMENT 10 //線性表儲存空間的分配增量 typedef struct { ElemType* el

深度學習——deepNN模型實現攝像頭實時識別人臉表情C++和python3.6混合程式設計

一、背景介紹 最近需要做人臉識別方向的東西,就被分配了新的任務,利用攝像頭實時檢測人臉表情,並製作成一個小軟體,這裡當然要用C++實現,並用C++做成一個介面。 由於博主之前用python做過類似的小程式,因此這裡的模型實現主要採用了python,為了用C++實現介面,這裡採用C++呼叫py

觀察者模式下es6的實現自定義可監聽事件

定義 觀察者模式:又叫釋出訂閱模式,多個觀察者可以實時監聽一個主題物件,而javascript中最常用的實現方式是事件觸發機制。 es6實現: 要知道需要有什麼東西,類和建構函式是es6中基本的物件結構 class BaseEvent {   constructor() {} } 首先類中要能儲

Material Design 實戰 之 第六彈 —— 可摺疊式標題欄(CollapsingToolbarLayout) & 系統差異型的功能實現充分利用系統狀態列空間...

本模組共有六篇文章,參考郭神的《第一行程式碼》,對Material Design的學習做一個詳細的筆記,大家可以一起交流一下: Material Design 實戰 之第一彈——Toolbar(即本文) Material Design 實戰 之第二彈——滑動選

課程表的實現基於強智科技教務系統

課程表的實現(基於強智科技教務系統) 1,本小系統服務於在校大學生。使用者可以根據程式碼定製安裝自己的輕量級課程表app在手機上(當然,可以把網路請求部分修改移植到PC或者Web平臺上)。 2,好處:再也不用為了在手機上看課表而專門去下載30~60MB不等大小並且有各種干擾

高併發的實現非同步化+快取+多執行緒

一年前,本人有幸負責公司核心專案的優化。隨著公司業務的增長,專案處理量也越來越大。 一次818大促甚至導致一臺伺服器滿負荷運作。於是,高併發改造被提上行程。 乾貨開始: 技術實現上有三個重點:非同步化(一般使用mq)、快取(一般使用redis)、多執行緒 一個功能併發量上大的提升,是需要業務