用于Arduino的中断驱动HD44780库

时间:2009-11-30 21:36:25

标签: io arduino hd44780

我有一个HD44780液晶显示屏,我一直在使用随Arduino开发包提供的LiquidCrystal Library。但是,它不可靠。我注意到它有一些问题,而不是被中断驱动,只要开发人员认为芯片应该执行操作,它就会睡觉。

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

有没有人知道实际执行此操作的库,是否需要连接所有8位,还是可以将其保存在4个引脚上?

3 个答案:

答案 0 :(得分:3)

我认为你不需要中断。查看Arduino发行版中的LiquidCrystal.cpp,您只需更改LiquidCrystal::write4bitsLiquidCrystal::write8bitsLiquidCrystal::pulseEnable代码即可。前两种方法应该在写入数据之前监视忙线(BD7),最后一种方法将被修改以消除100us暂停。

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

答案 1 :(得分:1)

可以在三个引脚上使用8位;你只需要一个移位寄存器。我正在使用mouser.com的HEF4094BP(运费比实际芯片更贵)

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

答案 2 :(得分:0)

前段时间我修改了LiquidCrystal lib以支持busy标志。 请注意,实际中断驱动操作可能 - 对于每次读取,您需要将E nable线切换两次。因此,您需要轮询忙标志。

然后我做了一些基准测试,轮询忙标志而不是等待大多数命令。 (例外情况是'clear'和'home'命令)。原因是,在读取模式和写入模式之间切换需要额外的步骤,例如对digitaWrite的8次额外调用和对pinMode的8次额外调用。即使使用16MHz的Arduinos,这也不仅仅等待100μs。

之后我编写了一个直接操作引脚寄存器并以批量模式操作的库 - 所有8个引脚都具有一个寄存器访问权限。之后,我在球场上通过民意调查获得了一些好处。