FPGA控制LCD1602字符显示

Madge ·
更新时间:2024-09-21
· 673 次阅读

1.LCD1602(DDRAM)的外形是这样子滴:
在这里插入图片描述
背面:
在这里插入图片描述
可见区范围:16✖2行;可通过“光标或显示移动指令”使字符慢慢移动到可见的显示范围内,看到字符的移动效果。
在这里插入图片描述
管脚分配:
在这里插入图片描述
2.LCD配置:
(1)通用配置
/*清屏 */
在这里插入图片描述
/*置输入模式 */
在这里插入图片描述
/*显示开关控制 */
在这里插入图片描述
/*置功能 */
在这里插入图片描述
(2)显示数据
在这里插入图片描述
只配置前16个地址(如下),用于显示:
在这里插入图片描述
之后逐次配置第一行、第二行的地址和数据:
/*置第一行地址 */
/*置第一行数据 */
/*置第二行地址 */
/*置第二行数据 */
3.FPGA实现:

module LCD1602( input clk, input rst_n, output reg RS, output reg RW, output reg E, output reg [7:0]DB ); reg [30:0]counter; always@(posedge clk or negedge rst_n) begin if(!rst_n) begin counter<=0; E<=0; end else begin if(counter<24999) counter<=counter+1; else begin counter<=0; E<=~E; end end end reg [3:0]state; reg [127:0]disp_data1; reg [47:0]disp_data2; reg [3:0]cnt; always@(posedge E or negedge rst_n) begin if(!rst_n) begin state<=0; RS<=0; RW<=0; DB<=0; disp_data1<="welcome you come"; disp_data2<="123456"; end else begin case(state) 0:begin RS<=0; RW<=0; DB<=8'b00111000; state<=1; end 1:begin RS<=0; RW<=0; DB<=8'b00001100; state<=2; end 2:begin RS<=0; RW<=0; DB<=8'b00000001; state<=3; end 3:begin RS<=0; RW<=0; DB<=8'b00010100; state<=4; end 4:begin RS<=0; RW<=0; DB<=8'b10000000; state<=5; end 5:begin RS<=1; RW<=0; DB<=disp_data1[127:120]; disp_data1<={disp_data1[119:0],disp_data1[127:120]}; cnt<=cnt+1; if(cnt==15) begin state<=6; cnt<=0; end end 6:begin RS<=0; RW<=0; DB<=8'b11000101; state<=7; end 7:begin RS<=1; RW<=0; DB<=disp_data2[47:40]; disp_data2<={disp_data2[39:0],disp_data2[47:40]}; cnt<=cnt+1; if(cnt==5) begin state<=4; cnt<=0; end end default:; endcase end end endmodule
作者:不秃就一直搞



字符 lcd1602 fpga

需要 登录 后方可回复, 如果你还没有账号请 注册新账号