FPGA驱动LCD(完整版).doc
上传人:天马****23 上传时间:2024-09-10 格式:DOC 页数:9 大小:3.8MB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

FPGA驱动LCD(完整版).doc

FPGA驱动LCD(完整版).doc

预览

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

10 金币

下载此文档

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

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

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

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

FPGA驱动LCD(完整版)(文档可以直接使用,也可根据实际需要修改使用,可编辑欢迎下载)作者:LuminQQ:474062042(有改进的地方,希望大家告诉我一下)于成都理工大学说明:该驱动只是用来练习状态机,所以没有追求高速度,时钟是分频到毫秒级处理实际效果:显示我的英文名Lumin引脚定义:大家需要关心的是三个控制线RS,RW,EN数据总线DATA驱动的顶层模块及其端口定义设计思路:1.该设计使用了一个状态机,实现LCD1602显示字符功能2.时序图关于r/w:因为液晶只需要写不需要读,所以RW=0,表示液晶一直处于写状态写命令时:首先RS=0,E=0同时数据出线在总线上面,延时一段时间,等待数据稳定然后E一个上升沿并保持一段时间,然后拉低为下一次写准备写数据时:首先RS=1,E=0同时数据出线在总线上面,延时一段时间,等待数据稳定然后E一个上升沿并保持一段时间,然后拉低为下一次写准备3.状态机设计状态机设计方法我在很多书上看了状态机什么经典的三段式,两段式状态机写法。实践来都不好用,可能自己学的不好(知道问题的给我说下)。后面自己发明了一种,现在写了好几驱动,都正确的。模板下面。TYPESTATEIS(s0,s1,s2,s3);--举例只用4个状态SIGNALCurrent_State:STATE:=s0;--模板不要NEXT_STATA,我实践来要NEXT_STATA的不好用SIGNALs0_delay:INTEGERRANGE1TO1000;--有多少状态就多少个状态延时信号,如果该状态不延时,最后不要就SIGNALs1_delay:INTEGERRANGE1TO1000;SIGNALs2_delay:INTEGERRANGE1TO1000;SIGNALs3_delay:INTEGERRANGE1TO1000;process(Temp_1ms,Current_State)beginif(rising_edge(Temp_1ms))thencaseCurrent_Statewhens0=>Lcd_rs<='0';Lcd_en<='0';data<=x"00"if(s0_delay=100)thenCurrent_State<=s1;--靠颜色的这段话来控制每个状态延时多久怎么走。s0_delay<=0;elses0_delay<=s0_delay+1;endif;endcase;endif;endprocess;4.状态机设计S0S1S10S4S2S5S9S3S6S8S7S12S11状态机思想就是:先保持初始态100MSS2为E=1保持5mss3为E=0保持5MS,然后判断下一状态是什么,每个状态执行以后又回到S2(就是不同的数据分不同状态出现在总线上,由S2,S3状态写到液晶里),直到S12一直停在那SO:设置初始状态RS=0,E=0延时100Ms,等待液晶稳定。(很多液晶初始时都要稳定)S1:RS=0写命令,同时数据OX38(设置液晶为16*2的命令)出现在总线上,稳定5MSS2:E由低到高,高电平保持5MSS3:E=0,保持5MS,为下一次写准备设置一个中间变量S_count当S_count=0下一状态为s4;S_count=1下一状态为s5;S_count=2下一状态为s6;S_count=3下一状态为s7;S_count=4下一状态为s8;S_count=5下一状态为s9;S_count=6下一状态为s10;S_count=7下一状态为s11;S_count=8下一状态为s12;S4:RS=0写命令,同时数据OX0c(开显示)出现在总线上,稳定5MS,然后回到S2S5:RS=0写命令,同时数据OX06(写一个数据后指针加一)出现在总线上,稳定5MS,然后回到S2S6:RS=0写命令,同时数据OX01(清屏)出现在总线上,稳定5MS,然后回到S2S7:RS=0写命令,同时数据OX4c(显示L)出现在总线上,稳定5MS,然后回到S2S8:RS=1写数据,同时数据OX75(显示u)出现在总线上,稳定5MS,然后回到S2S9:RS=1写数据,同时数据OX6d(显示m)出现在总线上,稳定5MS,然后回到S2S10:RS=1写数据,同时数据OX69(显示i)出现在总线上,稳定5MS,然后回到S2S11:RS=1写数据,同时数据OX6e(显示n)出现在总线上,稳定5MS,然后回到S2S12:一直停在这儿付程序libraryIEEE;ent