FPGA LCD1602 显示程序

  • 代码片

#这段代码 是我参考网上的程序修改的代码,代码最终实现在LCD1602 上显示 “小姐姐”字样, 由于LCD的点阵只能实现5*8,“姐”字我用了两个字节显示,以下是代码。 代码我自己亲自测试过的。

代码片

去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
module lcd_1602(clk_50M,rst,en,RS,RW,data);input  clk_50M;
input  rst;
output en;
output RS;
output RW;
output [7:0] data;
wire   clk_500;
clk_50M_500 u_clk50M_500(.clk_50M(clk_50M),.rst(rst),.clk_500(clk_500));lcd_show u_lcd_show(.clk_LCD(clk_500),.rst(rst),.en(en),.RS(RS),.RW(RW),.data(data));endmodule module clk_50M_500(clk_50M,rst,clk_500);
input  clk_50M;
input  rst;
output clk_500;reg [8:0] cnt_1;
reg [7:0] cnt_2;
reg   clk_500hz;always@(posedge clk_50M)
begin if(!rst)begin clk_500hz<=0;cnt_1<=0;cnt_2<=0;endelse if(cnt_2==8'd199)begin cnt_2<=0;if(cnt_1==9'd499)begin cnt_1 <=0;clk_500hz<=~clk_500hz;endelsecnt_1<=cnt_1+1;endelse  cnt_2 <=cnt_2+1;
endassign clk_500=clk_500hz;
endmodulemodule lcd_show(clk_LCD,rst,en,RS,RW,data); input clk_LCD;
input rst;
output en,RS,RW;
output reg [7:0] data;
reg RS,en_sel;
reg [4:0] disp_count;
reg [4:0] write_count;
reg [2:0] num;
reg [3:0] state;parameter clear_lcd          =4'b1000,set_disp_mode      =4'b1001,disp_on            =4'b1010,shift_down         =4'b1011,write_cgram        =4'b1100,write_data_first   =4'b1101,write_data_second  =4'b1110,idel               =4'b1111;//此处参数无特别意义,似乎只是状态机标号assign RW=1'b0;
assign en = en_sel?clk_LCD:1'b0;reg [7:0] data_character  [7:0];
reg [7:0] data_character2 [7:0];
reg [7:0] data_character3 [7:0];
reg [7:0] data_character4 [7:0];always @(posedge clk_LCD)begin data_character[0] <= 8'h00;data_character[1] <= 8'h04;data_character[2] <= 8'h04;data_character[3] <= 8'h0E;data_character[4] <= 8'h15;data_character[5] <= 8'h04;data_character[6] <= 8'h0C;data_character[7] <= 8'h04;data_character2[0] <= 8'h08;data_character2[1] <= 8'h0A;data_character2[2] <= 8'h1F;data_character2[3] <= 8'h0A;data_character2[4] <= 8'h0E;data_character2[5] <= 8'h04;data_character2[6] <= 8'h0A;data_character2[7] <= 8'h11;data_character3[0] <= 8'h00;data_character3[1] <= 8'h0E;data_character3[2] <= 8'h0A;data_character3[3] <= 8'h0E;data_character3[4] <= 8'h0A;data_character3[5] <= 8'h0E;data_character3[6] <= 8'h0A;data_character3[7] <= 8'h1F;data_character4[0] <= 8'h1F;data_character4[1] <= 8'h01;data_character4[2] <= 8'h01;data_character4[3] <= 8'h01;data_character4[4] <= 8'h1D;data_character4[5] <= 8'h01;data_character4[6] <= 8'h01;data_character4[7] <= 8'h1F;endreg [7:0] data_first_line  [15:0];
reg [7:0] data_second_line [15:0];
always @(posedge clk_LCD)begin data_first_line[0]  <= 8'h01;//Tdata_first_line[1]  <= 8'h6F;//odata_first_line[2]  <= 8'h20;// data_first_line[3]  <= 8'h6d;//mdata_first_line[4]  <= 8'h79;//ydata_first_line[5]  <= 8'h20;//data_first_line[6]  <= 8'h66;//fdata_first_line[7]  <= 8'h72;//rdata_first_line[8]  <= 8'h69;//idata_first_line[9]  <= 8'h65;//edata_first_line[10] <= 8'h6e;//ndata_first_line[11] <= 8'h64;//ddata_first_line[12] <= 8'h8a;//sdata_first_line[13] <= 8'h8a;//不显示data_second_line[1] <= 8'h00;//字0data_second_line[2] <= 8'h01;//字2data_second_line[3] <= 8'h02;//字3data_second_line[4] <= 8'h01;//字2data_second_line[5] <= 8'h02;//字3data_second_line[6] <= 8'h03;//字4data_second_line[7] <= 8'h03;//pdata_second_line[8] <= 8'h03;//pdata_second_line[9] <= 8'h8a;//ydata_second_line[10] <= 8'h64;//ydata_second_line[11] <= 8'h64;//yendalways @(posedge clk_LCD or negedge rst)begin if(!rst)begin state       <= clear_lcd;RS          <= 1'b0;data        <= 8'b0;en_sel      <= 1'b1;disp_count  <= 5'b0;num         <= 3'b0;write_count <= 5'b0;endelse case(state)clear_lcd:begin state <=set_disp_mode;data  <=8'h01;//清屏代码endset_disp_mode:begin state <=disp_on;data  <=8'h38;enddisp_on:begin state <=shift_down;data  <=8'h0c;//显示开关控制指令endshift_down:begin state <=write_cgram;data  <=8'h06;endwrite_cgram:begin case (num)0:begin data  <= 8'h40;       //num   <= num +1;state <= write_cgram;end1:begin if(write_count == 8)begin data  <= 8'h48;   //RS    <= 1'b0;num   <= num +1;state <= write_cgram;write_count<=0;endelse begin data <=data_character[write_count];RS   <=1'b1;write_count <= write_count+1'b1;state  <= write_cgram;endend2:begin if(write_count==8)begin data<=8'h50;   //RS  <=1'b0;num <= num+1;state <= write_cgram;write_count<=0;endelse begindata<=data_character2[write_count];RS  <=1'b1;write_count <=write_count+1'b1;state <=write_cgram;endend3:begin if (write_count==8)begin data<=8'h58; //RS<=1'b0;num <= num+1;state<=write_cgram;write_count<=0;endelse   begin data<=data_character3[write_count];RS<=1'b1;write_count <=write_count+1'b1;state   <=write_cgram;endend4:begin if (write_count==8)begin data<=8'h80;  //RS<=1'b0;state<=  write_data_first;write_count<=0;endelse   begin data<=data_character4[write_count];RS<=1'b1;write_count <=write_count+1'b1;state   <=write_cgram;endendendcaseendwrite_data_first:                begin if(disp_count ==14)begin data       <= 8'hc2;RS         <= 1'b0;disp_count <= 4'b0;state      <= write_data_second;endelse begin data       <= data_first_line[disp_count];RS         <= 1'b1;disp_count <=disp_count+1'b1;state      <= write_data_first;endendwrite_data_second:begin  if(disp_count==11)begin en_sel    <= 1'b0;RS        <= 1'b0;disp_count<= 4'b0;state     <= idel;endelse begin data       <= data_second_line[disp_count+1];RS         <= 1'b1;disp_count <= disp_count+1'b1;state      <= write_data_second;endendidel:begin state  <= idel;enddefault: state <= clear_lcd;endcase end
endmodule          

一个基于verilog的FPGA 的LCD 1602 显示程序相关推荐

  1. 超声波测距1602显示程序

    超声波测距1602显示程序 1.intrins.c 2.1602led.c 3.boardinit.c 4.delay.c #include <reg52.H> //机器器件配置文件 #i ...

  2. 编写一个学生和教师数据的输入和显示程序,学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: 编写一个学生和教师数据的输入和显示程序,学生数据有编号.姓名.班号和成绩,教师数据有编号.姓名.职称和部门. 要求将编号.姓名 ...

  3. 基于51单片机防火防盗 LCD 1602屏+烟雾+温度+红外

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.Proteus仿真 七.程序 部分代码 八.资料包括 摘要 随着社会和经 ...

  4. 43、基于51单片机电子称16按键LCD 1602显示系统设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 1.1课题背景与研究意义 电子秤的工作原理 电子秤的计量性能 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.Prote ...

  5. php 论坛_推荐一个基于话题的高性能轻型开源PHP论坛程序

    Carbon Forum是一个基于话题的高性能轻型PHP论坛,不像Discuz那样,Carbon Forum很纯粹,没有一点多余的功能.另外像是微博,QQ,GitHub第三方登录也一应俱全.官方还提供 ...

  6. FPGA实现LCD显示屏显示彩条

    目录 总体设计 读显示屏ID 读显示屏ID代码 时钟分频 时钟分频代码 LCD显示 lcd显示模块 LCD驱动模块 lcd驱动代码 顶层模块 顶层模块代码 总体设计 系统总体分为五个模块,分别是:rd ...

  7. 基于verilog的FPGA编程经验总结(XILINX ISE工具)

    1.用ISE仿真的时候.所用变量一定要初始化. ISE默认初始量为"XXXXX", 而Quarters是默认为"00000"的, 其实实际上, 下到FPGA里后 ...

  8. 在线播放bt php,yunBT:一个基于TP3.1的多用户BT离线下载程序,支持在线播放

    版权声明:本文为原创文章,版权归 Rat's Blog 所有,转载请注明出处! 本文链接:https://www.moerats.com/archives/841/ 如教程需要更新,或相关链接出现40 ...

  9. 一个基于Bmob的OPPO锁屏壁纸小程序,写过之后发现...好像没什么卵用...一脸懵逼

    小程序之前写的,也就前段时间,毛毛糙糙的写了第一版... 因为使用OPPO手机,所以有个锁屏杂志的东西,里面的图片每天都是由OPPO官方的人进行精选然后推送给用户的,图片菲菲菲菲菲常漂亮,看到网上很多 ...

  10. 一个基于百度云和图灵的人工智能(智障)程序

    # 这里是flask框架 from flask import Flask, request, send_file import setting import os from uuid import u ...

最新文章

  1. 物理、线性、虚拟、逻辑、有效地址
  2. Log4j 日志详细用法
  3. python弹出警告框_selenium+webdriver+python 中警告框的处理方法
  4. ASP.NET项目在VS中F5与Ctrl+F5的区别
  5. django 1.8 官方文档翻译: 3-6-2 内建的中间件
  6. PHP 中获取文件名及路径
  7. Linux—文件系统
  8. win10杜比全景声评测_杜比全景声加持:Win10创意者更新空间音效设置扫盲
  9. Exporting the operator hardsigmoid to ONNX opset version 11 is not supported
  10. 本科生计算机论文中文核心,本科计算机想投中文核心,求推荐刊物!
  11. 开源基础软件大时代,与国产深度学习框架一起乘风破浪
  12. 乔纳森-弗莱彻:被遗忘的搜索引擎之父
  13. 前端开发必备(三)-----用js验证表单是否为空以及验证码是否输入正确
  14. Anbox安装apk失败(提示Failure res=-113等)的解决方法
  15. java中的锁池和等待池是什么_线程的几个状态及方法,等待池和锁池的理解
  16. 教你如何赚你的第一桶金 - 2048(包括源代码)
  17. Python制作七夕表白实例项目-让你的情人心动起来
  18. web前端学习第十四~十八天
  19. 2015年找工作总结
  20. 机器学习之k-means算法详解

热门文章

  1. Nexus下载构件失败
  2. 一文了解什么是DoIP协议(超详细)
  3. 最常用的9款免费开源游戏引擎
  4. Spark-SQL常用内置日期时间函数
  5. 《自然语言处理简明教程》读书笔记:前言
  6. python批量获取百度贴吧_python网络爬虫案例:批量爬取百度贴吧页面数据
  7. 计算机的的打印服务,Win7系统print spooler打印机服务自动停止处理办法
  8. mfc简易的学生管理系统
  9. [问题探讨]H5打包为原生Android和IOS的移动APP后请求无法触发问题
  10. python爬虫淘宝视频_python爬虫视频教程:一篇文章教会你用Python爬取淘宝评论数据...