基于AT89S52和ATF1508AS的LED顯示屏的硬件設(shè)計(jì)
本文引用地址:http://2s4d.com/article/171619.htm
reg[13:0] addrout,addr;//addr地址計(jì)數(shù)器
reg[3:0] state;// 狀態(tài)寄存器
reg [2:0] shcnt; //移位脈沖讀數(shù)器
reg CE,OE,sdr,sdb,sck,le,oe1,cs;
reg [8:0] byte;
parameter s0=1'd0,s1=1'd1,s2=1'd2,s3=1'd3, s4=1'd4, s5=1'd5; //狀態(tài)常量
2.2 訪問雙口RAM時(shí)序的產(chǎn)生
IDT7007是具有32KB的雙口RAM電路,與ATF1508AS的連接電路如圖2所示,其中: 為片選信號(hào), 為讀寫控制信號(hào), 為輸出使能信號(hào),A0R-A13R為右端口地址總線,D0R-D7R為右端口數(shù)據(jù)總線,其右端口讀寫時(shí)序如圖4所示。我們采用有限狀態(tài)機(jī)實(shí)現(xiàn),其基本工作原理是:S0狀態(tài)進(jìn)行初始化,S1狀態(tài)時(shí)ATF1508AS首先輸出地址信號(hào)addrout,然后置 相有效,S2狀態(tài)讀取雙口RAM的數(shù)據(jù),并存儲(chǔ)到內(nèi)容寄存器datain中,從而完成雙口RAM的讀數(shù)據(jù)過程。下面給出ATF1508AS讀取雙口RAM數(shù)據(jù)的主要代碼:
always @ (posedge clk)
begin //每個(gè)時(shí)鐘周期,狀態(tài)變化一次
case(state)
s0: begin //初始化狀態(tài)
CE=1'b0; //IDT7007片選
OE=1'b1; //IDT7007讀選通
le=1'b0;
oe1 = 1'b0;
cs = 1'b0;
addr= 14'b0;
SEMR=1'b1; //IDT7007 置1有
RWC = 1'b1; //寫控制 1
hcnt=4'b0000;
counter=4'b0000;
state=s1;
end
s1: begin //輸出RAM地址
CE=1'b0;
addrout=addr;//輸出地址
OE=1'b0;
SEMR=1'b1;
RWC = 1'b1;
shcnt = 3'b000;
state=s2;
end
s2: begin //讀雙口RAM數(shù)據(jù)
oe1=1'b0;
data1 = datain;
state=s3;
end
……(顯示掃描及LED驅(qū)動(dòng)代碼部分)
endcase
end
評(píng)論