【发布时间】:2015-10-04 14:46:34
【问题描述】:
我想用 VHDL 驱动一个 4x16 LCD 显示器。第一行应该说“FREQ:000 RPM”,其中的零代表传入的 8 位频率数据。对于具有不同数据(也是 8 位)的下一行也是如此。我的VHDL代码如下:
-- 16 Characters
subtype string16_type is string(1 to 16);
-- 4 string of 16 characters
type message4x16_type is array(1 to 4) of string16_type;
-- Define messages displayed
constant message_home: message4x16_type := ( --1234567890123456
1 => "FREE MODE ",
2 => "PARCOURS ",
3 => "- - - - - - - - ",
4 => " - - - - - - - -");
constant message_info: message4x16_type := ( --1234567890123456
1 => "FREQ: 000 RPM ",
2 => "SPEED: 000 KM/H ",
3 => "DIST: 000 KM ",
4 => "MORE INFO ");
-- Character amount in line
signal character_counter: integer range 1 to 16;
-- Line amount on LCD
signal line_counter : integer range 1 to 4;
然后跟随一个状态机,状态 write_char 部分看起来像这样:
if msg_select = '0' then
aline := message_home(line_counter);
elsif msg_select = '1' then
aline := message_info(line_counter);
end if;
data <= std_logic_vector(to_unsigned(character'pos(aline(character_counter)),8));
一切都以这种方式顺利进行,但我想不出一种将频率数据实现到消息中的方法,比如在 C 中使用 %i。我知道“记录”语句,但不确定如何在这个情况。任何其他实现数据的方法都非常受欢迎。
感谢正手。
【问题讨论】:
-
“将频率数据实现到消息中”是什么意思?将
000替换为数值的ASCII字符串形式? -
你知道连接符号'&'吗?
-
常量声明后不能修改其值。这建议您要么使用 4x16 显示器的随机访问功能,要么创建一个信号或可变行缓冲区字符串,可以将常量字符串复制到、编辑并随后写入显示器。符合合成条件的东西需要固定长度,这就是为什么在 VHDL 中找不到 C 字符串格式的原因。