| 
 
高级会员 
 
	积分949金钱949 注册时间2015-10-25在线时间131 小时 | 
 
| /*基于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
 
 
 
 
 
 
 
 
 
 
 
 
 | 
 |