关闭

verilog简单驱动LCD1602

标签: veriloglcd1602
184人阅读 评论(0) 收藏 举报
分类:
module lcd1602(                //50Mhz
         clk,rst_n,            //input
         lcd_on,lcd_blon,      //output       
         lcd_en,lcd_rw,lcd_rs,  
         lcd_data
);

input clk,rst_n;
output lcd_on,lcd_rw,lcd_blon;
output reg lcd_rs;
output wire lcd_en;
output reg [7:0] lcd_data;
//-------------------------------------
assign lcd_on=1'b1;
assign lcd_blon=1'b1;
assign lcd_rw=1'b0;     //设置高延迟 就不check busy 无需读取状态
//--------------input clk 50000,000----------------------
//---------------2^16==65536>50000 1ms-------------------
//------------------------分频成1ms---------------------
reg [15:0] cnt;
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n) cnt<=16'b0;
    else if(cnt==50_000) cnt<=16'b0;
    else cnt=cnt+1'b1;
end

reg [3:0] ms;
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n) ms<=1'b0;
    else if(cnt==50_000) ms<=ms+1'b1;
end

//--------------------------------------------------------
//初始化以及显示字符  只初始化一次 一直显示一个字符
parameter lcd1=3'b000;
parameter lcd2=3'b001;
parameter lcd3=3'b011;
parameter lcd4=3'b010;
parameter lcd5=3'b110;
parameter lcd6=3'b111;
parameter lcd7=3'b101;
parameter lcd8=3'b100;

//状态转移
reg [2:0] current_state,next_state;
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n) current_state<=0;
    //一开始设置的条件是  ms==15 但是时钟是clk 所以状态会一直转移 无法正确驱动lcd
    // add cnt==16'h0000   确保状态只转移一次
    else if(ms==15 && cnt==16'h0000)  
         current_state<=next_state; 
end

//判断下一个状态 初始化完了之后一直循环1个状态
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n) next_state<=lcd1;
    else
     case(current_state)
      lcd1:next_state<=lcd2;
      lcd2:next_state<=lcd3;
      lcd3:next_state<=lcd4;
      lcd4:next_state<=lcd5;
      lcd5:next_state<=lcd6;
      lcd6:next_state<=lcd7;
      lcd7:next_state<=lcd8;
      lcd8:next_state<=lcd8;
     endcase
end

//根据状态输出相应数据
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n) 
    begin
        lcd_rs=0;
    end
    else
     case(current_state)
      lcd1:begin lcd_rs=0; lcd_data=8'h38; end
      lcd2:begin lcd_rs=0; lcd_data=8'h08; end
      lcd3:begin lcd_rs=0; lcd_data=8'h01; end
      lcd4:begin lcd_rs=0; lcd_data=8'h06; end
      lcd5:begin lcd_rs=0; lcd_data=8'h0c; end
      lcd6:begin lcd_rs=1; lcd_data="h"; end       //cs
      lcd7:begin lcd_rs=1; lcd_data="a"; end       //show
      lcd8:begin lcd_rs=1; lcd_data="h"; end       //cs
     endcase
end

//----------------lcd_en使能1ms---------------------
assign lcd_en=current_state==lcd8?1'b0:ms==15?1'b1:1'b0;
//assign lcd_en=current_state==lcd8?1'b0:ms==15?(cnt[15]==1?1'b1:1'b0):1'b0;  //以上会多输出一个a
endmodule 

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

verilog驱动1602液晶屏

begin DB8 送入写第二行的指令 RS disp_count Data_Second_Buf state 写完第一行进入写第二行状态 end else begin DB8...
  • hunterlew
  • hunterlew
  • 2014-07-22 19:53
  • 1740

STM32单片机的LCD1602液晶驱动移植过程

最近开始深入的接触STM32,接触dao
  • xiegui2012
  • xiegui2012
  • 2014-09-25 10:21
  • 1142

51单片机之LCD1602的驱动程序

利用51单片机的LCD1602液晶屏显示当前的时间、字符和数字
  • baidu_35534327
  • baidu_35534327
  • 2016-09-20 18:25
  • 627

verilog驱动强度解析

rules: 1. verilog-ieee-2001 (6-7章)里边有驱动的详细解释,此处就理解和应用做些探讨 2. rtl内的线网都有默认的强度,一般是(strong1, stron...
  • xuexiaokkk
  • xuexiaokkk
  • 2015-11-06 18:18
  • 589

《手把手教你学51单片机》之十三------1602液晶与串口的应用实例

第13章 1602液晶与串口的应用实例       理论上的内容要想逐步消化掌握,必须得通过大量的实践进行巩固,否则时间一长,极容易忘掉。尤其是一些编程相关的技巧,就是靠不停的写程序,不停的参考...
  • liujianli123
  • liujianli123
  • 2015-08-06 10:27
  • 2780

Verilog的信号强度学习

现在在cadence中用NC仿真数字电路的时候,遇到了信号强度的问题,就研究了以下。原来verilog中是可以将多个输出接在一起的,但是要为输出指定信号的强度。 强度值是用来解决数字电路...
  • xuexiaokkk
  • xuexiaokkk
  • 2015-11-11 16:37
  • 1052

12.9 1602液晶简单显示程序

1602 液晶手册提供了一个初始化过程,由于不检测“忙”位,所以程序比较复杂,而我们总结了一个更加简易方便的过程提供给大家,手册上描述的那个,大家仅仅作为了解就可以了,下面我把程序写出来大家看下,我们...
  • softn
  • softn
  • 2016-07-08 06:07
  • 500

verilog驱动强度解析

rules: 1. verilog-ieee-2001 (6-7章)里边有驱动的详细解释,此处就理解和应用做些探讨 2. rtl内的线网都有默认的强度,一般是(strong1, stron...
  • xuexiaokkk
  • xuexiaokkk
  • 2015-11-11 16:36
  • 358

尝试用Verilog驱动VGA

VGA的原理及Verilog代码
  • u013793399
  • u013793399
  • 2016-05-04 23:50
  • 5148

iic模块PCF8574驱动1602学习记载

这些天学习iic总线,可以用PCF8574做个控制流水灯的程序,驱动1602
  • liaomi520
  • liaomi520
  • 2016-07-09 13:43
  • 3942
    个人资料
    • 访问:7928次
    • 积分:585
    • 等级:
    • 排名:千里之外
    • 原创:52篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论