fpga_feixiang 发表于 2019-9-16 21:10:29

基于FPGA的LCD12864显示实验

/*基于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 data;
output       rs;
output       rw;
output       psb;

reg          rs;
reg    data;         
reg                      lcd_clk;//设置为液晶时钟
reg    cnt;    //计数器,用于液晶时钟
reg   c_state;//次态
reg   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

assignen=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   

zxopenljx 发表于 2019-9-17 09:59:25

感谢楼主分享

晓灰灰 发表于 2019-9-17 12:52:17

基于FPGA的LCD12864显示实验

Sunlife 发表于 2019-9-17 14:03:10

                              :)

zxopenhl 发表于 2022-3-27 17:15:34

基于FPGA的LCD12864显示实验

zxopenhl 发表于 2022-4-6 13:48:18

基于FPGA的LCD12864显示实验

durongze 发表于 2023-6-18 22:07:37

attach://45744.png我的管脚怎么和你的不一样呢?
to,location
12864_res, pin_R1
12864_cs, pin_T3
12864_rs , pin_J1
12864_scl ,pin_P1
12864_sda , pin_K6

zxopenhl 发表于 2023-12-8 14:50:36

基于FPGA的LCD12864显示实验
页: [1]
查看完整版本: 基于FPGA的LCD12864显示实验