在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6310|回复: 24

[求助] 求教一个关于FPGA数码管显示问题,望大家多多帮忙,再次拜谢啦

[复制链接]
发表于 2013-2-28 15:53:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
最近学习数码管显示的代码编写,出现了一个问题有些绕,望大家细细听我到来;
是这样的小弟有一块学习板,然后呢上面的数码管有八个,很普通的需要先进行位选然后才是段选,
然后我有个代码里面需要完成的是同时选中四个数码管然后在一个状态下让这四个数码管同时工作,但是他们又要显示不一样的数字出来,
想问问这个功能实现起来要如何做,能否简单的写一下:
比如现在我定义了一个reg [7:0] sig;reg[7:0] dig;其中sig信号是用来位选的也就是这儿需要选择前面四个数码管,低电位工作;
然后dig信号用于段选,这儿我们需要让前两个数码管显示0.5,后两个数码管显示1.0;
这儿我想强调一下,主要是显示这样的一个状态是在同一个状态或者说时刻下显示的,希望有大大能帮忙讲解一下,在此谢过啦~
 楼主| 发表于 2013-3-1 09:13:18 | 显示全部楼层
顶上去~~~24小时坐等大神啊~~~
发表于 2013-3-1 10:59:16 | 显示全部楼层
这个不难
 楼主| 发表于 2013-3-1 11:08:06 | 显示全部楼层
回复 3# leona1527


    还请前辈多指教啊!现在有八个数码管,我想让前两个数码管显示0.5,最后两个数码管显示3.0,而且是在同一个时候哦,而且这个是在很多状态下的一个状态这样显示,就是我外面写了一个状态机的,下一个状态又让前两个数码管显示1.0,最后两个数码管显示0.5,所以现在这个地方卡住了没有办法继续了,就想请问一下这个要如何编写代码实现,望前辈讲解一下
发表于 2013-3-1 11:53:59 | 显示全部楼层




  1. if(cur_state==x)
  2. begin
  3. sig<=8'b00001111;//片选选中4个要显示的数码管,假设是后4个
  4. dig1<=a;//显示第一个数字0,具体编码方式根据实际情况,dig1接第一个数码管
  5. dig2<=b;//显示第二个数字5,具体编码方式根据实际情况
  6. dig3<=c;//显示第三个数字3,具体编码方式根据实际情况
  7. dig4<=d;//显示第四个数字0,具体编码方式根据实际情况
  8. end
  9. //其他情况依次类推,如果状态比较多可以用case语句实现



复制代码
 楼主| 发表于 2013-3-1 13:58:56 | 显示全部楼层
回复 5# matrx


    首先先谢谢matrx的解答,不过你可能没有懂我说的意思,想得有些简单了一点儿,我现在想要选中的是四个数码管是要在同时显示的,比如我先需要片选上第一个和第二个还有第七个和第八个这样的形式,也就是dig=8‘b0011_1100;然后现在需要让第一个管子显示0,第二个管子显示5,第七个管子显示3,第八个管子显示0,这样的显示是要同时发生的,你写的那段段选的代码是不能保证同时显示的所以还望再交流
 楼主| 发表于 2013-3-2 09:18:52 | 显示全部楼层
在顶顶~~~望斑竹出山啊~~~
发表于 2013-3-2 13:49:06 | 显示全部楼层
根据你的描述我做了一下,供你参考:
每个条件只要赋值你想显示数据给对应的hex就行了;

module (
       display_sel,
       hex1_out,
       hex2_out,
       hex3_out,
       hex4_out,
       hex5_out,
       hex6_out,
       hex7_out,
       hex8_out      
       );
      
input[7:0] display_sel; 片选信号输入
output hex1_out;//用于驱动数码管led;
output hex2_out;
output hex3_out;
output hex4_out;
output hex5_out;
output hex6_out;
output hex7_out;
output hex8_out;


      

reg[3:0] di_hex1;
reg[3:0] di_hex2;
reg[3:0] di_hex3;
reg[3:0] di_hex4;
reg[3:0] di_hex5;
reg[3:0] di_hex6;
reg[3:0] di_hex7;
reg[3:0] di_hex8;



alway@*
begin
         case(display_sel)//你可以用状态机来实现
                 条件1:       ;
                 条件2:       ;
                 条件3:       ;
               .
               .
               .
          条件(7、8、1、2亮)1100_0011:
                                         begin
                                                       di_hex1=4'd0;
                                                       di_hex2=4'd3;
                                                       di_hex7=4'd0;
                                                       di_hex8=4'd5;
                                              end
        .
        .
        
                 条件n:      ;       
                   default:     语句:
         endcase
end

hex hex1(
       .data_in(di_hex1),
                   .seg_7(hex1_out)
                  );
hex hex2(
       .data_in(di_hex2),
                   .seg_7(hex2_out)
                  );
hex hex7(
       .data_in(di_hex7),
                   .seg_7(hex7_out)
                  );
hex hex8(
       .data_in(di_hex8),
                   .seg_7(hex8_out)
                  );
                  
                  
                  

module hex(
           data_in,
                                   seg_7
           );
input[3:0]data_in;
output [6:0]seg_7;
reg[6:0] seg_7;
always@(data_in)
   case(data_in)
          4'd0 :  seg_7=7'b1000000;//具体值看你的数码管电路
                4'd1 :  seg_7=7'b1111001;
                4'd2 :  seg_7=7'b0100100;
                4'd3 :  seg_7=7'b0110000;
                4'd4 :  seg_7=7'b0011001;
                4'd5 :  seg_7=7'b0010010;
                4'd6 :  seg_7=7'b0000010;
                4'd7 :  seg_7=7'b1111000;
                4'd8 :  seg_7=7'b0000000;
                4'd9 :  seg_7=7'b0011000;
           default:  seg_7=7'b0000000;
        endcase
               
endmodule

endmodule
发表于 2013-3-2 15:33:43 | 显示全部楼层
回复 6# Synopsys-IC

你这个同时是指要延时非常小吗,虽然在always 里面用非阻塞赋值是顺序执行的,但是这个语句之间延时基本可以忽略吧,你可以用工具仿真一下,或者直接下载到板子上看看效果。
发表于 2013-3-2 21:36:53 | 显示全部楼层
一个状态下驱动一个数码管,频率到达一定程度(超过人眼分辨率)下可以看到同时点亮的效果。由于你的段选是并接式,所以只能采用状态转换的方式。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-20 02:59 , Processed in 0.037370 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表