4473|2

18

帖子

6

TA的资源

一粒金砂(中级)

楼主
 

verilog LCD1602多级菜单翻页功能求助 [复制链接]

module lcd1602
(
   clk,
rst_n,
   rw,
   rs,
   en,
   data,
din
);
input clk;
input rst_n;
input[19:0] din;
output rs;
output en;
output rw;
output[7:0] data;
  
reg rs,en_sel;
reg [7:0] data;
reg [31:0]count,count1;  //LCD CLK 分频计数器
reg lcd_clk;
reg [7:0] one_1,one_2,one_3,one_4,one_5,one_6,one_7,one_8,one_9,one_10,one_11,one_12,one_13,one_14,one_15,one_16;
reg [7:0] two_1,two_2,two_3,two_4,two_5,two_6,two_7,two_8,two_9,two_10,two_11,two_12,two_13,two_14,two_15,two_16;
reg [7:0] next,xianshi,two;
parameter
state0 =8'h00,  //设置8位格式,2行,5*7    8'h38;
   state1 =8'h01,  //整体显示,关光标,不闪烁   8'h0C    闪烁 8'h0e
   state2 =8'h02,  //设定输入方式,增量不移位  8'h06
   state3 =8'h03,  //清除显示         8'h01
   state4 =8'h04,  //显示第一行的指令    80H
   state5 =8'h05,  //显示第二行的指令    80H+40H
     
   scan   =8'h06,  
   nul    =8'h07;

parameter
data0  =8'h10,   //2行,共32个数据
   data1  =8'h11,
   data2  =8'h12,
   data3  =8'h13,
   data4  =8'h14,
   data5  =8'h15,
   data6  =8'h16,
   data7  =8'h17,
   data8  =8'h18,
   data9  =8'h19,
   data10 =8'h20,
   data11 =8'h21,
   data12 =8'h22,
   data13 =8'h23,
   data14 =8'h24,
   data15 =8'h25,
   data16 =8'h26,
   data17 =8'h27,
   data18 =8'h28,
   data19 =8'h29,
   data20 =8'h30,
   data21 =8'h31,
   data22 =8'h32,
   data23 =8'h33,
   data24 =8'h34,
   data25 =8'h35,
   data26 =8'h36,
   data27 =8'h37,
   data28 =8'h38,
   data29 =8'h39,
   data30 =8'h40,
   data31 =8'h41;

initial  //初始值
begin
   //第一行显示 welcome to use!!
one_1 <="w";
one_2 <="e";
one_3 <="l";
one_4 <="c";
one_5 <="o";
one_6 <="m";
one_7 <="e";
one_8 <=" ";
   one_9 <="t";
one_10<="o";
one_11<=" ";
one_12<="u";
one_13<="s";
one_14<="e";
one_15<="!";
one_16<="!";
   //第二行显示 Clock:00-00-00
   two_1 <="d";
two_2 <="a";
two_3 <="t";
two_4 <="a";
two_5 <=":";
two_6 <=" ";
two_7 <=" ";
two_8 <=" ";
   two_9 <=",";
two_10<=" ";
two_11<=" ";
two_12<=" ";
two_13<=",";
two_14<=" ";
two_15<=" ";
two_16<=" ";
end
     
always@(posedge clk)   //获得LCD时钟
begin
   count<=count+1;
   if(count==250000)
   begin
  count<=0;
  lcd_clk<=~lcd_clk;
   end
end
always@(posedge clk or negedge rst_n)   //时钟计数器
begin
en_sel<=1;
two_7 <=8'h30+din/10000000;
two_8 <=8'h30+din/1000000%10;
//   two_9 <=",";
two_10<=8'h30+din/100000%10;
two_11<=8'h30+din/10000%10;
two_12<=8'h30+din/1000%10;
// two_13<=",";
two_14<=8'h30+din/100%10;
two_15<=8'h30+din/10%10;
two_16<=8'h30+din%10;
end

always @(posedge lcd_clk)
begin
   case(next)
  //配置液晶
  state0: begin rs<=0; data<=8'h38;  next<=state1;  end      
  state1: begin rs<=0; data<=8'h0e;  next<=state2;  end
  state2: begin rs<=0; data<=8'h06;  next<=state3;  end
  state3: begin rs<=0; data<=8'h01;  next<=state4;  end     
  state4: begin rs<=0; data<=8'h80;  next<=data0;   end
  //显示第一行
  data0 : begin rs<=1; data<=one_1;  next<=data1  ; end
  data1 : begin rs<=1; data<=one_2;  next<=data2  ; end
  data2 : begin rs<=1; data<=one_3;  next<=data3  ; end
  data3 : begin rs<=1; data<=one_4;  next<=data4  ; end
  data4 : begin rs<=1; data<=one_5;  next<=data5  ; end
  data5 : begin rs<=1; data<=one_6;  next<=data6  ; end
  data6 : begin rs<=1; data<=one_7;  next<=data7  ; end
  data7 : begin rs<=1; data<=one_8;  next<=data8  ; end
  data8 : begin rs<=1; data<=one_9;  next<=data9  ; end
  data9 : begin rs<=1; data<=one_10; next<=data10 ; end
  data10: begin rs<=1; data<=one_11; next<=data11 ; end
  data11: begin rs<=1; data<=one_12; next<=data12 ; end
  data12: begin rs<=1; data<=one_13; next<=data13 ; end
  data13: begin rs<=1; data<=one_14; next<=data14 ; end
  data14: begin rs<=1; data<=one_15; next<=data15 ; end
  data15: begin rs<=1; data<=one_16; next<=state5 ; end
      //显示第二行
  state5:  begin rs<=0;data<=8'hC0;  next<=data16 ; end
  data16: begin rs<=1; data<=two_1;  next<=data17 ; end
  data17: begin rs<=1; data<=two_2;  next<=data18 ; end
  data18: begin rs<=1; data<=two_3;  next<=data19 ; end
  data19: begin rs<=1; data<=two_4;  next<=data20 ; end
  data20: begin rs<=1; data<=two_5;  next<=data21 ; end
  data21: begin rs<=1; data<=two_6;  next<=data22 ; end
  data22: begin rs<=1; data<=two_7;  next<=data23 ; end
  data23: begin rs<=1; data<=two_8;  next<=data24 ; end
  data24: begin rs<=1; data<=two_9;  next<=data25 ; end
  data25: begin rs<=1; data<=two_10; next<=data26 ; end
  data26: begin rs<=1; data<=two_11; next<=data27 ; end
  data27: begin rs<=1; data<=two_12; next<=data28 ; end
  data28: begin rs<=1; data<=two_13; next<=data29 ; end
  data29: begin rs<=1; data<=two_14; next<=data30 ; end
  data30: begin rs<=1; data<=two_15; next<=data31 ; end
  data31: begin rs<=1; data<=two_16; next<=scan   ; end
  scan  :   //交替更新第一行和第二行数据      
   begin
    next<=state4;
   end
  default:  
   next<=state0;
   endcase
end
assign en=lcd_clk && en_sel;
assign rw=0;
endmodule

以上为LCD1602典型循环显示V代码,想求教如何实现通过按键功能来实现翻页多级菜单功能,现实项目中可能LCD1602无法全部显示信息,有必要做翻页显示,希望大家一起努力想办法来实现这一功能。

此帖出自FPGA/CPLD论坛

最新回复

这个和显示应该是独立的模块或函数,显示函数只需要处理显示的内容和行数,在翻页模块里调用就行了。  详情 回复 发表于 2015-8-20 09:52
点赞 关注
 

回复
举报

2万

帖子

71

TA的资源

管理员

沙发
 
提问的智慧:https://bbs.eeworld.com.cn/thread-469511-1-1.html
此帖出自FPGA/CPLD论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

板凳
 
实现通过按键功能来实现翻页多级菜单功能

这个和显示应该是独立的模块或函数,显示函数只需要处理显示的内容和行数,在翻页模块里调用就行了。
此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表