预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

字符液晶显示的FPGA/CPLD实现 一、设计简要说明: 用FPGA/CPLD实现HS162字符液晶显示,具体内容可以参考教材《数字系统设计与VerilogHDL》(第三版)P269相关内容。 HS162可以显示两行共32个字符(一行可显示16个字符)。每个字符由5×7、5×8或5×11的一组像素点阵排列构成,每个字符间有一个点宽的间隔,每行间也有一行的间隔。 HS162原理图如下:D0-D7为传给液晶的数据(可能为显示数字或控制液晶指令),RS用于控制将D0-D7的数据写入指令寄存器还是数据寄存器,RW为读写控制信号,E为使能信号。电位器调节液晶的对比度,以到最佳显示效果。 图1CPLD与字符液晶HS162的接口典型电路 HS162液晶控制指令由表1给出: 表1液晶控制指令表 二、源代码及说明 modulelcd_HS162(clk,rst,lcd_e,lcd_rw,lcd_rs,data); inputclk,rst; outputlcd_e,lcd_rw,lcd_rs;reglcd_rw,lcd_rs; output[7:0]data; reg[7:0]data;reg[10:0]state;reg[6:0]count; reg[255:0]data_in_buf; regflag,clk4Hz; reg[23:0]cnt;reg[5:0]disp_count; parameterIDLE =8'b00000000; parameterCLEAR =8'b00000001; //清屏 parameterSETCGRAM =8'b00000010; //设置CGRAM parameterSETFUNCTION=8'b00000100; //工作方式设置1:8/1:4位数据接口;两行/一行显示;5×10/5×7点阵 parameterSWITCHMODE =8'b00001000; //显示状态设置,显示开/关;光标开/关;闪烁开/关 parameterSETMODE =8'b00010000; //输入方式设置,读写数据后ram地址增/减1;画面动/不动 parameterRETURNCURSOR =8'b00100000; //归home位 parameterSHIFT =8'b01000000; parameterWRITERAM =8'b10000000; //写RAM parametercur_inc =1; parametercur_dec =0; parametercur_shift =1; parametercur_noshift =0; parameteropen_display =1; parameteropen_cur =0; parameterblank_cur =0; parametershift_display =1; parametershift_cur =0; parameterright_shift =1; parameterleft_shift =0; parameterdatawidth8 =1; parameterdatawidth4 =0; parametertwoline =1; parameteroneline =0; parameterfont5x10 =1; parameterfont5x7 =0; parameterdata_in="OneWorldOneDream"; /*定义液晶上显示的字符内容,注意空格也算为字符,总共两行32个字符;只需更改双引号内的字符即可实现显示字符的改变*/ always@(posedgeclk) //由50MHz时钟分频得到4Hz时钟 begin if(cnt==23'h5F5E10) begincnt<=0;clk4Hz<=~clk4Hz; end elsecnt<=cnt+1; end assignlcd_e=clk4Hz; always@(posedgeclk4Hzornegedgerst) if(!rst)begin state<=CLEAR;flag<=0; data_in_buf<=data_in;disp_count<=6'b0; end elsebegin case(state) IDLE: begin state<=IDLE;end CLEAR: begin lcd_rs<=0; lcd_rw<=0;data<=8'b0000_0001; state<=SETCGRAM;end SETCGRAM: begin lcd_rs<=0;lcd_rw<=0;data<=8'b10000000; state<=SETFUNCTION; end S