PLD与数字系统设计实验报告Word文档下载推荐.docx

上传人:b****6 文档编号:18749104 上传时间:2023-01-01 格式:DOCX 页数:22 大小:454.08KB
下载 相关 举报
PLD与数字系统设计实验报告Word文档下载推荐.docx_第1页
第1页 / 共22页
PLD与数字系统设计实验报告Word文档下载推荐.docx_第2页
第2页 / 共22页
PLD与数字系统设计实验报告Word文档下载推荐.docx_第3页
第3页 / 共22页
PLD与数字系统设计实验报告Word文档下载推荐.docx_第4页
第4页 / 共22页
PLD与数字系统设计实验报告Word文档下载推荐.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

PLD与数字系统设计实验报告Word文档下载推荐.docx

《PLD与数字系统设计实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《PLD与数字系统设计实验报告Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。

PLD与数字系统设计实验报告Word文档下载推荐.docx

显示点在64*64液晶屏上的位置由行号(line,0~63)与列号(column,0~63)确定。

512*8bitsRAM中某个存储单元的地址由页地址(Xpage,0~7)和列地址(Yaddress,0~63)确定。

每个存储单元存储8个液晶点的显示信息。

为了使液晶点位置信息与存储地址的对应关系更直观关,将64*64液晶屏从上至下8等分为8个显示块,每块包括8行*64列个点阵。

每列中的8行点阵信息构成一个8bits二进制数,存储在一个存储单元中。

(需要注意:

二进制的高低有效位顺序与行号对应关系因不同商家而不同)存放一个显示块的RAM区称为存储页。

即64*64液晶屏的点阵信息存储在8个存储页中,每页64个字节,每个字节存储一列(8行)点阵信息。

因此存储单元地址包括页地址(Xpage,0~7)和列地址(Yaddress,0~63)。

例如点亮128*64的屏中(50,30)位置上的液晶点,因列地址30小于64,该点在左半屏第29列,所以CS1有效;

行地址50除以8取整得6,取余得2,该点在RAM中页地址为6,在字节中的序号为2;

所以将二进制数据11111101写入Xpage=6,Yaddress=29的存储单元中即点亮(50,30)上的液晶点。

3实验仪器

1.XUP(FPGA:

spartan3S400AN)实验开发板

2.安装ISE软件的电脑

4实验主要操作步骤

4.1实验设计思想

实验采用分层次设计的方法,用硬件描述语言分别实现数字键盘数据的发送接收功能及液晶显示的功能模块,具体方法如下:

1.通过ISE开发工具,新建3个模块,分别为数字键盘模块,LCD12864液晶显示模块和LCD字库模块。

 

2.数字键盘模块:

以一定频率按行扫描数字键盘,检测该行有无输入,若有则判断输入是什么,并传送相应信息给LCD模块;

若无则继续扫描下一行。

如此反复。

3.液晶显示模块:

根据LCD显示模块的原理,将其控制分为指令控制部分和显示控制部分。

其中使用状态机和分频器完成指令控制,每一个分频时钟周期到来时,执行状态机中的一个状态,即初始化命令或读写数据命令。

4.LCD字库模块:

因为实验板上的12864LCD是无字库的,故利用字模软件将要用到的字模数据保存在模块中。

4.2各模块设计实现

在理解数字键盘和LCD液晶显示的使用方法后,使用Verilog语言描述出各部分要实现的功能,完成实验的要求。

4.2.1数字键盘模块的设计

下面是该模块功能实现的部分Verilog源程序:

always@(posedgeclkornegedgerst_s)//产生周期为1ms的控制信号,占空时间为20ns

begin

if(!

rst_s)

begin

CountA<

=16'

d0;

ENA<

=1'

b0;

end

else

if(CountA==T1MS)

begin

CountA<

ENA<

b1;

end

else

=CountA+1'

end

always@(posedgeclkornegedgerst_s)//数字键盘扫描,每50ms扫描一行

CountB<

=6'

Key_Row<

=4'

b0111;

ENB<

if(CountB==6'

d49&

&

ENA)

CountB<

Key_Row<

={Key_Row[0],Key_Row[3:

1]};

ENB<

elseif(ENA)

=CountB+1'

end

always@(posedgeclk)//判断每行是否有数据输入,是什么数据

if(Key_Row==4'

b0111&

ENB)

if(!

Key_Column[2])

beginw_flag<

=1;

key_get<

=1;

end

elseif(!

Key_Column[1])

=2;

end

Key_Column[0])

=3;

end

else

w_flag<

=0;

elseif(Key_Row==4'

b1011&

=4;

=5;

end

=6;

b1101&

=7;

=8;

=9;

b1110&

=10;

end//10代表“*”

=0;

=11;

end//11代表“#”else

4.2.2显示模块的设计

always@(posedgeclk_lcd)

if(!

rst_s)

state<

=IDLE;

data<

=8'

hzz;

char_cnt<

h00;

flag<

=1'

cle_cnt<

=9'

mi_cnt<

=6'

case(state)

0:

//初始化FunctionSet

begin

state<

=state+1;

data<

h30;

rst_lcd<

end

1:

h3f;

rst_lcd<

2:

end

3:

//初始化DisplayON/OFFControl

h0c;

4:

//初始化DisplayClear

h01;

5:

//初始化EntryModeSet

h06;

6:

//页初始化

if((char_cnt==0)||(char_cnt==128))

data<

hb8;

elseif((char_cnt==64)||(char_cnt==136))

hb9;

elseif((char_cnt==144)||(char_cnt==176))data<

hbc;

elseif((char_cnt==160)||(char_cnt==216))data<

hbd;

7:

//列初始化

h40;

8:

//写数据给LCD

beginif((char_cnt>

=0&

char_cnt<

=127)||(char_cnt>

=144&

=175)||(char_cnt>

=176&

=255))

begin

cs1<

cs2<

if((char_cnt>

=63)||(char_cnt>

=159)||(char_cnt>

=215))

begin

char_cnt<

=char_cnt+1'

data<

=data_disp;

if((char_cnt==63)||(char_cnt==159)||(char_cnt==215))

state<

=6;

else

=8;

end

elseif((char_cnt>

=64&

=160&

=216&

if(char_cnt==127)

elseif((char_cnt==175)||(char_cnt==255))

=STOP1;

end

elseif(char_cnt>

=128&

=143)

if(char_cnt>

=135)

if(char_cnt==135)

end

elseif(char_cnt>

=136&

if(char_cnt==143)

=9;

end

9:

//判断数字键盘收到的第一个密码是否正确

if(w_flag==0)

state<

data<

else

if((di_mi==0)&

(pw0==key_get))

state<

=13;

else

state<

=176;

end

10:

//判断数字键盘收到的第二个密码是否正确begin

if(w_flag==0||key_get==pw0)

=10;

if((di_mi==1)&

(pw1==key_get))

11:

//判断数字键盘收到的第三个密码是否正确begin

if(w_flag==0||key_get==pw1)

=11;

else

if((di_mi==2)&

(pw2==key_get))state<

else

char_cnt<

12:

//判断数字键盘收到的第四个密码是否正确begin

if(w_flag==0||key_get==pw2)

=12;

if((di_mi==3)&

(pw3==key_get))state<

13:

//显示数字页初始化

if((mi_cnt==0)||(mi_cnt==16)||(mi_cnt==32)||(mi_cnt==48))

elseif((mi_cnt==8)||(mi_cnt==24)||(mi_cnt==40)||(mi_cnt==56))

14:

//显示数字列初始化

if((mi_cnt==0)||(mi_cnt==8))

h50;

elseif((mi_cnt==16)||(mi_cnt==24))

h58;

elseif((mi_cnt==32)||(mi_cnt==40))

h60;

elseif((mi_cnt==48)||(mi_cnt==56))

h68;

15:

//写数字数据给LCD

cs1<

cs2<

if(mi_cnt>

mi_cnt<

=7)

mi_cnt<

=mi_cnt+1'

=mi_disp;

if(mi_cnt==7)

=15;

elseif(mi_cnt>

=8&

=15)

if(mi_cnt==15)

di_mi<

=2'

b01;

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

当前位置:首页 > 人文社科 > 文化宗教

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

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