FPGA实验三液晶屏的显示设计Word格式.docx

上传人:b****5 文档编号:20843106 上传时间:2023-01-26 格式:DOCX 页数:21 大小:622.60KB
下载 相关 举报
FPGA实验三液晶屏的显示设计Word格式.docx_第1页
第1页 / 共21页
FPGA实验三液晶屏的显示设计Word格式.docx_第2页
第2页 / 共21页
FPGA实验三液晶屏的显示设计Word格式.docx_第3页
第3页 / 共21页
FPGA实验三液晶屏的显示设计Word格式.docx_第4页
第4页 / 共21页
FPGA实验三液晶屏的显示设计Word格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

FPGA实验三液晶屏的显示设计Word格式.docx

《FPGA实验三液晶屏的显示设计Word格式.docx》由会员分享,可在线阅读,更多相关《FPGA实验三液晶屏的显示设计Word格式.docx(21页珍藏版)》请在冰豆网上搜索。

FPGA实验三液晶屏的显示设计Word格式.docx

但是,FPGA的输出电平是通过LCD来识别是有效的低电平还是高电平。

LCD控制器接收5VTTL信号电平,FPGA输出的LCMOS以满足5VTTL电压要求。

数据线上的390欧串联电阻,当LCD驱动一个逻辑高电平时,其用来防止了FPGA和SrtataFlsahI/O管脚的超负载。

当LCD_RW为高时,LCD驱动数据线。

在绝大多数应用中,LCD作为只读外围设备,几乎没有从显示器读数据。

四、操作方法和实验步骤

对于程序的各个步骤,如新建项目、新建VerilogHDL、新建.ucf文件、Synthesize、ImplementDesign、GenerateProgrammingFile、ConfigureTargetDevice等等,在实验一中已经展示过,每一次实验的基本操作步骤都是差不多的,故这里不再重复阐述。

本次实验总共需要做三份程序并观察现象:

1)例程

2)设计按键拨动时显示小时、分钟和秒,中间分别空一格。

3)按键拨动开始显示,10秒钟显示结束,结束时LCD上显示ABCDEF,同时八只LED灯亮。

五、实验源代码和现象

UCF文件如下:

NET"

CLK_50MHZ"

LOC="

C9"

;

LCD_D<

0>

"

R15"

1>

R16"

2>

P17"

3>

M15"

LCD_E"

M18"

LCD_RS"

L18"

LCD_RW"

L17"

源代码如下:

modulelcd_write_number_test

inputCLK_50MHZ,

outputLCD_E,

outputLCD_RS,

outputLCD_RW,

output[3:

0]LCD_D

);

wireif_ready;

regif_write;

reg[31:

0]if_data;

reg[1:

0]state;

0]cntr;

parameterIDLE=2'

b00,

IF_WRITE_1=2'

b01,

SET_IF_WRITE_0=2'

b10,

WAIT=2'

b11;

LK_50MHZ(CLK_50MHZ),

.LCD_E(LCD_E),

.LCD_RS(LCD_RS),

.LCD_RW(LCD_RW),

.LCD_D(LCD_D),

.if_data(if_data),

.if_write(if_write),

.if_ready(if_ready)

initialbegin

if_data<

=32'

habba0123;

state<

=IDLE;

if_write<

=1'

b0;

cntr<

end

always@(posedgeCLK_50MHZ)begin

case(state)

IDLE:

if(if_ready)begin

=if_data+1'

b1;

=IF_WRITE_1;

IF_WRITE_1:

lk(CLK_50MHZ),

.rst(1'

b0),

.lcd_e(LCD_E),

.lcd_rw(LCD_RW),

.lcd_rs(LCD_RS),

.lcd_d(LCD_D),

.if_data(disp_data),

.if_rs(disp_rs),

.if_delay(disp_delay),

.if_write(disp_write),

.if_ready(disp_ready),

.if_8bit(disp_b8)

parameterNB_CHARS=8'

d12;

parameterSTART=2'

WAIT_WRITE_0=2'

WRITE_1=2'

WAIT_WRITE_1=2'

=2'

b00;

char<

=8'

init_done<

if_ready_r<

shift_cntr<

=5'

if(init_done&

&

char>

8'

d16)begin

if(disp_ready)

if(if_write)begin

=4'

d8;

W1(SW1),

.CLK_50MHZ(CLK_50MHZ),

initial

begin

h;

always@(posedgeCLK_50MHZ)

if(if_ready)

if(if_data[31:

0]==32'

h)if_data<

h0;

elseif(if_data[27:

0]==28'

h9059059)if_data<

=if_data+32'

h6fa6fa7;

elseif(if_data[19:

0]==20'

h59059)if_data<

hfa6fa7;

elseif(if_data[15:

0]==16'

h9059)if_data<

h6fa7;

elseif(if_data[7:

0]==8'

h59)if_data<

hfa7;

elseif(if_data[3:

0]==4'

h9)if_data<

h7;

elseif_data<

WAIT_WRITE_0=2'

WRITE_1=2'

WAIT_WRITE_1=2'

d16)

if(disp_ready)

if_ready_r<

if(if_write)

begin

char<

.if_ready(if_ready),

.LED0(LED0),

.LED1(LED1),

.LED2(LED2),

.LED3(LED3),

.LED4(LED4),

.LED5(LED5),

.LED6(LED6),

.LED7(LED7)

cnt_state<

cnt<

=29'

light<

//resetthedisplay

end

end

elseif(char<

case(state)

START:

if(disp_ready)begin

disp_write<

=WAIT_WRITE_0;

WAIT_WRITE_0:

=WRITE_1;

WRITE_1:

WAIT_WRITE_1:

=START;

=char+8'

endcase//case(state)

end//else:

!

if(!

running)

end//always@(posedgeCLK_50MHZ)

always@(posedgeCLK_50MHZ)

if(!

SW1)

cnt_state<

=1'

elseif(cnt==29'

h1dcd6500)cnt_state<

elsecnt<

=cnt+1'

always@(negedgeCLK_50MHZ)begin

//thesenextstepsinitializetheLCDdisplay:

case(char)

0:

disp_b8<

disp_data<

h30;

disp_delay<

d;

disp_rs<

1:

disp_data<

2:

d1000000;

3:

h20;

d20000;

4:

h28;

5:

h06;

6:

h0C;

7:

h01;

d9;

8:

//thisstateprovidesanentrypointtoresetthedisplayandthen

//goontothedefaultstatethatwritesthenumber

number<

=if_data;

default:

//statemachinetoprinta32-bitnumberout

if(SW1&

(!

cnt_state))

if(disp_ready&

state==START)

if(shift_cntr<

5'

d8)

disp_rs<

disp_delay<

if((shift_cntr==5'

d2)||(shift_cntr==5'

d5))

else

if(number[31:

28]<

4'

b1010)

=number[31:

28]+8'

h37;

number<

=number<

<

4;

shift_cntr<

=shift_cntr+5'

light<

elseif(SW1&

cnt_state)

elseif(shift_cntr==5'

d0)

h41;

d1)

h42;

d3)

h43;

d4)

h44;

d6)

h45;

d7)

h46;

else

endcase//case(char)

end//always@(negedgeCLK_50MHZ)

assignLED0=light;

assignLED1=light;

assignLED2=light;

assignLED3=light;

assignLED4=light;

assignLED5=light;

assignLED6=light;

assignLED7=light;

endmodule

`timescale1ns/1ps

modulelcd_display

(inputclk,

inputrst,

outputlcd_e,

outputlcd_rw,

outputlcd_rs,

0]lcd_d,

input[7:

0]if_data,

inputif_rs,

input[31:

0]if_delay,

inputif_write,

outputif_ready,

inputif_8bit);

reg[2:

reglcdr_e;

reg[3:

0]lcdr_d;

0]wait_cntr;

regready;

reginit_done;

parameterIDLE=3'

b000,

WAIT_PULSE_E_0=3'

b001,

LOAD_LOWER_NIBBLE=3'

b010,

WAIT_PULSE_E_1=3'

b011,

WAIT_COMMAND=3'

b100;

parameterPULSE_E_DLY=32'

parameterINIT_TIME=32'

assignlcd_d=lcdr_d;

assignlcd_rs=if_rs;

assignlcd_rw=1'

assignlcd_e=lcdr_e;

assignif_ready=ready;

ready<

lcdr_e<

always@(posedgeclk)begin

if(rst)begin

endelseif(!

init_done)begin

if(wait_cntr<

INIT_TIME)

wait_cntr<

=wait_cntr+1;

elsebegin

endelsebegin

lcdr_d<

=if_data[7:

4];

//uppernibblefirst

=WAIT_PULSE_E_0;

WAIT_PULSE_E_0:

PULSE_E_DLY)begin

=0;

if(if_8bit)

=LOAD_LOWER_NIBBLE;

=WAIT_COMMAND;

LOAD_LOWER_NIBBLE:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1