返回信息流数电大实验做的是lcd的秒表,已经写完,但在下载到实验板时出现了一些故障。有些时候下载到实验板时,lcd屏幕无反应(显示一行黑块),有的时候下载可以成功。是1602的问题还是写的状态机代码出现了问题?求大神解答
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY transcoder IS
PORT(clk:IN STD_LOGIC;
datain0:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
datain1:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
datain2:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
datain3:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
datain4:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
datain5:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
datain6:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
datain7:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
rs,rw,en:OUT STD_LOGIC;
data:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END entity;
ARCHITECTURE a OF transcoder IS
TYPE states IS (set_function,clear_display,set_cursor,set_display,set_ddram1,write_data1,set_ddram2,write_data2);
SIGNAL state:states;
TYPE ram IS ARRAY (0 TO 15)OF STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL ram1:ram;
BEGIN
rw<='0';
en<=clk;
PROCESS(clk,state)
VARIABLE cnt : INTEGER RANGE 0 TO 16 ;
BEGIN
IF (clk'EVENT AND clk='1') THEN
CASE state IS
WHEN set_function=>data<="00110000";rs<='0';state<= set_display; --设置功能:8位,两行,5×7/每字符
WHEN set_display=>data<="00001100";rs<='0';state<= clear_display; --显示控制:显示开,光标关,光标不闪烁
WHEN clear_display=>data<="00000001";rs<='0';state<=set_cursor; --清屏
WHEN set_cursor=>data<="00000110";rs<='0';state<= set_ddram1; --显示模式:光标右移
WHEN set_ddram1=>data<="10000000";rs<='0';state<=write_data1; --设置ADDRAM地址,第一行第一列
WHEN write_data1=>rs<='1';
ram1 <= (X"20",X"7E",X"7E",datain7,datain6,X"3A",datain5,datain4,X"3A",datain3,datain2,X"3A",datain1,datain0,X"7F",X"7F");
data<=ram1(cnt)(7 DOWNTO 0);
cnt:=cnt+1; --将ram1的15个byte写入ADDRAM
IF cnt=16 THEN state<=set_ddram1; END IF;
WHEN OTHERS=>NULL;
END CASE;
END IF;
END PROCESS;
END a ;
这是一条镜像帖。来源:北邮人论坛 / circuit / #26668同步于 2016/10/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖
[VHDL]关于1602LCD显示屏烧录后一直是黑块的问题
SamluxNE
2016/10/25镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。