我有一个Arduino液晶屏,并且我一直在使用HD44780开发包提供的LiquidCrystal库。然而,它并不可靠。我注意到了它的一些问题,它没有被中断驱动,只要开发人员认为芯片应该执行操作,它就会休眠。
从规格表中,BUSY标志将在其执行时被设置,这意味着它可以被中断驱动。
有没有人知道有一个库可以做到这一点,它需要连接所有的8位,或者我可以将它保持在4个管脚?
发布于 2009-12-03 06:36:42
我不认为你需要被打断。查看Arduino发行版中的LiquidCrystal.cpp,您只需要更改LiquidCrystal::write4bits
、LiquidCrystal::write8bits
和LiquidCrystal::pulseEnable
代码。前两种方法应首先在写入数据之前监视繁忙线路(BD7),最后一种方法将被修改以消除100us暂停。
我认为在默认代码中没有这样做的原因是,这些LCD的许多用户只是将R/W连接到接地,以便显示器始终处于写入模式,从而无法读取忙碌信号。但是,这是通过将_rw_pin设置为-1传递到库中的,因此脉冲和写入代码可以有条件地使用读/写引脚作为速度优化时检测繁忙的一种方式。
发布于 2010-08-18 00:10:32
可以在三个引脚上使用8位;您只需要一个移位寄存器。我使用的是mouser.com的HEF4094BP (运费比实际的芯片要贵)
移位寄存器的接线图和代码修改如下:http://www.arduino.cc/playground/Code/LCD3wires
发布于 2011-09-15 06:05:17
不久前,我修改了LiquidCrystal库以支持忙标志。请注意,真正的中断驱动操作是不可能的-对于每次读取,您需要切换E
nable行两次。因此,您将需要轮询忙标志。
然后我做了一些基准测试,发现轮询忙标志比仅仅等待大多数命令要慢。(例外是'clear‘和'home’命令)。原因是,在读模式和写模式之间切换需要额外的步骤,如对digitaWrite
的8个额外调用和对pinMode
的8个额外调用。即使使用16 this的Arduinos,速度也比等待100µs要慢。
在那之后,我写了一个库,它直接在批量模式下操作管脚寄存器-所有8个管脚都只需一次寄存器访问。在那之后,我通过投票获得了一些好处。
https://stackoverflow.com/questions/1822571
复制相似问题