代码之家  ›  专栏  ›  技术社区  ›  Malfist

用于Arduino的中断驱动HD44780库

  •  4
  • Malfist  · 技术社区  · 15 年前

    我有一个HD44780液晶屏,我一直在使用与Arduino开发包一起提供的Liquidcrystal库。但是,它不可靠。我注意到它有一些问题,它不是被中断驱动的,而是在开发人员认为芯片应该执行操作的时候就休眠。

    在规格表中,忙碌标志将在执行时设置,这意味着它可以被中断驱动。

    有人知道一个库是真的这样做的吗?它需要所有8位都连接起来吗?或者我可以把它保持在4个插脚上吗?

    3 回复  |  直到 13 年前
        1
  •  3
  •   Ben Combee    15 年前

    我认为你不需要打断一下。看着 LiquidCrystal.cpp 在Arduino发行版中,您只需更改 LiquidCrystal::write4bits , LiquidCrystal::write8bits LiquidCrystal::pulseEnable 代码。前两种方法应该在写入数据之前通过监视忙线(BD7)开始,最后一种方法将被修改以删除100us暂停。

    我认为在默认代码中没有这样做的原因是,这些LCD的许多用户只是将R/W连接到地上,所以显示器始终处于写模式,使得无法读取忙碌的信号。但是,这是通过将wrw_pin设置为-1传递到库中的,因此脉冲和写入代码可以有条件地使用r/w pin作为检测忙的一种方式,作为速度优化。

        2
  •  1
  •   Ian C.    14 年前

    可以在三个管脚上使用8位;您只需要一个移位寄存器。我用的是mouser.com的hef4094bp(运费比实际芯片高)。

    移位寄存器的接线图和代码修改如下: http://www.arduino.cc/playground/Code/LCD3wires

        3
  •  0
  •   A.H.    13 年前

    不久前,我修改了Liquidcrystal lib以支持busy标志。 请注意,真正的中断驱动操作是 可能-对于每次读取,您需要切换 E 两次启用行。因此,您需要轮询busy标志。

    然后我做了一些基准调查,结果发现 更慢的 而不仅仅是等待大多数命令。(例外是“clear”和“home”命令)。原因是,在读模式和写模式之间切换需要额外的步骤,如8个调用 digitaWrite 另外8个电话 pinMode . 即使是16MHz的Arduinos,这也比等待100微秒慢。

    之后,我编写了一个库,可以直接以批量模式操作管脚寄存器——所有8个管脚都有一个寄存器访问权。在那之后,我在棒球场通过投票获得一些好处。