`timescale 1ns/1ps
module adc_dis(
clk ,
rst_n ,
sm_seg ,
sm_bit
); input clk;//50HZ
input rst_n;
output[:] sm_seg;//段选
output[:] sm_bit;//位选 reg [:] sm_seg;
reg [:] sm_bit;
reg [:] count;
reg [:] count2;
reg [:] i;//数码管位数
reg clk1, clk2;
reg [:]ge,shi,bai,qian,wan,swan;
reg [:] ge_reg,shi_reg,bai_reg,qian_reg,wan_reg,swan_reg; parameter//共阳极
led_GYA0 = 'hc0, //''
led_GYA1 = 'hf9, //''
led_GYA2 = 'ha4, //''
led_GYA3 = 'hb0, //''
led_GYA4 = 'h99, //''
led_GYA5 = 'h92, //''
led_GYA6 = 'h82, //''
led_GYA7 = 'hf8, //''
led_GYA8 = 'h80, //''
led_GYA9 = 'h90; //'' /****************分频1S*****************/
always@(posedge clk or negedge rst_n) begin
if(!rst_n) begin //同步复位
clk2 <= 'b0;
count2 <= 'b0;
end
else if(count2 == 'd24999999) begin //高低电平转换 5*10^7*20ns=10^9ns=1s
clk2 <= ~clk2;
count2 <= 'b0;
end
else begin
count2 <= count2 + 'b1; //计数
end
end /******************计数*********************/
always@(posedge clk2 or negedge rst_n) begin//个位处理
if(!rst_n) begin
ge <= 'b0000;
shi <= 'b0000;
bai <= 'b0000;
qian <= 'b0000;
wan <= 'b0000;
swan <= 'b0000;
end
else if(ge == 'b1010) begin //个位等于10
ge = 'b0000;
shi = shi + 'b1;
if(shi == 'b1010) begin//十位等于10
shi = 'b0000;
bai = bai + 'b1;
if(bai == 'b1010) begin//百位等于10
bai = 'b0000;
qian = qian + 'b1;
if(qian == 'b1010) begin//千位等于10
qian = 'b0000;
wan = wan + 'b1;
if(wan == 'b1010) begin//万位等于10
wan = 'b0000;
swan = swan + 'b1;
if(swan == 'b1010) begin//十万位等于10
ge <= 'b0000;
shi <= 'b0000;
bai <= 'b0000;
qian <= 'b0000;
wan <= 'b0000;
swan <= 'b0000;
end
end
end
end
end
end
else begin
ge <= ge + 'b1;
end end /***************编码*******************/
always@(posedge clk2 or negedge rst_n) begin
//case(ge)
// 4'b0000: ge_reg <= led_GYA0;
// 4'b0001: ge_reg <= led_GYA1;
// 4'b0010: ge_reg <= led_GYA2;
// 4'b0011: ge_reg <= led_GYA3;
// 4'b0100: ge_reg <= led_GYA4;
// 4'b0101: ge_reg <= led_GYA5;
// 4'b0110: ge_reg <= led_GYA6;
// 4'b0111: ge_reg <= led_GYA7;
// 4'b1000: ge_reg <= led_GYA8;
// 4'b1001: ge_reg <= led_GYA9;
// default: ge_reg <= led_GYA0;
//endcase
//
//case(shi)
// 4'b0000: shi_reg <= led_GYA0;
// 4'b0001: shi_reg <= led_GYA1;
// 4'b0010: shi_reg <= led_GYA2;
// 4'b0011: shi_reg <= led_GYA3;
// 4'b0100: shi_reg <= led_GYA4;
// 4'b0101: shi_reg <= led_GYA5;
// 4'b0110: shi_reg <= led_GYA6;
// 4'b0111: shi_reg <= led_GYA7;
// 4'b1000: shi_reg <= led_GYA8;
// 4'b1001: shi_reg <= led_GYA9;
// default: shi_reg <= led_GYA0;
//endcase
//
//case(bai)
// 4'b0000: bai_reg <= led_GYA0;
// 4'b0001: bai_reg <= led_GYA1;
// 4'b0010: bai_reg <= led_GYA2;
// 4'b0011: bai_reg <= led_GYA3;
// 4'b0100: bai_reg <= led_GYA4;
// 4'b0101: bai_reg <= led_GYA5;
// 4'b0110: bai_reg <= led_GYA6;
// 4'b0111: bai_reg <= led_GYA7;
// 4'b1000: bai_reg <= led_GYA8;
// 4'b1001: bai_reg <= led_GYA9;
// default: bai_reg <= led_GYA0;
//endcase
//
//case(qian)
// 4'b0000: qian_reg <= led_GYA0;
// 4'b0001: qian_reg <= led_GYA1;
// 4'b0010: qian_reg <= led_GYA2;
// 4'b0011: qian_reg <= led_GYA3;
// 4'b0100: qian_reg <= led_GYA4;
// 4'b0101: qian_reg <= led_GYA5;
// 4'b0110: qian_reg <= led_GYA6;
// 4'b0111: qian_reg <= led_GYA7;
// 4'b1000: qian_reg <= led_GYA8;
// 4'b1001: qian_reg <= led_GYA9;
// default: qian_reg <= led_GYA0;
//endcase
//
//case(wan)
// 4'b0000: wan_reg <= led_GYA0;
// 4'b0001: wan_reg <= led_GYA1;
// 4'b0010: wan_reg <= led_GYA2;
// 4'b0011: wan_reg <= led_GYA3;
// 4'b0100: wan_reg <= led_GYA4;
// 4'b0101: wan_reg <= led_GYA5;
// 4'b0110: wan_reg <= led_GYA6;
// 4'b0111: wan_reg <= led_GYA7;
// 4'b1000: wan_reg <= led_GYA8;
// 4'b1001: wan_reg <= led_GYA9;
// default: wan_reg <= led_GYA0;
//endcase
//
//case(swan)
// 4'b0000: swan_reg <= led_GYA0;
// 4'b0001: swan_reg <= led_GYA1;
// 4'b0010: swan_reg <= led_GYA2;
// 4'b0011: swan_reg <= led_GYA3;
// 4'b0100: swan_reg <= led_GYA4;
// 4'b0101: swan_reg <= led_GYA5;
// 4'b0110: swan_reg <= led_GYA6;
// 4'b0111: swan_reg <= led_GYA7;
// 4'b1000: swan_reg <= led_GYA8;
// 4'b1001: swan_reg <= led_GYA9;
// default: swan_reg <= led_GYA0;
//endcase
BIANMA(ge, ge_reg);
BIANMA(shi, shi_reg);
BIANMA(bai, bai_reg);
BIANMA(qian, qian_reg);
BIANMA(wan, wan_reg);
BIANMA(swan, swan_reg); end /****************分频1MS*****************/
always@(posedge clk or negedge rst_n) begin
if(!rst_n) begin //同步复位
clk1 <= 'b0;
count <= 'b0;
end
else if(count == 'd24999)begin //高低电平转换 25000*20=500000ns=0.5ms
clk1 <= ~clk1;
count <= 'b0;
end
else begin
count <= count + 'b1; //计数
end
end /************数码管位数循环****************/
always@(posedge clk1 or negedge rst_n) begin if(!rst_n) begin //同步复位
i <= 'b0000;
end
else if(i == 'b0101) begin
i <= 'b0000;
end
212 else begin
i <= i + 'b1;
end
end /************数码管显示****************/
always@(posedge clk1 or negedge rst_n) begin
case(i)
'b0000: begin sm_seg <= ge_reg; sm_bit <= 6'b01_1111; end
'b0001: begin sm_seg <= shi_reg; sm_bit <= 6'b10_1111; end
'b0010: begin sm_seg <= bai_reg; sm_bit <= 6'b11_0111; end
'b0011: begin sm_seg <= qian_reg; sm_bit <= 6'b11_1011; end
'b0100: begin sm_seg <= wan_reg; sm_bit <= 6'b11_1101; end
'b0101: begin sm_seg <= swan_reg; sm_bit <= 6'b11_1110; end
default: begin sm_seg <= led_GYA0; sm_bit <= 'b11_1111; end
endcase
end task BIANMA;
input[:] wei;//哪个位
output[:] wei_reg; //这个位上此时的数据
reg [:] wei_reg;
begin
case(wei)
'b0000: wei_reg <= led_GYA0;
'b0001: wei_reg <= led_GYA1;
'b0010: wei_reg <= led_GYA2;
'b0011: wei_reg <= led_GYA3;
'b0100: wei_reg <= led_GYA4;
'b0101: wei_reg <= led_GYA5;
'b0110: wei_reg <= led_GYA6;
'b0111: wei_reg <= led_GYA7;
'b1000: wei_reg <= led_GYA8;
'b1001: wei_reg <= led_GYA9;
default: wei_reg <= led_GYA0;
endcase
end
endtask endmodule

FPGA自计数六位共阳极数码管动态显示2(调用task的方法)的更多相关文章

  1. FPGA六位共阳极数码管动态显示

    `timescale 1ns/1ps module adc_dis( clk , rst_n , sm_seg , sm_bit ); input clk;//50HZ input rst_n; :] ...

  2. 共阳极RGB LED二极管

    1)RGB LED二极管有四个引脚,它把3个普通led被封装在其内部,这三个led颜色分别为红.绿.蓝三种颜色,通过控制各个LED的亮度,你可以混合出几乎任何你想要的颜色,如下图: 2)RGB LED ...

  3. 数码管显示“0~F”的共阳共阴数码管编码表

    嵌入式设备中数码管显示“0~F”的方式是:定义了一个数组,里面含有16个元素,分别代表0~F,这样可以方便以后的调用.共阳极数码管编码表:unsigned char table[]={0xc0,0xf ...

  4. [51单片机] 以从0开始做4位8段共阴数码管3461AS驱动谈细节决定高质量DIY

    目录 1)问题产生 2)失败尝试 3)最终方案 4)使用方法 5)知识共享 1)问题产生 在上一篇“以PWM控制直流电机为例建一个简单的51工程框架”中已向大家介绍了一个封装好的8位8段数码管的驱动( ...

  5. 80C51 数码管动态显示0~7

    所使用的开发板 普中科技HC6800-ES V2.0 PC:win7 64位 编译软件: keil uversion2 烧写工具: 普中科技开发的PZ-ISP V1.82 烧写方式:热烧写 #incl ...

  6. 数码管动态显示Verilog实现(参考小梅哥教程)(视觉暂留)

    一个数码管有九个引脚,控制八段二极管的亮灭,用以显示需要的数字. 当有N个数码管时,一个一个控制的话需要N x 9 个引脚,消耗资源较多. 因此可以利用动态显示的方案通过人眼的视觉暂留特性达到静态显示 ...

  7. 计数排序 + 线段树优化 --- Codeforces 558E : A Simple Task

    E. A Simple Task Problem's Link: http://codeforces.com/problemset/problem/558/E Mean: 给定一个字符串,有q次操作, ...

  8. 【FPGA】always (*) 后代码全部显示注释字体的颜色之解决方法

    2015年08月26日 09:44:05 风雨也无晴 阅读数:1289    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/scottly1/art ...

  9. 数码管动态显示——74HC04

    1.电路设计: p0实现段选,p2实现位选,74hc04是反相器,有反向和放大的双重作用. 2.程序设计: #include<reg52.h> code unsigned char sev ...

随机推荐

  1. 利用浏览器的console篡改cookie

    背景: 最近公司有个客户问题,是由于浏览器的cookie中多记录过期的session id导致重复登录,普通操作无法复现,因此尝试进行cookie篡改复现问题. 方法: 首先,要知道软件定义的sess ...

  2. FZU 2150

    题目大意:有一个矩阵,"."表示石头,"#",表示小草,有两个人,可以在任意两个位置点燃小草,小草可以上下左右蔓延,蔓延一次的时间为1,问所有蔓延完所有小草所花 ...

  3. Linux下安装python3环境搭建

    Linux下python3环境搭建 Linux安装软件有哪些方式? rpm软件包 手动安装 拒绝此方式 需要手动解决依赖关系 yum自动化安装 自动处理依赖关系 非常好用 源代码编译安装,可自定义的功 ...

  4. 6. webRTC

    webrtc网上封装的很多,demo很多都是一个页面里实现的,今天实现了个完整的 , A 发视频给 B. 1.) A 方 <!DOCTYPE html> <html id=" ...

  5. C# LINQ查询之对象

    LINQ是一组查询技术的统称,其主要思想是将各种查询功能直接集成到C#语言中,可以对 对象.XML文档.SQL数据库.外部应用程序等进行操作. 这里面讲的简单的几个子句, 必须以from子句开头,以s ...

  6. 前端以BASE64码的形式上传图片

    前端以BASE64码的形式上传图片 一直有一个很苦恼的问题困扰着铁柱兄,每次上传图片的时候前端要写一大堆js,然后后台也要写一堆java代码做处理.于是就在想,有没有简单又方便的方法把图片上传.今天算 ...

  7. Java 动态编译--DynamicCompiler

    java 动态编译自己写过程的机会比较少,记录一下: package com.xzlf.dynamicCompile; import java.io.IOException; import java. ...

  8. 关于Google下插件SwitchyOmega用法

    开启代理后,尽管访问很自由了,但是我的搬瓦工,是有流量限制的.所以,在之前,我开启一会自由访问模式(戏称),然后关一会,用来方便打开国内网站. 是的,我这么坚持了半个月,之后,就崩溃了,太尼玛繁琐了! ...

  9. Linux必须会的命令---也是以前记录的,ctrl+z fg 啥的 jobs 比较实用

    fg.bg.jobs.&.ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的 一.& 最经常被用到 这个用在一个命令的最后,可以把这个命令 ...

  10. tp5中的input助手函数

    详见手册:https://www.kancloud.cn/manual/thinkphp5/118044