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

【案例】LCD入門案例-動態矩形

  發布時間:2023-10-18  |    作者:管理員  |  瀏覽量:815

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

1.1 總體設計

1.1.1 概述

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

本設計的主要任務是基于FPGALCD顯示控制器設計,兼顧程序的易用性,方便此后模塊的移植和應用。采用VHDL硬件描述語言在QUARTUS II軟件平臺上實現FPGA對LCD的控制,在LCD模塊上實現任意彩色圖片的顯示,與此同時還須實現實時刷新數據的功能。這將有助于采用FPGA的系列產品的開發,特別是需要用到LCD而采用FPGA的產品的開發。不但縮短了FPGA的開發周期,也使更多采用FPGA設計的產品上出現LCD,增加了人機之間的交互性。

1.1.2 設計目標

此設計通過fpga給lcd發送圖片信息,然后直接在LCD顯示矩形動畫,矩形的寬從2變化到600,矩形的高從2變化到400

 

1.1.3信號列表

  

信號名

  

接口方向

定義

clk_50m

輸入

系統時鐘

rst_n

輸入

低電平復位信號

lcd_hsync

輸出

行同步信號

lcd_vsync

輸出

場同步信號

lcd_de

輸出

行和場同時顯示時序段

  

有效顯示數據段信號

lcd_rgb

輸出

顯示顏色RGB

  

[23:16]:表示的是R[7:0]

  

[15:8]:表示的是G[7:0]

  

[7:0]:表示的是B[7:0]

lcd_dclk

輸出

像素時鐘信號



1.1.4 設計思路

 

設計行顯示時序段和場顯示時序段,來確定矩形邊框的寬度,根據各種顏色的數值來確定lcd顯示屏顯示出的邊框顏色

行時鐘計數器cnt_hys:用來計算行同步信號的幀長,加一條件是1,結束條件為數到1056個像素就結束

場時鐘計數器cnt_vys:用來計算場同步信號的幀長,加一條件是場信號每數到1056個像素(即為一行結束的時刻),結束條件為數到525行就結束

 

1.1.5參考代碼

a. 

module mdyLcdDispDynaRect(

b. 

c. 

    clk_50m     ,  

d. 

e. 

    rst_n       ,

f. 

g. 

 

h. 

i. 

    lcd_hsync   ,

j. 

k. 

    lcd_vsync   ,

l. 

m. 

    lcd_de      ,

n. 

o. 

 

p. 

q. 

 

r. 

s. 

    lcd_rgb     ,

t. 

u. 

    lcd_dclk   

v. 

w. 

      

x. 

y. 

);

z. 

aa. 

 

ab. 

ac. 

    input               clk_50m     ;  

ad. 

ae. 

    input               rst_n       ;

af. 

ag. 

    output              lcd_hsync   ;

ah. 

ai. 

    output              lcd_vsync   ;

aj. 

ak. 

    output              lcd_de      ;

al. 

am. 

 

an. 

ao. 

    output  [23:0]      lcd_rgb     ;

ap. 

aq. 

    output              lcd_dclk    ;

ar. 

as. 

      

at. 

au. 

 

av. 

aw. 

    reg      [30:0]        h        ;

ax. 

ay. 

        reg      [30:0]        v        ;

az. 

ba. 

         

bb. 

bc. 

    reg                 lcd_hsync   ;

bd. 

be. 

    reg                 lcd_vsync   ;

bf. 

bg. 

 

bh. 

bi. 

    reg     [23:0]      lcd_rgb     ;

bj. 

bk. 

 

bl. 

bm. 

 

bn. 

bo. 

    parameter     LINE_PR   =  1056 ;      

bp. 

bq. 

    parameter     FRAME_PER =   525 ;           

br. 

bs. 

 

bt. 

bu. 

 

bv. 

bw. 

    parameter     H_SYNC    =    20 ;      

bx. 

by. 

    parameter     V_SYNC    =    10 ;              

bz. 

ca. 

 

cb. 

cc. 

    parameter     HDE_START =    46 ;

cd. 

ce. 

    parameter     HDE_END   =   846 ;

cf. 

cg. 

    parameter     VDE_START =    23 ;

ch. 

ci. 

    parameter     VDE_END   =   503 ;

cj. 

ck. 

 

cl. 

cm. 

   

cn. 

co. 

 

cp. 

cq. 

    reg    [12:0]     cnt_hsy       ;

cr. 

cs. 

    reg    [12:0]     cnt_vsy       ;

ct. 

cu. 

    reg               hsync_de      ;

cv. 

cw. 

    reg               vsync_de      ;

cx. 

cy. 

 

cz. 

da. 

    wire              display_area  ;

db. 

dc. 

    wire              e_area        ;

dd. 

de. 

    wire              add_cnt_hsy   ;

df. 

dg. 

    wire              end_cnt_hsy   ;

dh. 

di. 

    wire              add_cnt_vsy   ;

dj. 

dk. 

    wire              end_cnt_vsy   ;

dl. 

dm. 

    reg [ 7:0]        cnt0          ;

dn. 

do. 

    wire              add_cnt0      ;

dp. 

dq. 

    wire              end_cnt0      ;

dr. 

ds. 

    reg  [15:0]       cnt1          ;

dt. 

du. 

    wire              add_cnt1      ;

dv. 

dw. 

    wire              end_cnt1      ;

dx. 

dy. 

 

dz. 

ea. 

 

eb. 

ec. 

    assign clk       = clk_50m              ;

ed. 

ee. 

    assign lcd_dclk  = ~ clk_50m            ;

ef. 

eg. 

    assign lcd_de    = hsync_de & vsync_de  ;

eh. 

ei. 

   

ej. 

ek. 

   

el. 

em. 

 

en. 

eo. 

 

ep. 

eq. 

    always @ (posedge clk or negedge rst_n)begin

er. 

es. 

            if(!rst_n)begin

et. 

eu. 

                cnt_hsy <= 0;

ev. 

ew. 

            end

ex. 

ey. 

            else if(add_cnt_hsy)begin

ez. 

fa. 

                if(end_cnt_hsy)

fb. 

fc. 

                    cnt_hsy <= 0;

fd. 

fe. 

                else

ff. 

fg. 

                    cnt_hsy <= cnt_hsy + 1;

fh. 

fi. 

            end

fj. 

fk. 

    end

fl. 

fm. 

   

fn. 

fo. 

    assign add_cnt_hsy = 1;

fp. 

fq. 

    assign end_cnt_hsy = add_cnt_hsy && cnt_hsy == LINE_PR -1;

fr. 

fs. 

   

ft. 

fu. 

 

fv. 

fw. 

    always @ (posedge clk or negedge rst_n)begin

fx. 

fy. 

        if(!rst_n)begin

fz. 

ga. 

            cnt_vsy <= 0;

gb. 

gc. 

        end

gd. 

ge. 

        else if(add_cnt_vsy)begin

gf. 

gg. 

            if(end_cnt_vsy)

gh. 

gi. 

                cnt_vsy <= 0;

gj. 

gk. 

            else

gl. 

gm. 

                cnt_vsy <= cnt_vsy + 1;

gn. 

go. 

        end

gp. 

gq. 

    end

gr. 

gs. 

   

gt. 

gu. 

    assign add_cnt_vsy = end_cnt_hsy;

gv. 

gw. 

    assign end_cnt_vsy = add_cnt_vsy && cnt_vsy == FRAME_PER - 1;

gx. 

gy. 

         

gz. 

ha. 

 

hb. 

hc. 

    always @ (posedge clk or negedge rst_n)begin

hd. 

he. 

        if(!rst_n)begin

hf. 

hg. 

            lcd_hsync <= 1'b0 ;

hh. 

hi. 

        end

hj. 

hk. 

        else if(end_cnt_hsy)begin

hl. 

hm. 

            lcd_hsync <= 1'b0;

hn. 

ho. 

        end

hp. 

hq. 

        else if(add_cnt_hsy && cnt_hsy == H_SYNC-1 )begin

hr. 

hs. 

            lcd_hsync <= 1'b1;

ht. 

hu. 

        end

hv. 

hw. 

    end

hx. 

hy. 

 

hz. 

ia. 

    always @ (posedge clk or negedge rst_n)begin

ib. 

ic. 

        if(!rst_n)begin

id. 

ie. 

            hsync_de <= 1'b0;

if. 

ig. 

        end

ih. 

ii. 

        else if(add_cnt_hsy && cnt_hsy == HDE_START-1)begin

ij. 

ik. 

            hsync_de <= 1'b1;

il. 

im. 

        end

in. 

io. 

        else if(add_cnt_hsy && cnt_hsy == HDE_END-1)begin

ip. 

iq. 

            hsync_de <= 1'b0;

ir. 

is. 

        end

it. 

iu. 

    end

iv. 

iw. 

 

ix. 

iy. 

         

iz. 

ja. 

    always @ (posedge clk or negedge rst_n)begin

jb. 

jc. 

        if(!rst_n)begin

jd. 

je. 

            lcd_vsync <= 1'b0 ;

jf. 

jg. 

        end

jh. 

ji. 

                  else if(add_cnt_vsy && cnt_vsy == V_SYNC-1 )begin

jj. 

jk. 

            lcd_vsync <= 1'b1;

jl. 

jm. 

        end

jn. 

jo. 

        else if(end_cnt_vsy)begin

jp. 

jq. 

            lcd_vsync <= 1'b0;

jr. 

js. 

        end

jt. 

ju. 

 

jv. 

jw. 

    end

jx. 

jy. 

 

jz. 

ka. 

         

kb. 

kc. 

    always @ (posedge clk or negedge rst_n)begin

kd. 

ke. 

        if(!rst_n)begin

kf. 

kg. 

            vsync_de <= 1'b0;

kh. 

ki. 

        end

kj. 

kk. 

        else if(add_cnt_vsy && cnt_vsy == VDE_START-1)begin

kl. 

km. 

            vsync_de <= 1'b1;

kn. 

ko. 

        end

kp. 

kq. 

        else if(add_cnt_vsy && cnt_vsy ==VDE_END-1)begin

kr. 

ks. 

            vsync_de <= 1'b0;

kt. 

ku. 

        end

kv. 

kw. 

    end

kx. 

ky. 

 

kz. 

la. 

 

lb. 

lc. 

    assign   display_area = hsync_de && vsync_de;

ld. 

le. 

 

lf. 

lg. 

 

lh. 

li. 

    assign   blue_area = (cnt_hsy >= HDE_START + 400-h) && (cnt_hsy<HDE_START+400+h) &&

lj. 

lk. 

                         (cnt_vsy >= VDE_START + 240-v) && (cnt_vsy<VDE_START+240+v) ;

ll. 

lm. 

 

ln. 

lo. 

                     

lp. 

lq. 

 

lr. 

ls. 

        always  @(posedge clk or negedge rst_n)begin

lt. 

lu. 

        if(rst_n==1'b0)begin

lv. 

lw. 

            h<=1;

lx. 

ly. 

        end

lz. 

ma. 

        else if(end_cnt_vsy && h<300)begin

mb. 

mc. 

            h<=h+2;

md. 

me. 

        end

mf. 

mg. 

    end

mh. 

mi. 

 

mj. 

mk. 

    always  @(posedge clk or negedge rst_n)begin

ml. 

mm. 

        if(rst_n==1'b0)begin

mn. 

mo. 

            v<=1;

mp. 

mq. 

        end

mr. 

ms. 

        else if(end_cnt_vsy && v<200)begin

mt. 

mu. 

            v<=v+1;

mv. 

mw. 

        end

mx. 

my. 

    end

mz. 

na. 

 

nb. 

nc. 

 

nd. 

ne. 

    always @ (posedge clk or negedge rst_n)begin

nf. 

ng. 

        if(!rst_n)begin

nh. 

ni. 

                                lcd_rgb <= 0;

nj. 

nk. 

        end

nl. 

nm. 

        else if(display_area)begin

nn. 

no. 

            if(blue_area)begin

np. 

nq. 

                lcd_rgb <= 24'h00_00_ff ;

nr. 

ns. 

            end

nt. 

nu. 

            else begin

nv. 

nw. 

                lcd_rgb <= 24'hff_ff_ff ;

nx. 

ny. 

            end

nz. 

oa. 

        end

ob. 

oc. 

        else begin

od. 

oe. 

            lcd_rgb <= 0;

of. 

og. 

        end

oh. 

oi. 

    end

oj. 

ok. 

 

ol. 

om. 

 

on. 

oo. 

 

op. 

oq. 

endmodule

or. 

os. 

 

ot. 

復制代碼



1.2 效果和總結

本案例我們設計了藍色的矩形,藍色矩形的場信號是從2行變到400行、行信號是從2個像素變到600個像素;

在這個設計案例中,至簡設計法和明德揚計數器模板發揮了至關重要的作用,使我能夠快速準確完成設計。希望有興趣的同學可以運用至簡設計法和明德揚模板嘗試一下拓展設計哦。

 

設計教學視頻工程源代碼,請到明德揚論壇(www.fpgabbs.cn)學習:http://www.fpgabbs.cn/thread-1156-1-1.html




溫馨提示:明德揚2023推出了全新課程——邏輯設計基本功修煉課,降低學習FPGA門檻的同時,增加了學習的趣味性,并組織了考試贏積分活動

http://m.cqqtmy.cn/ffkc/415.html

(點擊→了解課程詳情?)感興趣請聯系易老師:13112063618(微信同步)



本文TAG:

Copyright ? 2012-2023 版權所有:深圳明德揚科技教育有限公司

主站蜘蛛池模板: 国产午夜亚洲精品第一区 | 久久99国产亚洲精品观看 | 成人欧美一区二区三区视频不卡 | 欧美日韩国产亚洲一区二区 | 亚洲欧美日韩中文高清一 | 免费毛片a | 日韩 欧美 亚洲 国产 | 亚洲美女啪啪 | 大片免免费观看视频播放网站 | condom色疯狂做受xxxx | 国产成人高清精品免费5388密 | 三级视频网站在线观看播放 | 欧美日韩黄色大片 | 中文字幕在线播放 | 国产国产精品人在线视 | 奇米网狠狠 | 国语三级 | 国产91精品系列在线观看 | 成人小视频在线免费观看 | 国产成人精品日本亚洲直接 | 91亚洲国产 | 美国大黄一片免费看 | 国产精品天天看天天爽 | 亚洲综合一 | 国产亚洲精彩视频 | 成人中文字幕在线高清 | 婷婷丁香激情五月 | 日日操狠狠干 | 国产精品成人一区二区三区 | 网址在线观看 | 色婷婷精品免费视频 | 国产亚洲精品美女一区二区 | 中国三级毛片 | 免费特黄一区二区三区视频一 | 亚洲成网777777国产精品 | 毛片无限看 | 农村寡妇特一级毛片 | 国产三级三级三级三级 | 婷婷中文在线 | 成人性生活视频 | a国产视频 |