99在线精品免费视频九九视-99在线精品视频-99在线精品视频免费观里-99在线精品视频在线观看-99在线免费播放



官方論壇
官方淘寶
官方博客
微信公眾號
點擊聯(lián)系吳工 點擊聯(lián)系周老師
您的當(dāng)前位置:主頁-old > 教程中心 > 案例中心 > 至簡設(shè)計案例 >

【案例】LCD顯示圖片

發(fā)布時間:2023-04-13   作者:admin 瀏覽量:

--作者:肖肖肖

本文為明德?lián)P原創(chuàng)及錄用文章,轉(zhuǎn)載請注明出處!

1.1 總體設(shè)計

1.1.1 概述

液晶顯示器是一種通過液晶和色彩過濾器過濾光源,在平面面板上產(chǎn)生圖像的數(shù)字顯示器。LCD 的構(gòu)造是在兩片平行的玻璃基板當(dāng)中放置液晶盒,下基板玻璃上設(shè)置薄膜晶體管,.上基板玻璃上設(shè)置彩色濾光片,通過薄膜晶體管上的信號與電壓改變來控制液晶分子的轉(zhuǎn)動方向,從而達(dá)到控制每個像素點偏振光出射與否而達(dá)到顯示目的。與傳統(tǒng)的陰極射線管相比,LCD具有占用空間小,低功耗,低輻射,無閃爍,降低視覺疲勞等優(yōu)點。現(xiàn)在LCD已漸替代CRT成為主流,價格也已經(jīng)下降了很多,并已充分的普及。

1.1.2 設(shè)計目標(biāo)

在7寸LCD顯示屏上實現(xiàn)圖片的居中顯示。

1.1.3 系統(tǒng)結(jié)構(gòu)框圖

系統(tǒng)結(jié)構(gòu)框圖如下所示:

「每周FPGA案例」至簡設(shè)計系列_LCD顯示圖片

1.1.4 模塊功能

? PLL模塊實現(xiàn)功能

1. 將輸入的50MHz時鐘分頻輸出40MHz時鐘。

? ROM模塊實現(xiàn)功能

2. 存儲圖像數(shù)據(jù)。

? LCD驅(qū)動模塊實現(xiàn)功能

1、 產(chǎn)生驅(qū)動LCD屏顯示的時序

2、 讀取ROM里存儲的數(shù)據(jù)并輸出顯示

1.1.5 頂層信號

「每周FPGA案例」至簡設(shè)計系列_LCD顯示圖片

1.1.6 參考代碼



 1. module top_mdyLcdPic(
 2.  clk ,
 3.  rst_n ,
 4.  hys ,
 5.  vys ,
 6.  lcd_de , 
 7.  lcd_rgb ,
 8.  lcd_dclk
 9.  );
 10.  
 11.  parameter PICTURE_W = 24 ;
 12.  
 13.  input clk ;
 14.  input rst_n ;
 15.  output hys ;
 16.  output vys ;
 17.  output lcd_de ;
 18.  output  [PICTURE_W-1:0] lcd_rgb ;
 19.  output lcd_dclk ;
 20.  
 21.  
 22.  wire clk_0 ;
 23.  
 24.  wire hys ;
 25.  wire vys ;
 26.  wire lcd_de ;
 27.  wire [PICTURE_W-1:0] lcd_rgb ;
 28.  wire lcd_dclk ;
 29.  
 30.  
 31. //40MHz
 32. pll_40m u_pll_40m(
 33.   .areset (~rst_n ),
 34.  .inclk0 (clk ),
 35.   .c0 (clk_0 )
 36.  );
 37.  
 38.  
 39. lcd_driver u2(
 40.  .clk (clk_0 ),//40MHz
 41.  .rst_n (rst_n ),
 42.  
 43.  .hys (hys ), 
 44.  .vys (vys ), 
 45.  .lcd_de (lcd_de ), 
 46.  .lcd_rgb (lcd_rgb ), 
 47.  .lcd_dclk (lcd_dclk ) 
 48.  );
 49.  
 50. endmodule


1.2 PLL模塊設(shè)計

1.2.1 接口信號

下面為使用矩陣鍵盤時的接口信號:

「每周FPGA案例」至簡設(shè)計系列_LCD顯示圖片

1.2.2 設(shè)計思路

本模塊主要用于產(chǎn)生LCD驅(qū)動時序所需要的時鐘,關(guān)于PLL的使用詳細(xì)介紹請看下方鏈接:

http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=322&fromuid=100105

1.3 ROM模塊設(shè)計

1.3.1 接口信號


「每周FPGA案例」至簡設(shè)計系列_LCD顯示圖片

1.3.2 設(shè)計思路

本模塊主要用于存儲需要顯示的圖像數(shù)據(jù),關(guān)于ROM的使用詳細(xì)介紹請看下方數(shù)據(jù)手冊:


1.4 LCD驅(qū)動模塊設(shè)計

1.4.1 接口信號

「每周FPGA案例」至簡設(shè)計系列_LCD顯示圖片

1.4.2 設(shè)計思路

產(chǎn)生驅(qū)動LCD顯示的行場時序信號,其計數(shù)器架構(gòu)如下圖所示:

「每周FPGA案例」至簡設(shè)計系列_LCD顯示圖片

行計數(shù)器h_cnt:該計數(shù)器用來計算行同步信號的幀長。加一條件為1,表示一直在計數(shù)。結(jié)束條件為數(shù)1056個,也就是一行有1056個像素。

場計數(shù)器v_cnt:該計數(shù)器用來計算場同步信號的幀長。加一條件為end_h_cnt,即行計數(shù)器的計數(shù)器的結(jié)束條件,表示每計數(shù)完一行像素就加一。結(jié)束條件為數(shù)525個,也就是一共有525行像素。

1.4.3 參考代碼

1. module lcd_driver(
 2.  clk ,//40MHz
 3.  rst_n ,
 4.  
 5.  hys , 
 6.  vys , 
 7.  lcd_de , 
 8.  lcd_rgb , 
 9.  lcd_dclk 
 10. );
 11.  
 12.  input clk ;
 13.  input rst_n ;
 14.  
 15.  output hys ;
 16.  output vys ;
 17.  output lcd_de ;
 18.  output [23:0]  lcd_rgb ;
 19.  output lcd_dclk ;
 20.  
 21.  reg hys ;
 22.  reg vys ;
 23.  reg lcd_de ;
 24.  reg [23:0] lcd_rgb ;
 25.  wire lcd_dclk ;
 26.  
 27.  //1056
 28.  parameter THPW = 20 ; 
 29.  parameter THB = 46 ; 
 30.  parameter THD = 800 ; 
 31.  parameter THFP = 210 ; 
 32.  
 33.  //525
 34.  parameter TVPW = 10 ; 
 35.  parameter TVB = 23 ; 
 36.  parameter TVD = 480 ; 
 37.  parameter TVFP = 22 ; 
 38.  
 39.  parameter HDE_CENTRE = THD/2 ;//400
 40.  parameter VDE_CENTRE = TVD/2 ;//240
 41.  
 42.  reg [ 10:0] h_cnt ;
 43.  wire add_h_cnt ;
 44.  wire end_h_cnt ;
 45.  reg [ 9:0] v_cnt ;
 46.  wire  add_v_cnt ;
 47.  wire end_v_cnt ;
 48.  
 49.  
 50.  wire active_area ;
 51.  reg rom_area ;
 52.  reg [15:0] rom_addr ;
 53.  wire [7:0] rom_data ;
 54.  
 55.  
 56. always @(posedge clk or negedge rst_n) begin 
 57.  if (rst_n==0) begin
 58.  h_cnt <= 0; 
 59.  end
 60.  else if(add_h_cnt) begin
 61.  if(end_h_cnt)
 62.  h_cnt <= 0; 
 63.  else
 64.  h_cnt <= h_cnt+1 ;
 65.  end
 66. end
 67. assign add_h_cnt = 1;
 68. assign end_h_cnt = add_h_cnt && h_cnt == (THB + THD + THFP)-1 ;
 69.  
 70.  
 71.  
 72. always @(posedge clk or negedge rst_n) begin 
 73.  if (rst_n==0) begin
 74.  v_cnt <= 0; 
 75.  end
 76.  else if(add_v_cnt) begin
 77.  if(end_v_cnt)
 78.  v_cnt <= 0; 
 79.  else
 80.  v_cnt <= v_cnt+1 ;
 81.  end
 82. end
 83. assign add_v_cnt = end_h_cnt;
 84. assign end_v_cnt = add_v_cnt && v_cnt == (TVB + TVD + TVFP)-1 ;
 85.  
 86. /*******************************************************/
 87.  //dclk
 88.  assign lcd_dclk = clk;
 89.  
 90.  //hsync
 91.  always @(posedge clk or negedge rst_n)begin
 92.  if(rst_n==1'b0)begin
 93.  hys <= 0;
 94.  end
 95.  else if(add_h_cnt && h_cnt==THPW-1)begin
 96.  hys <= 1;
 97.  end
 98.  else if(end_h_cnt)begin
 99.  hys <= 0;
 100.  end
 101.  end
 102.  
 103.  
 104.  //vsync
 105.  always @(posedge clk or negedge rst_n)begin
 106.  if(rst_n==1'b0)begin
 107.   vys <= 0;
 108.  end
 109.  else if(add_v_cnt && v_cnt==TVPW-1)begin
 110.  vys <= 1;
 111.  end
 112.  else if(end_v_cnt)begin
 113.  vys <= 0;
 114.  end
 115.  end
 116.  
 117.  
 118.  //lcd_de
 119.  always @(posedge clk or negedge rst_n)begin
 120.  if(rst_n==1'b0)begin
 121.  lcd_de <= 0;
 122.  end
 123.  else if(active_area)begin
 124.  lcd_de <= 1;
 125.  end
 126.  else begin
 127.  lcd_de <= 0;
 128.  end
 129.  end
 130.  
 131.  
 132. /********************************************************************/ 
 133.  
 134.  
 135.  
 136. assign active_area = h_cnt>=(THB-1) && h_cnt<(THB+THD-1) && v_cnt>=(TVB-1) && v_cnt<(TVB+TVD-1);
 137.  
 138.  
 139. always @(*)begin
 140.  rom_area = h_cnt >=((HDE_CENTRE-60) + (THB-1)) && h_cnt < ((HDE_CENTRE+60) + (THB-1)) && v_cnt >= ((VDE_CENTRE-27)+(TVB-1)) && v_cnt < ((VDE_CENTRE+28) +(TVB-1));
 141. end
 142.  
 143.  
 144. always @(posedge clk or negedge rst_n)begin
 145.  if(rst_n==1'b0)begin
 146.  lcd_rgb <= 0;
 147.  end
 148.  else if(active_area)begin
 149.  if(rom_area)
 150.  lcd_rgb <= {rom_data[7:5],5'b11111,rom_data[4:2],5'b11111,rom_data[1:0],6'b111111};
 151.  else 
 152.  lcd_rgb <= {24{1'b1}};
 153.  end
 154.  else begin
 155.  lcd_rgb <=0;
 156.  end
 157. end
 158.  
 159.  
 160. always @(*)begin
 161.  if(active_area && rom_area)begin
 162.  rom_addr = (h_cnt-((HDE_CENTRE-60)+(THB-1))) + 120*(v_cnt-((VDE_CENTRE-27)+(TVB-1)));
 163.  end
 164. end
 165.  
 166.  
 167.  
 168.  
 169. fpga_rom u_fpga_rom(
 170.   .address (rom_addr),
 171.   .clock (clk ),
 172.   .q (rom_data));
 173.  
 174.  
 175.  endmodule

1.5 效果和總結(jié)

以下為工程上板后的現(xiàn)象效果圖:

? mp801開發(fā)板

「每周FPGA案例」至簡設(shè)計系列_LCD顯示圖片

? ms980試驗箱

「每周FPGA案例」至簡設(shè)計系列_LCD顯示圖片

感興趣的朋友也可以訪問明德?lián)P論壇(http://www.fpgabbs.cn/)進行FPGA相關(guān)工程設(shè)計學(xué)習(xí),也可以看一下我們往期的文章:

源工程和設(shè)計教學(xué)視頻請到論壇下載學(xué)習(xí):FPGA至簡設(shè)計案例200例【分享貼】
http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=1134&fromuid=9437
(出處: 明德?lián)P論壇)



公司簡介

明德?lián)P是一家專注于FPGA領(lǐng)域的專業(yè)性公司,公司主要業(yè)務(wù)包括開發(fā)板、教育培訓(xùn)、項目承接、人才服務(wù)等多個方向。
點撥開發(fā)板——學(xué)習(xí)FPGA的入門之選。
MP801開發(fā)板——千兆網(wǎng)、ADDA、大容量SDRAM等,學(xué)習(xí)和項目需求一步到位。
網(wǎng)絡(luò)培訓(xùn)班——不管時間和空間,明德?lián)P隨時在你身邊,助你快速學(xué)習(xí)FPGA。
周末培訓(xùn)班——明天的你會感激現(xiàn)在的努力進取,升職加薪明德?lián)P來助你。
就業(yè)培訓(xùn)班——七大企業(yè)級項目實訓(xùn),獲得豐富的項目經(jīng)驗,高薪就業(yè)。
專題課程——高手修煉課:提升設(shè)計能力;實用調(diào)試技巧課:提升定位和解決問題能力;FIFO架構(gòu)設(shè)計課:助你快速成為架構(gòu)設(shè)計師;時序約束、數(shù)字信號處理、PCIE、綜合項目實踐課等你來選。
項目承接——承接企業(yè)FPGA研發(fā)項目。
人才服務(wù)——提供人才推薦、人才代培、人才派遣等服務(wù)。

   拓展閱讀
主站蜘蛛池模板: 国产亚洲欧美久久精品 | 久久综合网址 | 97国产成人精品免费视频 | 国产成人精品日本亚洲麻豆 | 亚洲国产视频在线观看 | 久草爱视频 | 欧美黄成人免费网站大全 | 日韩免费一区二区 | 日韩免费在线视频观看 | 亚洲精品午夜级久久久久 | 免费观看国产一区二区三区 | 欧美特级毛片a够爽 | 美国毛片免费看 | 久久综合久久精品 | 日本a一级片 | 亚洲高清在线视频 | 国产精品亚洲专区一区 | 欧美日韩国产超高清免费看片 | www日韩在线 | 国产欧美日韩在线观看 | 午夜国产在线观看 | www.日韩在线| 青青青国产在线观看免费 | 99精品视频一区在线视频免费观看 | 啪啪中文字幕 | 亚洲欧洲日产国码在线观看 | 亚洲欧美另类视频 | 我要看欧美精品一级毛片 | 国产精品久久久久久久久电影网 | 亚洲美女在线视频 | 在线观看国产精品日本不卡网 | 久久免费视频1 | 一级看片免费视频 | 免费黄色网络 | 欧美黄色性生活 | 国产福利精品视频 | 国产成人免费午夜性视频 | 中文乱码视亚洲 | 日韩精品久久一区二区三区 | 亚洲精品人人 | 亚洲精品中文字幕午夜 |