基于FPGA的广告显示屏的设计Word文档格式.doc
- 文档编号:6995963
- 上传时间:2023-05-07
- 格式:DOC
- 页数:14
- 大小:515.50KB
基于FPGA的广告显示屏的设计Word文档格式.doc
《基于FPGA的广告显示屏的设计Word文档格式.doc》由会员分享,可在线阅读,更多相关《基于FPGA的广告显示屏的设计Word文档格式.doc(14页珍藏版)》请在冰点文库上搜索。
2.2计时调时信号流程图
通过实时查询来判断月,日,时,分,秒。
按键可以随时调整显示的时间。
五测试结果
在EDA实验箱上运行,结果显示如下,达到设计预期目的。
六问题分析
对功能寄存器的正确操作是操作LCD12864的重要工作组成部分。
最初上电实验时,液晶无任何显示的主要原因就是没有正确操作寄存器。
七总结
经过一学期的紧张学习,我们基本掌握了电子设计的设计流程,熟练使用keil软件,protues软件,QuartusII软件,能通过实践来实现一些小题目,达到了预期的学习目标。
借此机会向一直兢兢业业工作的张老师表示感谢,向一直共同进取,相互学习的同学表示感谢。
在今后的日子里,我们会更加努力学习,积极进取,努力在硬件设计方面做出些成绩。
参考文献
[1]夏宇闻.Verilog数字系统设计[M].北京:
北京航空航天大学出版社.2008.
[2]吴厚航.深入浅出玩转FPGA[M].北京:
北京航空航天大学出版社.2010.
[3]FPGA/CPLD组学小组.
[4]EDN博客.http:
//
附程序代码:
时钟分频程序模块
moduledivclk_clk1(CLK_LCD,rst,clk1);
inputCLK_LCD,rst;
outputclk1;
regclk1;
reg[15:
0]cnt2;
always@(posedgeCLK_LCDornegedgerst)
begin
if(!
rst)//rst按键按下为低电平
begin
cnt2<
=16'
b0;
clk1<
=0;
end
elseif(cnt2==49)
=~clk1;
else
cnt2<
=cnt2+1'
b1;
end
endmodule
moduledivclk_lcd(clk0,rst,clk_lcd);
inputclk0,rst;
outputclk_lcd;
regCLK_LCD;
//LCD时钟信号
reg[23:
0]cnt1;
always@(posedgeclk0ornegedgerst)
begin
if(!
rst)
begin
cnt1<
=24'
CLK_LCD<
end
elseif(cnt1==199999)
=~CLK_LCD;
else
cnt1<
=cnt1+1'
endmodule
计时调时模块
modulelcd_time_key(clk0,clk1,rst,key4,key3,
key2,key1,key0,month,day,hour,min,sec);
inputclk0,clk1,rst,key4,key3,key2,key1,key0;
outputmonth[7:
4],month[3:
0],day[7:
4],
day[3:
0],hour[7:
4],hour[3:
0],
min[7:
4],min[3:
0],sec[7:
4],sec[3:
0];
reg[7:
0]hour,min,sec;
reg[7:
0]month,day;
wireseccar,mincar;
always@(posedgetemp_sec)
if(sec==8'
h59)
begin
sec<
end
elseif(sec[3:
0]==9)
sec[3:
0]<
sec[7:
4]<
=sec[7:
4]+1;
else
sec[3:
=sec[3:
0]+1;
end
assignseccar=(sec==8'
h59)?
1:
0;
always@(negedgetemp_min)
if(min==8'
min<
elseif(min[3:
min[3:
min[7:
=min[7:
min[3:
=min[3:
assignmincar=(min==8'
always@(negedgetemp_hour)
if(hour==8'
h23)
hour<
elseif(hour[3:
hour[3:
hour[7:
=hour[7:
elsehour[3:
=hour[3:
always@(negedgetemp_month)
if(month==8'
h12)
month<
elseif(month[3:
month[3:
month[7:
=month[7:
elsemonth[3:
=month[3:
always@(negedgetemp_day)
if(day==8'
h31)
day<
elseif(day[3:
day[3:
day[7:
=day[7:
elseday[3:
=day[3:
reg[4:
0]key_rst;
always@(posedgeclk0ornegedgerst)
if(!
rst)key_rst<
=5'
b11111;
elsekey_rst<
={key4,key3,key2,key1,key0};
0]key_rst_r;
always@(posedgeclk0ornegedgerst)
if(!
rst)key_rst_r<
elsekey_rst_r<
=key_rst;
wire[4:
0]key_an=key_rst_r&
(~key_rst);
reg[19:
0]cnt;
always@(posedgeclk0ornegedgerst)
rst)cnt<
=20'
d0;
elseif(key_an)cnt<
=20'
elsecnt<
=cnt+1'
0]low_sw;
always@(posedgeclk0ornegedgerst)
rst)low_sw<
elseif(cnt==20'
hfffff)
low_sw<
reg[4:
0]low_sw_r;
if(!
rst)low_sw_r<
elselow_sw_r<
=low_sw;
0]sw_ctrl=
low_sw_r[4:
0]&
(~low_sw[4:
0]);
wiretemp_sec,temp_min,
temp_hour,temp_month,tri_day;
assigntemp_sec=sw_ctrl[0]|clk1;
assigntemp_min=sw_ctrl[1]|seccar;
assigntemp_hour=sw_ctrl[2]|mincar;
assigntemp_month=sw_ctrl[3];
assigntemp_day=sw_ctrl[4];
液晶初始化模块:
reg [8:
0]state;
parameter
IDLE=9'
b00000000, CLEAR =9'
b00000001,
SETFUNCTION =9'
b00000010,
SWITCHMODE =9'
b00000100,
SETMODE=9'
b00001000, SHIFT =9'
b00010000, SETDDRAM=9'
b00100000,
WRITERAM=9'
b01000000, STOP =9'
b10000000;
regflag;
reg[6:
0]char_cnt;
0]data_disp;
assignRW=1'
ssignEN=(flag==1)?
CLK_LCD:
1'
always@(posedgeCLK_LCDornegedgerst) begin
if(!
rst)
RS<
=1'
elseif(state==WRITERAM)
else
always@(posedgeCLK_LCDornegedgerst) //StateMachine
begin
state <
=IDLE;
DATA <
=8'
bzzzzzzzz;
char_cnt<
flag<
end
case(state)
IDLE:
begin flag<
state<
=CLEAR;
DATA<
=8'
CLEAR:
begin state<
=SETFUNCTION;
DATA<
b00000001;
end
SETFUNCTION:
begin
state<
=SWITCHMODE;
b00110000;
SWITCHMODE:
tate<
=SETMODE;
DATA<
b00001100;
end
SETMODE:
begin state<
=SETDDRAM;
DATA<
b00000110;
begin state<
b0001_0000;
SETDDRAM:
=WRITERAM;
if(char_cnt==0) begin
b1000_0000;
end
elseif(char_cnt==16)
b1001_0000;
end
elseif(char_cnt==32) begin
DATA<
b1000_1000;
elseif(char_cnt==48)
DATA<
b1001_1000;
end
WRITERAM:
begin
if(char_cnt<
=15)
char_cnt<
=char_cnt+1'
DATA<
=data_disp;
if(char_cnt==15) state<
else
state<
elseif(char_cnt>
=16&
&
char_cnt<
=31) begin
if(char_cnt==31) state<
elseif(char_cnt>
=32&
=47) begin
char_cnt<
if(char_cnt==47) state<
else state<
=48&
=64) begin
DATA<
if(char_cnt==64) begin
state<
=STOP;
flag<
end
STOP:
flag<
state<
end
default:
state<
endcase
显示模块:
always@(char_cnt)
case(char_cnt)
7'
d0:
data_disp=8'
ha2;
d1:
ha0;
d2:
d3:
d4:
hbb;
d5:
hb6;
d6:
hd3;
d7:
had;
d8:
hb9;
d9:
he2;
d10:
hc1;
d11:
data_disp=8'
hd9;
7'
d12:
d13:
d14:
d15:
d16:
d17:
d18:
hd6;
d19:
hd8;
d20:
hc7;
d21:
hec;
d22:
d23:
hca;
d24:
hb5;
d25:
he7;
d26:
hb4;
d27:
hf3;
d28:
hd1;
d29:
ha7;
d30:
d31:
d32:
d33:
d34:
d35:
d36:
d37:
d38:
d39:
d40:
d41:
d42:
d4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 广告 显示屏 设计