XILINX-的SPARTAN-3E-控制液晶顯示屏顯示字符串的verilog程序_第1頁
XILINX-的SPARTAN-3E-控制液晶顯示屏顯示字符串的verilog程序_第2頁
XILINX-的SPARTAN-3E-控制液晶顯示屏顯示字符串的verilog程序_第3頁
XILINX-的SPARTAN-3E-控制液晶顯示屏顯示字符串的verilog程序_第4頁
XILINX-的SPARTAN-3E-控制液晶顯示屏顯示字符串的verilog程序_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

//這是我練習(xí)的一個(gè)程序,做完后正確運(yùn)行,就貼出來供愛好verilogFPGA設(shè)計(jì)的朋友們共享,大家共同進(jìn)步.//該程序由于含有常量驅(qū)動(dòng)num_count故是不可綜合的??!//useVerilogHDLtodisplayacharonthelcd

//采用四線傳輸,傳輸一個(gè)八位數(shù)據(jù)得分兩次,需6個(gè)state來完成;

//通過本試驗(yàn)的狀態(tài)羅列,可以使你充分感受到什么叫做狀態(tài)機(jī)??!哈哈

//本程序在lcd上顯示OK;

modulelcd_control(input

clk,

//使能時(shí)鐘

input

reset_n,

//復(fù)位信號

output

reg

lcd_rs,

//指令/數(shù)據(jù)信號

output

lcd_rw,

//讀寫控制信號

output

reg

lcd_e,

//顯示使能端

output

reg[3:0]lcd_d,

//數(shù)據(jù)/指令輸出端

output

flash_ce

//存儲器總線使能

);

//strataflash存儲器芯片的使能信號設(shè)置為高電平,不允許其占用數(shù)據(jù)總線總線

assignflash_ce=1;//lcd_rw讀寫控制,由于只向液晶顯示屏控制芯片寫數(shù)據(jù),故將其設(shè)置為低電平

assignlcd_rw=0;

//根據(jù)傳送給液晶顯示屏控制芯片初始化命令和指定的地址計(jì)數(shù)器地址以及顯示字符的編碼數(shù)據(jù)的時(shí)序,定義若干狀態(tài)

parameterstate1=6'd1;

parameterstate2=6'd2;

parameterstate3=6'd3;

parameterstate4=6'd4;

parameterstate5=6'd5;

parameterstate6=6'd6;

parameterstate7=6'd7;

parameterstate8=6'd8;parameterstate9=6'd9;

parameterstate10=6'd10;

parameterstate11=6'd11;

parameterstate12=6'd12;

parameterstate13=6'd13;

parameterstate14=6'd14;

parameterstate15=6'd15;

parameterstate16=6'd16;parameterstate17=6'd17;

parameterstate18=6'd18;

parameterstate19=6'd19;

parameterstate20=6'd20;

parameterstate21=6'd21;

parameterstate22=6'd22;

parameterstate23=6'd23;

parameterstate24=6'd24;parameterstate25=6'd25;

parameterstate26=6'd26;

parameterstate27=6'd27;

parameterstate28=6'd28;

parameterstate29=6'd29;

parameterstate30=6'd30;

parameterstate31=6'd31;

parameterstate32=6'd32;parameterstate33=6'd33;

parameterstate34=6'd34;

parameterstate35=6'd35;

parameterstate36=6'd36;

parameterstate37=6'd37;

parameterstate38=6'd38;

parameterstate39=6'd39;

parameterstate40=6'd40;parameterstate41=6'd41;

parameterstate42=6'd42;

parameterstate43=6'd43;

parameterstate44=6'd44;

parameterstate45=6'd45;

parameterstate46=6'd46;

parameterstate47=6'd47;

parameterstate48=6'd48;

parameterstate49=6'd49;

parameterstate50=6'd50;

parameterstate51=6'd51;

parameterstate52=6'd52;

parameterstate53=6'd53;reg[5:0]state;

//statesignal

regstate_change;

//statechangecommunicate

//counterusedto對液晶顯示屏控制芯片進(jìn)行初始化和傳輸數(shù)據(jù)的時(shí)序控制,以及各狀態(tài)

//的停留時(shí)間,完成計(jì)數(shù)定時(shí)功能,輸出改變狀態(tài).

//定義用于計(jì)時(shí)的計(jì)數(shù)器信號

reg[19:0]delay_count;

reg[19:0]num_count;

reg[6:1]nextstate

;

always@(posedgeclk,negedgereset_n)

if(!reset_n)

begin

state_change<=1'b0;

delay_count<=0;

end

else

if(delay_count==num_count-1)

begin

state_change<=1'b1;

delay_count<=0;

end

else

begin

state_change<=1'b0;

delay_count<=delay_count+1;

end//FSMpart

//thisstatemachinepartusedto對狀態(tài)停留時(shí)間進(jìn)行設(shè)定,

//并且完成狀態(tài)轉(zhuǎn)移和輸出液晶顯示屏的控制信號lcd_rs,andlcd_e,datasignallcd_d

always@(posedgeclk,negedgereset_n)

//時(shí)鐘沿敏感,完成狀態(tài)更新

begin

if(!reset_n)

begin

state<=state1;

num_count<=20'd750_000;

//等待15ms,對應(yīng)750_000個(gè)時(shí)鐘脈沖信號

lcd_rs<=1'b0;

lcd_e<=1'b0;

lcd_d<=4'h3;

end

else

state<=nextstate;

end

//組合邏輯,完成狀態(tài)變化;

always@(state_change)

if(state_change)

case(state)

state1:

begin

nextstate=state2;

//先傳送控制命令超前l(fā)cd_e使能信號

num_count=20'd4;

//lcd_e未使能的等待時(shí)間大于40ns

lcd_rs=1'b0;

lcd_e=1'b0;

lcd_d=4'h3;

//寫入功能指令設(shè)置,等待使能

end

state2:

begin

nextstate=state3;

num_count=20'd12;

//使能lcd_e為高電平,并保持240ns;

lcd_e=1'b1;

end

state3:

begin

nextstate=state4;

num_count=20'd5_000;

//不是能lcd_e并等待100us

lcd_e=1'b0;

end

state4:

//重復(fù)寫入功能設(shè)置指令4'h3;

begin

nextstate=state6;

num_count=20'd4;

lcd_d=4'h3;

end

state5:

begin

nextstate=state6;

num_count=20'd12;

lcd_e=1'b1;

end

state6:

begin

nextstate=state7;

num_count=20'd5000;

lcd_e=1'b0;

end

//寫入功能設(shè)置指令,采用四位數(shù)據(jù)總線傳輸,傳輸功能控制字中的DL=0;

//當(dāng)DL=1時(shí),是八位數(shù)據(jù)總線傳輸。

//功能控制字為0x2*;四線傳輸;

state7:

begin

nextstate=state8;

num_count=20'd4;

lcd_d=4'h2;

end

state8:

begin

nextstate=state9;

num_count=20'd12;

lcd_e=1'b1;

end

state9:

begin

nextstate=state10;

num_count=20'd4000;

lcd_e=1'b0;

end

//傳輸功能控制設(shè)置字,采用四位總線DB[7:4],DL(對應(yīng)DB4)=0;

//雙行雙行顯示N(db3)=1;

//5*7點(diǎn)陣(db2)=0*;

//故控制字為0x28;

state10:

begin

nextstate=state11;

num_count=20'd4;

lcd_rs=0;

lcd_d=4'h2;

end

state11:

begin

nextstate=state12;

num_count=20'd12;

lcd_e=1;

end

state12:

begin

nextstate=state13;

num_count=20'd80;

//傳輸連個(gè)數(shù)據(jù)之間的間隔大于1us。

lcd_e=1'b0;

//完成了2的傳輸;

end

state13:

begin

nextstate=state14;

num_count=20'd4;

lcd_d=4'h8;

end

state14:

begin

nextstate=state15;

num_count=20'd12;

lcd_e=1'b1;

end

state15:

begin

nextstate=state16;

num_count=20'd4000;

lcd_e=1'b0;

//完成了8的傳輸;;

end

//采用增量模式(AC地址自動(dòng)加一),數(shù)據(jù)為DB1設(shè)置為1,顯示不移動(dòng)則DB0設(shè)置為0;

//故傳輸控制字為0X06;

state16:

begin

nextstate=state17;

num_count=20'd4;

lcd_d=4'h0;

end

state17:

begin

nextstate=state18;

num_count=20'd12;

lcd_e=1;

end

state18:

begin

nextstate=state19;

num_count=20'd80;

lcd_e=1'b0;

//完成了0的傳輸;

end

state19:

begin

nextstate=state20;

num_count=20'd4;

lcd_d=4'h6;

end

state20:

begin

nextstate=state21;

num_count=20'd12;

lcd_e=1'b0;

end

state21:

begin

nextstate=state22;

num_count=20'd4000;

lcd_e=1'b0;

//完成了6的傳輸;

end

//打開顯示;設(shè)置打開顯示控制字為0X0C,對應(yīng)狀況是

//光標(biāo)不顯示不閃爍,

state22:

begin

nextstate=state23;

num_count=20'd4;

lcd_d=4'h0;

end

state23:

begin

nextstate=state24;

num_count=20'd12;

lcd_e=1'b1;

end

state24:

begin

nextstate=state25;

num_count=20'd4000;

lcd_e=1'b0;

end

//完成了0的傳輸;

state25:

begin

nextstate=state26;

num_count=20'd4;

lcd_d=4'hc;

end

state26:

begin

nextstate=state27;

num_count=20'd12;

lcd_e=1'b1;

end

state27:

begin

nextstate=state28;

num_count=20'd4000;

lcd_e=0;

end

state28:

begin

nextstate=state29;

num_count=20'd2000;//等待1.64ms

end

//至此,完成了lcd的初始化,接下來可以傳送

//顯示數(shù)據(jù)以完成顯示任務(wù)://輸入ddram的地址;從第一行第一個(gè)字開始,故

//輸入的DDRAM地址應(yīng)該為0x80;

state29:

begin

nextstate=state30;

num_count=20'd4;

lcd_d=4'h8;

end

state30:

begin

nextstate=state31;

num_count=20'd12;

lcd_e=1'b1;

end

state31:

begin

nextstate=state32;

num_count=20'd4000;

lcd_e=1'b0;

end

state32:

begin

nextstate=state33;

num_count=20'd4;

lcd_d=4'h0;

end

state33:

begin

nextstate=state34;

num_count=20'd12;

lcd_e=1'b1;

end

state34:

begin

nextstate=state35;

num_count=20'd4000;

lcd_e=1'b0;

end

//開始正式工作,發(fā)送字符OK。

state35:

begin

nextstate=state36;

num_count=20'd4;

lcd_rs=1'b1;

//開始傳送數(shù)據(jù)

lcd_d=4'h4;

end

state36:

begin

nextstate=state37;

num_count=20'd12;

lcd_e=1;

end

state37:

begin

nextstate=state38;

num_count=20'd80;

lcd_e=1'b0;

//傳送了4'h4;

end

state38:

begin

nextstate=state39;

num_count=20'd4;

lcd_d=4'hf;

end

state39:

begin

nextstate=state40;

num_count=20'd12;

lcd_e=1'b1;

end

state40:

begin

nextstate=state41;

num_count=20'd2000;

lcd_e=1'b0;

//傳送了編碼4‘hf

end

//傳送字符k的編碼:0x4b;

state41:

begin

nextstate=state42;

num_count=20'd4;

lcd_rs=1'b1;

lcd_d=4'h4;

end

state42:

begin

nextstate=state43;

num_count=20'd12;

lcd_e=1'b1;

end

state43:

begin

nextstate=state44;

num_count=20'd80;

lcd_e=1'b0;

end

state44:

begin

nextstate=state45;

num_count=20'd4;

lcd_d=4'hb;

end

state45:

begin

nextstate=state46;

num_count=20'd12;

lcd_e=1'b1;

end

state46:

begin

nextstate=state47;

num_count=20'd2000;

lcd_e=1'b0;

end

//字符!的編碼0x21

state47:

begin

nextstate=state48;

num_count=20'd4;

lcd_d=4'h2;

lcd_rs=1'b1;

end

state48:

begin

nextstate=state49;

num_count=20'd12;

lcd_e=1'b1;

end

state49:

begin

nextstate=state50;

num_count=20'd80;

lcd_e=1'b0;

end

state50:

begin

nextstate=state51;

num_count=20'd4;

lcd_d=4'h1;

end

state51:

begin

nextstate=state52;

num_count=20'd12;

lcd_e=1'b1;

end

state52:

begin

nextstate=state53;

num_count=20'd4000;

lcd_e=1'b0;

end

//至此。已經(jīng)成功地完成了字符OK,在液晶顯示屏上的顯示;;

//接下來,進(jìn)入等待狀態(tài)

state53:

begin

nextstate=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論