OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6197|回复: 2

基于FPGA的LCD12864显示实验

[复制链接]

41

主题

87

帖子

0

精华

高级会员

Rank: 4

积分
949
金钱
949
注册时间
2015-10-25
在线时间
131 小时
发表于 2016-8-5 17:18:11 | 显示全部楼层 |阅读模式
/*基于lcd12864显示实验
*菜单界面显示
*作者:汪桐生
*日期:2016/7/30
*R/W=L,E信号下降沿锁存信号,R/W=H,E=H数据被读取
*汪----CDF4
*桐----CDA9
*生----C9FA
*汉字第一行地址:80H
*汉字第二行地址:90H
*汉字第三行地址:88H
*汉字第四行地址:98H
*/
  module lcd(
         clk,  //
              rst_n,//复位
                        en,   //使能信号
                        data, //数据位
                        rs,   //数据/指令选择,高电平显示数据
                        rw,   //读写选择,高电平为读
                   psb   //串/并行接口选择--H为并行,L为串行

  );

  //端口定义
  input        clk;
  input        rst_n;

  output       en;
  output [7:0] data;
  output       rs;
  output       rw;
  output       psb;

  reg          rs;
  reg    [7:0] data;         
  reg                      lcd_clk;//设置为液晶时钟
  reg   [23:0] cnt;    //计数器,用于液晶时钟
  reg   [7:0]  c_state;//次态
  reg   [7:0]  n_state;

  assign       psb=1'b1;//设置为并行接口
  assign       rw =1'b0;//由于只是用写操作,所以设置恒为0

  //相对于FPGA而言,lcd是慢操作设备,由数据手册可取其频率为500KHZ
  always@(posedge clk or negedge rst_n)begin
         if(!rst_n)
              cnt<=0;
                        else if(cnt==49999)
                             cnt<=0;
                        else
                             cnt<=cnt+1'b1;
  end

  always@(posedge clk or negedge rst_n)begin
         if(!rst_n)
            lcd_clk<=0;
                        else if(cnt==49999)
                           lcd_clk<=~lcd_clk;
                        else
                           lcd_clk<=lcd_clk;
  end

  assign  en=lcd_clk;//在并行数据传输的时候,使能端就相当于液晶的时钟信号

  //这里采用三段式状态,描写对于液晶的写操作
  always@(posedge lcd_clk or negedge rst_n)begin
        if(!rst_n)
                     c_state<=0;
                  else
                     c_state<=n_state;
  end

  always@(*)begin
     case(c_state)
              8'd0:begin
                             rs=0;      //写指令
                                  data=8'h31;//设置为8位数据格式,支持基本指令集
                             n_state=8'd1;
                        end
                       
                         8'd1:begin
                             rs=0;      //写指令
                                  data=8'h0c;//打开显示
                             n_state=8'd2;
                        end
          
               8'd2:begin
                             rs=0;      //写指令
                                  data=8'h06;//设置输入方式,增量不移位
                             n_state=8'd3;
                        end
                       
                         8'd3:begin
                             rs=0;      //写指令
                                  data=8'h01;//设置清屏
                             n_state=8'd4;
                        end
             
                         8'd4:begin
                             rs=0;      //写指令
                                  data=8'h80;//设置起始位置,第一行
                             n_state=8'd5;
                        end
                        //汪
                         8'd5:begin
                             rs=1;      //写数据
                                  data=8'hCD;
                             n_state=8'd6;
                        end
                       
                         8'd6:begin
                             rs=1;      //写数据
                                  data=8'hF4;
                             n_state=8'd7;
                        end
                        //桐
                         8'd7:begin
                             rs=1;      
                                  data=8'hCD;
                             n_state=8'd8;
                        end
                       
                         8'd8:begin
                             rs=1;      
                                  data=8'hA9;
                             n_state=8'd9;
                        end
                       
                        //生
                         8'd9:begin
                             rs=1;      
                                  data=8'hc9;
                             n_state=8'ha;
                        end
                       
                         8'ha:begin
                             rs=1;      
                                  data=8'hfa;
                             n_state=8'hb;
                        end
                       
                         8'hb:n_state=8'hc;
                        default:;
          endcase
  end

endmodule   











正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2016-7-27
在线时间
13 小时
发表于 2016-9-4 16:53:53 | 显示全部楼层
请问一下这个是怎样显示出想要的内容的?通过哪些设定?
回复 支持 反对

使用道具 举报

41

主题

87

帖子

0

精华

高级会员

Rank: 4

积分
949
金钱
949
注册时间
2015-10-25
在线时间
131 小时
 楼主| 发表于 2016-9-5 12:18:33 | 显示全部楼层
Qinduey 发表于 2016-9-4 16:53
请问一下这个是怎样显示出想要的内容的?通过哪些设定?

程序上面的注释,汉字通过查它的字库,就知道了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 19:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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