数码管动态扫描原理——FPGA代码
1、动态扫描是利用人眼视觉滞留的特点,点亮某一位后,在人眼反应之前,进行下一位的显示,故而出现重影现象。而人的视觉暂留时间大约在1/24秒左右,所以应该保持24帧以上才会保持连续而不会出现闪烁,通俗来讲,应该在一秒内至少扫描24次。也就是每次扫描时间至少小于40ms 。
2、注意数码管的响应时间,一般为纳秒级,故扫描时间也不能太短。
3、本例使用四段数码管,七段数码管译码器74LS48作为驱动。50m时钟输入,以下为载板测试后的代码。
/*
* Title: <FPGA数码管动态扫描>
* description:
* @author: fateszs
* @data: 2017.12.07
*
*/
module hex_hum_tem(
output [3:0]duan,
output [3:0]wei,
input reset,
input clock_50m,
input [15:0]data
);
reg clock_25m;
always@(posedge clock_50m , negedge reset)
begin
if(!reset)
clock_25m <= 0;
else
clock_25m <= ~clock_25m;
end
//计数器,约为10ms扫描一次
reg [17:0] cnt;
always @(posedge clock_25m , negedge reset)
begin
if(!reset)
cnt <=0;
else if(cnt == 18'b111111111111111111)
cnt <= 18'b0;
else
cnt <= cnt+1;
end
//数码管位选
reg [3:0] wei_r,num ;
always @(posedge clock_25m , negedge reset)
begin
if(!reset)
begin
wei_r <= 4'b1111;
num