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



官方論壇
官方淘寶
官方博客
微信公眾號
點擊聯系吳工 點擊聯系周老師

【案例】LCD顯示圖片

發布時間:2023-04-13   作者:admin 瀏覽量:

--作者:肖肖肖

本文為明德揚原創及錄用文章,轉載請注明出處!

1.1 總體設計

1.1.1 概述

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

1.1.2 設計目標

在7寸LCD顯示屏上實現圖片的居中顯示。

1.1.3 系統結構框圖

系統結構框圖如下所示:

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

1.1.4 模塊功能

? PLL模塊實現功能

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

? ROM模塊實現功能

2. 存儲圖像數據。

? LCD驅動模塊實現功能

1、 產生驅動LCD屏顯示的時序

2、 讀取ROM里存儲的數據并輸出顯示

1.1.5 頂層信號

「每周FPGA案例」至簡設計系列_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模塊設計

1.2.1 接口信號

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

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

1.2.2 設計思路

本模塊主要用于產生LCD驅動時序所需要的時鐘,關于PLL的使用詳細介紹請看下方鏈接:

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

1.3 ROM模塊設計

1.3.1 接口信號


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

1.3.2 設計思路

本模塊主要用于存儲需要顯示的圖像數據,關于ROM的使用詳細介紹請看下方數據手冊:


1.4 LCD驅動模塊設計

1.4.1 接口信號

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

1.4.2 設計思路

產生驅動LCD顯示的行場時序信號,其計數器架構如下圖所示:

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

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

場計數器v_cnt:該計數器用來計算場同步信號的幀長。加一條件為end_h_cnt,即行計數器的計數器的結束條件,表示每計數完一行像素就加一。結束條件為數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 效果和總結

以下為工程上板后的現象效果圖:

? mp801開發板

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

? ms980試驗箱

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

感興趣的朋友也可以訪問明德揚論壇(http://www.fpgabbs.cn/)進行FPGA相關工程設計學習,也可以看一下我們往期的文章:

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



公司簡介

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

   拓展閱讀
主站蜘蛛池模板: 久久久久欧美精品观看 | 国产在线看片网站 | 欧美日韩一区二区三区免费 | 成人免费激情视频 | 欧美日本韩国一区二区 | 国产xxwwxxww视频 | 在线观看香蕉免费啪在线观看 | 99久久免费看精品国产一区 | 大毛片 | 激情在线视频 | 日韩成人黄色 | 香蕉视频黄色片 | 免费看在线爱爱小视频 | 欧美一级黄色片 | 九九热精品视频在线观看 | 老妇女五级毛片 | 国产视频欧美 | 伊人黄色网| 色妞www精品视频免费看 | 亚洲视频精品在线观看 | 男女又黄又刺激黄a大片桃色 | 国产美女在线精品免费观看 | 欧美日韩国产58香蕉在线视频 | 欧美特黄级乱色毛片 | 亚欧在线视频 | 国产精品亚洲片夜色在线 | 99久久精品免费看国产一区二区 | 亚洲欧美日韩网站 | 国产a级三级三级三级 | 麻豆视传媒短视频网站-欢迎您 | 亚洲第一毛片 | 久久高清一区二区三区 | 国产性大片免费播放网站 | 精品视频免费在线观看 | 国产午夜视频在线观看第四页 | 亚洲免费影院 | 色综合999| 欧美亚洲欧美日韩中文二区 | 久久国产精彩视频 | 国产区综合另类亚洲欧美 | 又黄又爽视频 |