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. MVVM框架avalon在兼容旧式IE

    迷你MVVM框架avalon在兼容旧式IE做的努力 当前标签: avalon 共3页: 1 2 3 下一页  迷你MVVM框架avalon在兼容旧式IE做的努力 司徒正美 2014-03-13 11: ...

  2. 对"一维最大子数组和"问题的思考

    对"一维最大子数组和"问题的思考(homework-01) 一维最大子数组和问题,即给定一个数组,在它所有的连续子数组的和中,求最大的那个和.“最大子数组和”是一个很好的IT面试考 ...

  3. ContentResolver + SqliteOpenHelper + ContentProvider 理解

    惭愧,现在才接触到ContentResolver的用法 这个类主要是Android用来实现应用程序之间数据共享的 一个应用程序可以将自己的数据完全暴露出去,外界更本看不到,也不用看到这个应用程序暴露的 ...

  4. 用TableView做的新闻客户端展示页面

    用TableView做的新闻客户端展示页面 //  MyTableViewImageCell.m //  SildToDo // //  Created by WildCat on 13-8-18. ...

  5. JS的基本概念

    JS的基本概念 任何语言的核心都必然会描述这门语言最基本的工作原理.而描述的内容通常都要涉及这门语言的语法,操作符,数据类型,内置功能等用于构建复杂解决方案的概念.Ecma-262通过叫做EcmaSc ...

  6. Redis系统学习 一、基础知识

    1.数据库 select 1  select 0 2.命令.关键字和值 redis不仅仅是一种简单的关键字-值型存储,从其核心概念来看,Redsi的5种数据结构中的每一个都至少有一个关键字和一个值.在 ...

  7. 继承control的自定义TextBox

    继承control的自定义TextBox 下面来介绍一下本人写的一个自定义的textbox,首先说一下写这个控件遇到的几个难点:第一.关联输入法:第二.画字符串和焦点线 先随便上两张效果图吧: 下面这 ...

  8. Cocoa框架

    Cocoa提供了用于存放数字和字符串的通用数据类型的实际的类.非正式地可以将这些称为值类或基本值类. Cocoa框架本身封装了三个独立的框架:Foundation基本框架.AppKit框架和核心数据框 ...

  9. Machine Learning/Random Projection

    这次突然打算写点dimension reduction的东西, 虽然可以从PCA, manifold learning之类的东西开始, 但很难用那些东西说出好玩的东西. 这次选择的是一个不太出名但很有 ...

  10. network重启失败原因

    /etc/sysconfig/network-scripts/ifcfg-eth0   DEVICE='eth0'  eth0后面千万不能加空格之类的