一个基于verilog的FPGA 的LCD 1602 显示程序
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 显示程序相关推荐
- 超声波测距1602显示程序
超声波测距1602显示程序 1.intrins.c 2.1602led.c 3.boardinit.c 4.delay.c #include <reg52.H> //机器器件配置文件 #i ...
- 编写一个学生和教师数据的输入和显示程序,学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: 编写一个学生和教师数据的输入和显示程序,学生数据有编号.姓名.班号和成绩,教师数据有编号.姓名.职称和部门. 要求将编号.姓名 ...
- 基于51单片机防火防盗 LCD 1602屏+烟雾+温度+红外
毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.Proteus仿真 七.程序 部分代码 八.资料包括 摘要 随着社会和经 ...
- 43、基于51单片机电子称16按键LCD 1602显示系统设计
毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 1.1课题背景与研究意义 电子秤的工作原理 电子秤的计量性能 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.Prote ...
- php 论坛_推荐一个基于话题的高性能轻型开源PHP论坛程序
Carbon Forum是一个基于话题的高性能轻型PHP论坛,不像Discuz那样,Carbon Forum很纯粹,没有一点多余的功能.另外像是微博,QQ,GitHub第三方登录也一应俱全.官方还提供 ...
- FPGA实现LCD显示屏显示彩条
目录 总体设计 读显示屏ID 读显示屏ID代码 时钟分频 时钟分频代码 LCD显示 lcd显示模块 LCD驱动模块 lcd驱动代码 顶层模块 顶层模块代码 总体设计 系统总体分为五个模块,分别是:rd ...
- 基于verilog的FPGA编程经验总结(XILINX ISE工具)
1.用ISE仿真的时候.所用变量一定要初始化. ISE默认初始量为"XXXXX", 而Quarters是默认为"00000"的, 其实实际上, 下到FPGA里后 ...
- 在线播放bt php,yunBT:一个基于TP3.1的多用户BT离线下载程序,支持在线播放
版权声明:本文为原创文章,版权归 Rat's Blog 所有,转载请注明出处! 本文链接:https://www.moerats.com/archives/841/ 如教程需要更新,或相关链接出现40 ...
- 一个基于Bmob的OPPO锁屏壁纸小程序,写过之后发现...好像没什么卵用...一脸懵逼
小程序之前写的,也就前段时间,毛毛糙糙的写了第一版... 因为使用OPPO手机,所以有个锁屏杂志的东西,里面的图片每天都是由OPPO官方的人进行精选然后推送给用户的,图片菲菲菲菲菲常漂亮,看到网上很多 ...
- 一个基于百度云和图灵的人工智能(智障)程序
# 这里是flask框架 from flask import Flask, request, send_file import setting import os from uuid import u ...
最新文章
- 物理、线性、虚拟、逻辑、有效地址
- Log4j 日志详细用法
- python弹出警告框_selenium+webdriver+python 中警告框的处理方法
- ASP.NET项目在VS中F5与Ctrl+F5的区别
- django 1.8 官方文档翻译: 3-6-2 内建的中间件
- PHP 中获取文件名及路径
- Linux—文件系统
- win10杜比全景声评测_杜比全景声加持:Win10创意者更新空间音效设置扫盲
- Exporting the operator hardsigmoid to ONNX opset version 11 is not supported
- 本科生计算机论文中文核心,本科计算机想投中文核心,求推荐刊物!
- 开源基础软件大时代,与国产深度学习框架一起乘风破浪
- 乔纳森-弗莱彻:被遗忘的搜索引擎之父
- 前端开发必备(三)-----用js验证表单是否为空以及验证码是否输入正确
- Anbox安装apk失败(提示Failure res=-113等)的解决方法
- java中的锁池和等待池是什么_线程的几个状态及方法,等待池和锁池的理解
- 教你如何赚你的第一桶金 - 2048(包括源代码)
- Python制作七夕表白实例项目-让你的情人心动起来
- web前端学习第十四~十八天
- 2015年找工作总结
- 机器学习之k-means算法详解
热门文章
- Nexus下载构件失败
- 一文了解什么是DoIP协议(超详细)
- 最常用的9款免费开源游戏引擎
- Spark-SQL常用内置日期时间函数
- 《自然语言处理简明教程》读书笔记:前言
- python批量获取百度贴吧_python网络爬虫案例:批量爬取百度贴吧页面数据
- 计算机的的打印服务,Win7系统print spooler打印机服务自动停止处理办法
- mfc简易的学生管理系统
- [问题探讨]H5打包为原生Android和IOS的移动APP后请求无法触发问题
- python爬虫淘宝视频_python爬虫视频教程:一篇文章教会你用Python爬取淘宝评论数据...