搜索
bottom↓
回复: 7

给大家分享一段最精简的1602液晶的Verilog驱动代码!

[复制链接]

出0入0汤圆

发表于 2013-5-9 13:51:13 | 显示全部楼层 |阅读模式
本帖最后由 hughqfb 于 2013-5-9 14:15 编辑

本来是个很小的东西,由于学艺不精,耽搁了好久才理出点头绪,在此把其中的小点滴与大家分享。欢迎指导!

/*****************************************************
1602液晶显示格式:
                                        HUMI :  36.8 %
                                        TEMP :  25.5 C
       
*******************************************************/

module lcd1602_module(clk,reset,rs,rw,en,data,data_in);

        input clk,reset;
        input [31:0] data_in;   // 这个输入信号暂且不用
       
        output rs,rw,en;
        output [7:0] data;
       
        reg rs;
        reg [7:0] data;
       
       
        /***************************状态转换时钟********************************/
        parameter T1MS=32'd49_999;
       
        reg [31:0] count1;
        reg clk_en;
       
        always @(posedge clk or negedge reset)
                if(!reset)
                        begin count1<=1'b0;clk_en<=1'b0;end
                       
                else if(count1==T1MS)
                                begin count1<=1'b0;clk_en<=~clk_en;end
                else count1<=count1+1'b1;
               
               
        /***************************操作液晶********************************/
       
        reg [5:0] i;
        reg en_temp;
        reg [1:0] count2;
       
        always @(posedge clk_en or negedge reset )
                if(!reset)
                        begin i<=1'b0;en_temp<=1'b0;count2<=1'b0;end
                       
                else
                        begin
                        case(i)                       
                                0:        begin rs<=1'b0;data<=8'h38; i<=i+1'b1; end  //设置16*2显示,5*7点阵,8位数据接口
                                1:        begin rs<=1'b0;data<=8'h0c; i<=i+1'b1; end  //开显示,不显示光标,
                                2:        begin rs<=1'b0;data<=8'h06; i<=i+1'b1; end  //写入一个字符后地址指针加一且光标加一
                                3:        begin rs<=1'b0;data<=8'h01; i<=i+1'b1; end  //显示清屏
                                4:        begin rs<=1'b0;data<=8'h80; i<=i+1'b1; end  //设置第一行地址
                                5:        begin rs<=1'b1;data<="H";i<=i+1'b1;end
                                6:        begin rs<=1'b1;data<="U";i<=i+1'b1;end
                                7:        begin rs<=1'b1;data<="M";i<=i+1'b1;end
                                8:        begin rs<=1'b1;data<="I";i<=i+1'b1;end
                                9:        begin rs<=1'b1;data<=" ";i<=i+1'b1;end
                                10:        begin rs<=1'b1;data<=":";i<=i+1'b1;end
                                11:        begin rs<=1'b1;data<=" ";i<=i+1'b1;end
                                12:        begin rs<=1'b1;data<="3";i<=i+1'b1;end
                                13:        begin rs<=1'b1;data<="6";i<=i+1'b1;end
                                14:        begin rs<=1'b1;data<=".";i<=i+1'b1;end
                                15:        begin rs<=1'b1;data<="8";i<=i+1'b1;end
                                16:        begin rs<=1'b1;data<=" ";i<=i+1'b1;end                                       
                                17:        begin rs<=1'b1;data<="%";i<=i+1'b1;end
                               
                                18:        begin rs<=1'b0;data<=8'hc0; i<=i+1'b1; end // 设置第二行地址
                                19:        begin rs<=1'b1;data<="T";i<=i+1'b1;end
                                20:        begin rs<=1'b1;data<="E";i<=i+1'b1;end
                                21:        begin rs<=1'b1;data<="M";i<=i+1'b1;end
                                22:        begin rs<=1'b1;data<="P";i<=i+1'b1;end
                                23:        begin rs<=1'b1;data<=" ";i<=i+1'b1;end
                                24:        begin rs<=1'b1;data<=":";i<=i+1'b1;end
                                25:        begin rs<=1'b1;data<=" ";i<=i+1'b1;end
                                26:        begin rs<=1'b1;data<="2";i<=i+1'b1;end
                                27:        begin rs<=1'b1;data<="5";i<=i+1'b1;end       
                                28:        begin rs<=1'b1;data<=".";i<=i+1'b1;end       
                                29:        begin rs<=1'b1;data<="5";i<=i+1'b1;end       
                                30:        begin rs<=1'b1;data<=" ";i<=i+1'b1;end       
                                31:        begin rs<=1'b1;data<="C";i<=i+1'b1;end       
                               
                                32:        begin rs<=1'b0;data<=8'b0000_0000;i<=0;
                                                if(count2==2'd2)                         // 这个地方我也不咋明白,为什么要限制写入的次数呢?
                                                                 en_temp<=1'b1;
                                                        else
                                                                begin en_temp<=1'b0;count2<=count2+1'b1;end
                                                end
                                default: i<=1'b0;
                        endcase
                end
                       
        /*****************************************************************/       
        assign en=clk_en|en_temp;
        assign rw=1'b0;
endmodule

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-5-9 14:24:16 | 显示全部楼层
用 C4 啊,

出0入0汤圆

 楼主| 发表于 2013-5-9 15:15:49 | 显示全部楼层
wkman 发表于 2013-5-9 14:24
用 C4 啊,牛

这是实验室师兄的板子,我自己项目用的是C1的144Pin的。

大侠给我看下为什么需要那个count2呢?想不明白啊!

出0入0汤圆

发表于 2013-5-10 20:56:47 | 显示全部楼层
感谢楼主分享~

出0入0汤圆

发表于 2013-5-11 13:02:47 | 显示全部楼层
感谢分享! 收藏了

出0入0汤圆

发表于 2013-9-6 23:43:20 | 显示全部楼层
good new! 重温verilog

出0入0汤圆

发表于 2013-9-7 09:41:09 | 显示全部楼层
hughqfb 发表于 2013-5-9 15:15
这是实验室师兄的板子,我自己项目用的是C1的144Pin的。

大侠给我看下为什么需要那个count2呢?想不明白 ...

这个貌似控制刷新的周期吧。。。。。。。。。。。。。

出0入0汤圆

发表于 2013-9-10 20:36:44 | 显示全部楼层
好有钱啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 07:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表