找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5353|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

FPGA學(xué)習(xí)板的流水燈Quartus源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
自制,功能包括:
開(kāi)關(guān)1、2(17、16)控制流水燈速度,00-1分頻,01-2分頻,10-4分頻,11-8分頻
開(kāi)關(guān)3、4(15、14)控制流水燈花型,00-00010001,每次移動(dòng)1,01-00110011,每次移動(dòng)2,10-01110111,每次移動(dòng)3,11-00001111,每次移動(dòng)4
開(kāi)關(guān)5(13)控制流水燈移動(dòng)方向,0-左,1-右
按鈕1(0)復(fù)位
LCD屏顯示速度、花型和方向,顯示效果大致為

(有頻閃)
雖然是個(gè)智障小程序,不過(guò)是FPGA入門(mén)課的常見(jiàn)作業(yè)……解壓之后直接用Quartus打開(kāi)就可以了

源程序如下:
  1. module LED(
  2.         input rst_n,
  3.                 input sw1,
  4.                 input sw2,
  5.                 input sw3,
  6.                 input sw4,
  7.                 input sw5,
  8.                 output led0,
  9.                 output led1,
  10.                 output led2,
  11.                 output led3,
  12.                 output led4,
  13.                 output led5,
  14.                 output led6,
  15.                 output led7,
  16. input clk,
  17. output reg [7:0] dat,
  18. output reg rs,
  19. output rw,
  20. output en
  21. );   
  22. reg e;   
  23. reg  [15:0] counter;
  24. reg [5:0] current,next,next_f;
  25. reg clkr;
  26. reg [1:0] cnt_f,cnt_g;
  27. reg [26:0] cnt;
  28. reg [7:0] led;
  29. reg [3:0] spd;
  30. reg [1:0] knd;
  31. reg drc;
  32. reg [1:0] stt;
  33. reg [4:0] flg;
  34. reg [4:0] flg_f;
  35. reg [5:0] stt_f;
  36. reg [2:0] i;
  37. always @(posedge clk or negedge rst_n) begin
  38.         if(!rst_n) begin
  39.                 cnt <= 27'd0;
  40.                 stt <= 2'd0;
  41.                 next_f <= 6'h0;
  42.                 cnt_g <= 2'h0;
  43.         end
  44.         else begin
  45.                 i <= sw2 * 2'd3;
  46.                 spd <= (sw1 + 1'b1) * (i + 1'b1);
  47.                 knd[0] <= sw3;
  48.                 knd[1] <= sw4;
  49.                 drc <= sw5;
  50.                 cnt <= cnt + 1'b1;
  51.                 if(cnt == 27'h400000 * spd) begin
  52.                         cnt <= 27'd0;
  53.                         stt <= stt + 1'b1 - drc * 2'd2;
  54.                         case(knd * 4 + stt)
  55.                                 4'h0:led <= 8'h11;
  56.                                 4'h1:led <= 8'h22;
  57.                                 4'h2:led <= 8'h44;
  58.                                 4'h3:led <= 8'h88;
  59.                                 4'h4:led <= 8'h33;
  60.                                 4'h5:led <= 8'hCC;
  61.                                 4'h6:led <= 8'h33;
  62.                                 4'h7:led <= 8'hCC;
  63.                                 4'h8:led <= 8'h77;
  64.                                 4'h9:led <= 8'hEE;
  65.                                 4'hA:led <= 8'hDD;
  66.                                 4'hB:led <= 8'hBB;
  67.                                 4'hC:led <= 8'hF;
  68.                                 4'hD:led <= 8'hF0;
  69.                                 4'hE:led <= 8'hF;
  70.                                 4'hF:led <= 8'hF0;
  71.                         endcase
  72.                 end
  73.         end
  74. end
  75. always @(posedge clk)      
  76. begin
  77.   counter=counter+1;
  78.   if(counter==16'h000f)  
  79.   clkr=~clkr;
  80. end
  81. always @(posedge clkr)
  82. begin
  83. current=next;
  84.   case(current)
  85.     6'h0:   begin  rs<=0; dat<=8'h38; next<=6'h1; end //清屏       
  86.     6'h1:   begin  rs<=0; dat<=8'h0c; next<=6'h2; end //設(shè)置顯示模式
  87.     6'h2:   begin  rs<=0; dat<=8'h6; next<=6'h3; end //顯示器開(kāi)、光標(biāo)不顯示、光標(biāo)不允許閃爍
  88.     6'h3:   begin  rs<=0; dat<=8'h1; next<=6'h4; end
  89.     6'h4:   begin  rs<=1; dat<=" "; next<=6'h5; end
  90.     6'h5:   begin  rs<=1; dat<="S"; next<=6'h6; end
  91.     6'h6:   begin  rs<=1; dat<="p"; next<=6'h7; end
  92.     6'h7:   begin  rs<=1; dat<="e"; next<=6'h8; end
  93.     6'h8:   begin  rs<=1; dat<="e"; next<=6'h9; end
  94.     6'h9:   begin  rs<=1; dat<="d"; next<=6'hA; end
  95.     6'hA:   begin  rs<=1; dat<=":"; next<=6'hB; end
  96.     6'hB:   begin  rs<=1; dat<= 8'h30 + spd; next<=6'hC; end
  97.     6'hC:   begin  rs<=1; dat<=" "; next<=6'hD; end
  98.     6'hD:   begin  rs<=1; dat<="K"; next<=6'hE; end
  99.     6'hE:   begin  rs<=1; dat<="i"; next<=6'hF; end
  100.     6'hF:   begin  rs<=1; dat<="n"; next<=6'h10; end
  101.          6'h10:   begin  rs<=1; dat<="d"; next<=6'h11; end
  102.          6'h11:   begin  rs<=1; dat<=":"; next<=6'h12; end
  103.          6'h12:   begin  rs<=1; dat<= 8'h31 + knd; next<=6'h13; end
  104.          6'h13:   begin  rs<=1; dat<=" "; next<=6'h14; end
  105.          6'h14:   begin  rs<=0; dat<=8'hC0; next<=6'h15; end
  106.          6'h15:   begin  rs<=1; dat<=" "; next<=6'h16; end
  107.          6'h16:   begin  rs<=1; dat<=" "; next<=6'h17; end
  108.          6'h17:   begin  rs<=1; dat<="D"; next<=6'h18; end
  109.          6'h18:   begin  rs<=1; dat<="i"; next<=6'h19; end
  110.          6'h19:   begin  rs<=1; dat<="r"; next<=6'h1A; end
  111.          6'h1A:   begin  rs<=1; dat<="e"; next<=6'h1B; end
  112.          6'h1B:   begin  rs<=1; dat<="c"; next<=6'h1C; end
  113.          6'h1C:   begin  rs<=1; dat<="t"; next<=6'h1D; end
  114.          6'h1D:   begin  rs<=1; dat<="i"; next<=6'h1E; end
  115.          6'h1E:   begin  rs<=1; dat<="o"; next<=6'h1F; end
  116.          6'h1F:   begin  rs<=1; dat<="n"; next<=6'h20; end
  117.          6'h20:   begin  rs<=1; dat<=":"; next<=6'h21; end
  118.          6'h21:   begin  rs<=1; dat<= 8'h30 + drc; next<=6'h22; end
  119.          6'h22:   begin  rs<=1; dat<=" "; next<=6'h23; end
  120.          6'h23:   begin  rs<=1; dat<=" "; next<=6'h24; end
  121.          6'h24:   begin  rs<=1; dat<=" "; next<=6'h25; end
  122.     6'h25:   begin rs<=0;  dat<=8'h00;                    //行一遍 然后 把液晶的E 腳 拉高
  123.               if(cnt_f!=2'h2)  
  124.                   begin  
  125.                        e<=0;next<=6'h0;cnt_f<=cnt_f+1;   
  126.                   end  
  127.                    else  
  128.                      begin next<=6'h25; e<=1; next <= next_f; cnt_f <= cnt_g;
  129.                     end   
  130.               end
  131.    default:   next=6'h0;
  132.     endcase
  133. end
  134. assign en=clkr|e;
  135. assign rw=0;
  136. assign led0 = led[0];
  137. assign led1 = led[1];
  138. assign led2 = led[2];
  139. assign led3 = led[3];
  140. assign led4 = led[4];
  141. assign led5 = led[5];
  142. assign led6 = led[6];
  143. assign led7 = led[7];
  144. endmodule  
復(fù)制代碼


所有資料51hei提供下載:
LED.rar (3.29 MB, 下載次數(shù): 35)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:191615 發(fā)表于 2018-11-22 14:56 | 只看該作者
學(xué)習(xí)了,我是初學(xué)者,有點(diǎn)頭大
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表