module lcd_pdf(
clk,lcd_data,
lcd_rw,lcd_rs,
lcd_en,rst_n
); input clk;
input rst_n;
output reg [:] lcd_data;
output reg lcd_rw; // wirte L
output reg lcd_en;
output reg lcd_rs; //clock 分频
reg [:] cnt;
reg clk_10;
always @(posedge clk or negedge rst_n)
if(!rst_n)begin
cnt <= 'd0;
clk_10 <= 'b0;
end
else begin
if(cnt == )begin
clk_10 =~ clk_10;
cnt <= cnt + 'b1;
end
end //shixu
always @(posedge clk_10 or negedge rst_n)
if(!rst_n)begin
lcd_rw <= 'b0;
lcd_en <= 'b0;
end
else begin
case(cnt)
:begin
lcd_en <= 'b0;
lcd_data <= 'h30;
lcd_rw <= 'b0;
lcd_rs <= 'b0;
end
:begin
lcd_en <= 'b1;
end
:begin
lcd_en <= 'b0;
lcd_data <= 'h0c;
lcd_rw <= 'b0;
lcd_rs <= 'b0;
end
:begin
lcd_en <= 'b1;
end
:begin
lcd_en <= 'b0;
lcd_data <= 'h01;
lcd_rw <= 'b0;
lcd_rs <= 'b0;
end
:begin
lcd_en <= 'b1;
end
:begin
lcd_en <= 'b0;
lcd_data <= 'h80;
lcd_rw <= 'b0;
lcd_rs <= 'b0;
end
:begin
lcd_en <= 'b1;
end
:begin
lcd_en <= 'b0;
lcd_data <= 'h30;//字符0
lcd_rw <= 'b0;
lcd_rs <= 'b1;
end
:begin
lcd_en <= 'b1;
end
default:lcd_en <= 'b0;
endcase
end
endmodule

主要还是按照时序图的时间顺序一步步的写,没有上机验证 而且tb在处理很大的数的时候不知道具体咋弄,留下以后解决

//-----------------------------------2-10号修改------------------------------------------//

module fsm_lcd(
rs,rw,en,data,
clk,rst_n
); input wire clk;
input wire rst_n;
output reg rs; //write_cmd -L or write_data -H
output wire rw; //write - L
output reg en; //写数据或者写指令 高脉冲
output reg [:] data; //上电20ms稳定电源
parameter TIME_20MS = 'd1_0-1;//为了仿真将时间缩短
reg [:] cnt_init;
always @(posedge clk or negedge rst_n)
if(!rst_n)
cnt_init <= 'd0;
else if(cnt_init == TIME_20MS)
cnt_init <= TIME_20MS;
else
cnt_init <= cnt_init + 'b1; //分频 1602为慢速器件,要降低clk频率
parameter DIV_CNT = 'd5 - 1;//加快仿真速度;
reg [:] cnt_div;
reg clk_500hz;
always @(posedge clk or negedge rst_n)
if(!rst_n)begin
cnt_div <= 'd0;
clk_500hz <= 'd0;
end
else if(cnt_div == DIV_CNT)begin
cnt_div <= 'd0;
clk_500hz =~ clk_500hz;
end
else
cnt_div <= cnt_div + 'b1; //fsm
reg [:] state;
reg [:] cnt_ms;
always @(posedge clk_500hz or negedge rst_n)
if(!rst_n)begin
data <= 'd0;
en <= 'd0;
rs <= 'd0;
state <= 'd0;
cnt_ms <= 'd0;
end
else if(cnt_init == TIME_20MS)
case(state)
'd0:begin
data <= 'd0;
en <= 'd0;
rs <= 'd0;
state <= 'd1;
end
'd1:begin
data <= 'h38; //显示模式
en <= 'd0;
rs <= 'd0;
state <= 'd2;
end
'd2:
if(cnt_ms == 'd2)begin
cnt_ms <= 'd0;
en <= 'd1;
rs <= 'd0;
state <= 'd3;
end
else cnt_ms <= cnt_ms + 'b1;
'd3:begin //0x0c 开显示不显示光标
data <= 'h0c;
en <= 'd0;
rs <= 'd0;
state <= 'd4;
end
'd4:begin
en <= 'd1;
state <= 'd5;
end
'd5:
if(cnt_ms == 'd2)begin
cnt_ms <= 'd0;
en <= 'd0;
state <= 'd6;
end
else cnt_ms <= cnt_ms + 'b1;
'd6:begin //0x80 首地址
en <= 'd0;
data <= 'h80;
state <= 'd7;
end
'd7:begin
en <= 'd1;
state <= 'd8;
end
'd8:if(cnt_ms == 3'd2)begin //write_data
cnt_ms <= 'd0;
en <= 'd0;
rs <= 'd1;
data <= 'h1;
state <= 'd9;
end
else cnt_ms <= cnt_ms + 'b1;
'd9:begin
en <= 'd1;
state <= 'd10;
end
'd10:
if(cnt_ms == 'd2)begin
cnt_ms <= 'd0;
en <= 'd0;
state <= 'd0;
end
else cnt_ms <= cnt_ms + 'b1;
default:state <= 'd0;
endcase assign rw = 'b0; endmodule

lcd_1602的更多相关文章

  1. 树莓派的演奏音符3 -- LCD1602显示文章

    LCD1602它是低-cost输出装置.它具有体积小.简单的操作.低功耗优势.因此,在一些DIY 用它来输出关于产品的一些信息. 昨日在使用,尽管平局网上资源,但仍存在一些问题,确处理. 一.LCD1 ...

  2. LCD1602

    一.关于LCD1602: 在编写LCD1602程序前,我们必须了解其手册上一些非常重要的信息,如果这些信息不能理解透彻,编程可能会遇到或多或少的问题,在此先大致归纳几点. 1.管脚: 1602共16个 ...

  3. 单片机学习(十一)I2C总线和AT24C02的使用

    一. 存储器介绍 存储器分类图 1. RAM 这类存储器中的数据都是掉电即失的,例如计算机中的内存就是DRAM,但它们数据读写速度都是要比ROM要快得多的. SRAM:本质是电路,使用电路构成的触发器 ...

随机推荐

  1. jsoneditor显示Json data

    Git开源地址:https://github.com/josdejong/jsoneditor/blob/master/docs/api.md 1.引用JS文件 <!-- jsoneditor ...

  2. W3C的CORS Specification

    W3C的CORS Specification 随着Web开放的程度越来越高,通过浏览器跨域获取资源的需求已经变得非常普遍.在我看来,如果Web API不能针对浏览器提供跨域资源共享的能力,它甚至就不应 ...

  3. tomcat安装和基本配置

    首先,默认电脑上已经配置好java环境. 在http://tomcat.apache.org/这里下载tomcat二进制版本,下载到本地后随意解压在某个盘, 我解压在D:\apache-tomcat- ...

  4. linux 安装svn,并设置钩子来同步更新

    linux安装svn下载 http://subversion.tigris.org/downloads/subversion-1.6.6.tar.gz 和 http://subversion.tigr ...

  5. GEF-whole-upload教程中遇到的问题及解决方案

    最近在学习GEF开发,使用的是GEF-whole-upload这个教程.由于教程当时所使用的版本与本人使用的版本有一些差异,中间出现了不少问题,现在将解决方案分享给大家. 本人使用的Eclipse版本 ...

  6. 鸟哥的LINUX私房菜基础篇第三版 阅读笔记 三 Linux磁盘与文件系统管理

    一.认识EXT2文件系统:     a.硬盘的组成:转动小马达+存储的磁盘+读写的机械臂     b.磁盘的一些概念              扇区为最小的物理储存单位,每个扇区为512B       ...

  7. javascript ajax 脚本跨域调用全解析

    javascript ajax 脚本跨域调用全解析 今天终于有点时间研究了一下javsscript ajax 脚本跨域调用的问题,先在网上随便搜了一下找到一些解决的办法,但是都比较复杂.由是转到jqu ...

  8. python 中文字数统计/分词

    因为想把一段文字分词,所以,需要明确一定的词语关系. 在网上随便下载了一篇中文小说.随便的txt小说,就1mb多.要数数这1mb多的中文到底有多少字,多少分词,这些分词的词性是什么样的. 这里是思路 ...

  9. MapXtrem + Asp.net 地图随窗体改变大小

    在B/S框架下,MapXtreme都是基于图片的,也就是说在客户端显示的地图实际上都是一张图片. 地图控件 <cc1:MapControl ID="/> 在调试模式下,编译后的地 ...

  10. spring启用线程空指针异常

    在service里启用了一个线程,线程的run方法调用了service的方法,报了空指针异常,不知道怎么回事.不过貌似是spring的注入问题,只要在线程里调用了dao或者service里的某些方法, ...