新答案:
遵循评论中提供的数据表
http://www.xilinx.com/support/documentation/boards_and_kits/ug334.pdf
值得注意的是,您的大多数评论都声称接口时间比设置时间长。这是倒退。设置时间比与 LCD 通话要长。
为了使这对我来说更容易,我将创建一个名为 pulse LCD_E 的伪函数调用,您每次都可以在脑海中替换它。
Definition of pulse LCD_E
wait a minimum of 40 ns (2 clock cycles at 50 MHz)
set LCD_E high
wait a minimum of 230 ns (12 clock cycles at 50 MHz)
set LCD_E low
wait a minium 10 ns before changes (.5 clock cycle)
标准写入命令的时序图要求您
set LCD_RS, LCD_DB(7:4), LCD_RW
pulse LCD_E
reset LCD_RS, LCD_DB(7:4), LCD_RW for lower nibble
wait 1 us
pulse LCD_E
wait a minium of 40 us before repeating
初始化非常相似,尽管您有一个初始等待时间,并且只写入 4 位命令,其间等待时间较长。
这样做是为了初始化
wait at least 15 ms (750,000 clock cycles at 50 MHz)
set LCD_DB<7:4> = 0x3
pulse LCD_E
wait 4.1 ms or longer, which is 205,000 clock cycles at 50 MHz.
set LCD_DB<7:4> = 0x3,
pulse LCD_E
wait 100 μs or longer, which is 5,000 clock cycles at 50 MHz.
set LCD_DB<7:4> = 0x3
pulse LCD_E
wait 40 μs or longer, which is 2,000 clock cycles at 50 MHz.
set LCD_DB<7:4> = 0x2
pulse LCD_E
wait 40 μs or longer, which is 2,000 clock cycles at 50 MH
Initialization complete
如果您出于某种原因需要更快的写入时间,您可以在较长的等待期间设置下一个数据输入,并在脉冲 LCD_E 中删除初始等待
为我的旧答案辩护。来自数据表~~
After power-on, the display must be initialized to establish the required communication
protocol. The initialization sequence is simple and ideally suited to the highly-efficient
eight-bit PicoBlaze embedded controller. After initialization, the PicoBlaze controller is
available for more complex control or computation beyond simply driving the display.
老答案:
如果这是在 FPGA 上进行并且您有其他时序约束(例如等待时间),您可以考虑使用它
http://en.wikipedia.org/wiki/PicoBlaze
它是 8 位微控制器的 VHDL 实现,对于设置、写入和读取 LCD 信息非常有用。芯片组非常简单,很容易上手。另外,您可以编写自己的外围设备:)
它的免费软件,我想你可以在这里下载。它带有自己的 IDE 和调试器。
http://www.picoblaze.info/tools.html
如果它只是一个小项目,您可能只想自己完成所有编码以防延迟。但是如果它进入一个更大的项目,这非常有用并且值得学习。我认为它运行在最大 50 MHz 时钟上,因此如果您使用更快的时钟,您可能需要进行一些数字时钟管理。