久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

LED陣列之FPGA顯示

作者:kb129   來(lái)源:kb129   點(diǎn)擊數(shù):  更新時(shí)間:2014年06月08日   【字體:
   LED陣列已經(jīng)普遍使用在我們生活中,出去逛逛隨處可見(jiàn)。不太清楚業(yè)內(nèi)是使用什么來(lái)控制顯示的,估計(jì)用單片機(jī),畢竟便宜多了。作為一個(gè)搞電子的,一定要了解LED陣列顯示。我的理解:LED陣列顯示主要有兩種:靜態(tài)顯示,滾動(dòng)顯示。

一:靜態(tài)顯示    

  LED陣列顯示有些類(lèi)似于數(shù)碼管顯示,都是掃描顯示。這里略講講原理:在我們看到的LED陣列顯示一個(gè)畫(huà)面或是一行字,其實(shí)在硬件顯示的時(shí)候,應(yīng)該是一行一行或是一列一列來(lái)顯示。例如8*8led陣列,在我使用過(guò)程中,顯示方式是一列一列的顯示,也就是先點(diǎn)亮第一列l(wèi)ed,其他列都不亮,然后點(diǎn)亮第二列l(wèi)ed,其他列都不亮,依次到第八列,然后又回來(lái)點(diǎn)亮第一列,以此循環(huán)。這樣就能實(shí)現(xiàn)led陣列的靜態(tài)顯示。

二:左移或右移顯示   

      led滾動(dòng)顯示是一個(gè)不容易理解的顯示方式。實(shí)際使用中,可以看到,led陣列都是一行字緩慢的向左或是向右移動(dòng)。

      顯示方法:一列一列顯示。(如果是上下移動(dòng),則選擇一行一行顯示)

思考的方向:?jiǎn)为?dú)考慮每一列數(shù)值的改變,先考慮第一列在滾動(dòng)顯示過(guò)程中數(shù)值有哪些。

舉例說(shuō)明:


就像上圖我們要滾動(dòng)顯示一個(gè)字母T,從最上面圖1一直右移到最后一個(gè)圖,然后又回到了圖1,這就是典型的滾動(dòng)循環(huán)顯示。
按照上面的思考方法來(lái)做,假定最左邊為第一列,最右邊為第八列。首先考慮在滾動(dòng)顯示中第一列的數(shù)據(jù)變化:

    8'h00,  8'h00,  8'h00,  8'h40,  8'h40,  8'h7e,  8'h40,  8'h40

第二列數(shù)據(jù)變化:

    8'h40,   8'h00, 8'h00,  8'h00,  8'h40,  8'h40,  8'h7e,  8'h40

對(duì)比第一列數(shù)據(jù)和第二列數(shù)據(jù),會(huì)發(fā)現(xiàn)第一列第一張圖的數(shù)據(jù)8'h00,是第二列第二張圖的數(shù)據(jù)8'h00.


由此可知:對(duì)于右移滾動(dòng)循環(huán)顯示,所有列的數(shù)據(jù)都是同樣的,也就是,如果把列出現(xiàn)的所有數(shù)據(jù)存在一個(gè)數(shù)組或是庫(kù)里面,所有列的數(shù)據(jù)都可以在該數(shù)組或是庫(kù)取。這就誕生了網(wǎng)上很多字模軟件,我們只要知道第一張圖上面所有列的數(shù)據(jù),然后存在一個(gè)數(shù)組里面,顯示的時(shí)候只需要每一列取不同的值即可。

具體代碼沒(méi)有保存,故不貼出來(lái)。

三:最外圍順時(shí)針滾動(dòng)顯示

      之所以特別說(shuō)說(shuō)這個(gè)顯示,是因?yàn)樯现苣团笥压湫@。走到體育館,她指著體育館門(mén)口的led,跟我講,最外圍的那一圈一直在順時(shí)針旋轉(zhuǎn)怎么做到的。當(dāng)時(shí)覺(jué)得很少見(jiàn),琢磨難道是橫著的設(shè)置為左右移動(dòng),豎著的設(shè)置為上下移動(dòng)。接著就想,那么怎么在同一個(gè)顯示中,既使用上下移動(dòng)模式,又使用左右移動(dòng)模式,想了很久。昨晚自己在紙上亂畫(huà)了一下,發(fā)現(xiàn)方法還是和上面一樣。


其實(shí)在旋轉(zhuǎn)過(guò)程中,每一列的數(shù)據(jù)還是周期發(fā)生變化,

拿第一列(最左邊一列)舉例:變化的值為:8'h99, 8'h33,8'h66,8'hCC.這樣就可以將問(wèn)題轉(zhuǎn)換到第二種顯示,所以在led陣列顯示中,如果是一列一列的顯示,需要著重考慮每一列的數(shù)據(jù)的變化;如果是一行一行的顯示,需要著重考慮的是每一行的數(shù)據(jù)變化。

verilog代碼為:(其中中行為1,列為0則led亮)

//pro : 8*8 led show
//data: 2014-04-23 qs336
//info: this is a pro exe that play the show of 8*8 led
module led88(
    input                     clk,
    output     reg [7:0] R,   //this is row
    output     reg [7:0] L
);
integer cnt1,cnt2,cnt3;
reg clk_lk,clk_h;
reg [2:0] p;
reg [1:0] i;
reg [7:0] char0[3:0];
reg [7:0] char1[3:0];
reg [7:0] char2[3:0];
reg [7:0] char3[3:0];
reg [7:0] char4[3:0];
reg [7:0] char5[3:0];
reg [7:0] char6[3:0];
reg [7:0] char7[3:0];

always@(posedge clk )
begin
      char0[0] <= 8'b1001_1001; char0[1] <= 8'b0011_0011; char0[2] <= 8'b0110_0110; char0[3]<= 8'b1100_1100;
      char1[0] <= 8'b1000_0001; char1[1] <= 8'b1000_0000; char1[2] <= 8'b0000_0000; char1[3] <= 8'b0000_0001;
      char2[0] <= 8'b0000_0000; char2[1] <= 8'b1000_0000; char2[2] <= 8'b1000_0001; char2[3] <= 8'b0000_0001;
      char3[0] <= 8'b0000_0000; char3[1] <= 8'b0000_0001; char3[2] <= 8'b1000_0001; char3[3] <= 8'b1000_0000;
      char4[0] <= 8'b1000_0001; char4[1] <= 8'b0000_0001; char4[2] <= 8'b0000_0000; char4[3] <= 8'b1000_0000;
      char5[0] <= 8'b1000_0001; char5[1] <= 8'b1000_0000; char5[2] <= 8'b0000_0000; char5[3] <= 8'b0000_0001;
      char6[0] <= 8'b0000_0000; char6[1] <= 8'b1000_0000; char6[2] <= 8'b1000_0001; char6[3] <= 8'b0000_0001;
      char7[0] <= 8'b0110_0110; char7[1] <= 8'b0011_0011; char7[2] <= 8'b1001_1001; char7[3] <= 8'b1100_1100;
 if(cnt1==8'd124)
       begin
                 cnt1 <= 0;
                 if(cnt2==8'd199)
                 begin
                       clk_lk <= ~clk_lk;
                       cnt2 <= 0;
                 end
                else cnt2 <= cnt2+1;
       end
 else cnt1 <= cnt1+1;
end

always@(posedge clk_lk)
begin
         if(cnt3==8'd70)
         begin
              cnt3   <= 0;
              clk_h  <= ~clk_h;
         end
         else  cnt3 <= cnt3+1;
         if(p==3'b111) p <= 0;
         else                p <= p+1;

end
always@(p)
case(p)
    3'b000:begin    
                    L <= 8'b1111_1110;
                    R[7:0] <= char0[i];
               end
    3'b001:begin    
                    L <= 8'b1111_1101;
                    R[7:0] <= char1[i];  
               end  
    3'b010:begin    
                    L <= 8'b1111_1011;
                    R[7:0] <= char2[i];  
              end 
    3'b011:begin    
                    L <= 8'b1111_0111;
                    R[7:0] <= char3[i];   
              end 
    3'b100:begin    
                    L <= 8'b1110_1111;
                    R[7:0] <= char4[i];   
               end 
    3'b101:begin    
                     L <= 8'b1101_1111;
                     R[7:0] <= char5[i];   
              end    
     3'b110:begin    
                     L <= 8'b1011_1111;
                     R[7:0] <= char6[i];   
                end    
      3'b111:begin    
                     L <= 8'b0111_1111;
                     R[7:0] <= char7[i];  
                 end      
endcase

always@(posedge clk_h)
begin
        i <= i+1;

end

endmodule
其實(shí)led陣列顯示有很多種方法,上面介紹的是一個(gè)很容易理解的方法,可以以此為基本來(lái)靈活改變顯示方法。

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 亚洲综合无码一区二区 | 中文字幕日韩欧美一区二区三区 | 日韩一级精品视频在线观看 | 羞羞的视频免费看 | 免费在线看黄视频 | 91麻豆精品一区二区三区 | 亚洲精品日韩综合观看成人91 | 日日夜夜91| 91一区二区三区 | 国产精品中文在线 | 欧美激情一区二区三区 | 日韩精品在线看 | 亚洲综合大片69999 | 久久精品亚洲精品 | 五月天婷婷激情 | 欧美日韩亚洲一区 | 国产视频精品在线 | 91精品国产综合久久香蕉麻豆 | 一级国产精品一级国产精品片 | 夜夜爽99久久国产综合精品女不卡 | 久久久久国产精品一区二区 | 日韩视频在线免费观看 | 国内自拍偷拍 | 伊人久久免费 | 亚洲在线视频 | va在线| 男人天堂网站 | 久在线视频播放免费视频 | 日韩成人 | 一区二区av | 欧美精品一区二区在线观看 | 亚州一区二区三区 | 亚洲一页 | 日韩在线播放一区 | 久久精品99 | 色综合久久久 | 国产一区三区在线 | 一区二区中文 | 国产福利视频在线观看 | 另类在线 | 最近中文字幕在线视频1 |