试图向LCD接口的Atmega8使用2线

M

Mindaugasu

Guest
我试图使用接口AVR的通过将数据移位寄存器74HC164两条电线。但我无法取得我的代码正常工作:
代码:#包括<inttypes.h>

#包括<avr/io.h>

#包括<avr/interrupt.h>

#包括<avr/signal.h>

#包括<avr/delay.h>

#包括<avr/iom8.h>

#定义频率8000000

#定义datapin 0 / /从ATmega8的定义为74HC164 datapin

#定义clockpin 1 / /从ATmega8的定义为74HC164时钟引脚

#定义寄存器r16

/ *

液晶引脚连接到74hc164:

Q0的- “LCD_D4

第一季度- “LCD_D5

第二季- “LCD_D6

第3季- “LCD_D7

第四季度- “数控

问题5 - “数控

问题6 - “LCD_RS

问题7 - “LCD_E* /无效atmega8init(无效)



DDRC =(1“”DDC0)|(1“”DDC1);



无效sendByteToLCD(uint8_t LCDdata)



uint8_t一;PORTC&=〜(1“”0); / /设置datapin输出低电平

为(= 0,我“= 8,我 )/ /清除移位寄存器74HC164



PORTC | =(1“”1); / /设置clockpin输出高电平PORTC&=〜(1“”1); / /设置clockpin输出低电平)

为(= 0,我“= 7,我 )/ /写8位LCDdata登记的74HC164



如果(LCDdata&&0x01)后

(PORTC | =(1“”0); / /设置datapin输出高电平PORTC | =(1“”1); / /设置clockpin输出高电平_delay_us(100);

PORTC&=〜(1“”1); / /设置clockpin输出低电平PORTC&=〜(1“”0); / /设置datapin输出低电平)

其他的



PORTC&=〜(1“”0); / /设置datapin输出低电平PORTC | =(1“”1); / /设置clockpin输出高电平_delay_us(100);

PORTC&=〜(1“”1); / /设置clockpin输出低电平)

LCDdata = LCDdata“”1;

如果(1 == 7)



PORTC&=〜(1“”1);

PORTC | =(1“”0);

PORTC | =(1“”0);

)))

无效sendChar(uint8_t topack)/ /形式的数据准备好发送到74HC164



uint8_t包装;

/ *首4字节的包含液晶D4类第7天位

4和第5位不使用

第6位的LCD
 
Nantwich Education Partnership to brytyjska organizacja, zrzeszająca piętnaście szkół podstawowych i jedną średnią. Wszyscy rodzice dzieci uczęszczających do tych placówek dostali list, w którym pojawia się grożba wizyty w domu policji, jeśli młoda osoba gra w gry 18+.

Read more...
 
我会感到惊讶
, 如果你有只有一个字符。
你AND'ed数据和数据的最后LSB的一点,但不要忘记
, 下一个周期的其他在推动比LSB位的数据也将通过在多发的位置为一个字节
, 导致闪烁位。
这是胜少棘手
, 使2号线控制的液晶显示器-要么你应该使用像I2C或插入定时电路总线扩充检测字节结束断言E系还是其他什么东西。

 
移位寄存器的使用74HC595芯片
因为,当你转向新的数据移位寄存器,previusly产值dont改变。
后移控制使用第三针(使用3线insted 2线)加载移位寄存器的值到输出锁存器。

 
我在想第三线。这也许是更好
, 而不是搞乱与2线。感谢响应。

 
嗨,
是的,你可以用2线,但它是更为复杂。你必须移出半字节之间保持零的切换E系。在三线,或Davood的建议会更容易些。
关心,
罗伯特

 
你认为一个串行液晶显示器,或使一个小图片或类似的,还有很多的代码左右。也许您不有一个备用的串行端口,athough您可以配置任何端口可能做到这一点。也许你不实际的,只是一个想法。

 
BeeBop说:

嗨,

是的,你可以用2线,但它是更为复杂。
你必须移出半字节之间保持零的切换E系。
在三线,或Davood的建议会更容易些。

关心,

罗伯特
 
喜再次,
我从事同样的,但有知情同意和74HC174。我感触的是
, 我的初始化代码非常不同。我发送半字节。位置:
代码:

无效LCDInit(无效)(/ /初始化LCD I / O引脚Dlay = RTC的20;

而(Dlay = RTC)的;LCDNybble(0x003,0); / /发送init命令

Dlay =时钟 6; / /等待“为5毫秒

而(Dlay = RTC)的; / /液晶接受加利福尼亚LCDNybble(0x003,0); / /发送init命令

Dlay =时钟 1; / /等待“为160微秒

而(Dlay = RTC)的; / /液晶接受加利福尼亚LCDNybble(0x003,0); / /发送init命令

Dlay =时钟 1; / /等待“为160微秒

而(Dlay = RTC)的; / /液晶接受加利福尼亚LCDNybble(0x002,0); / /发送init命令0000 0010

Dlay =时钟 6; / /等待“为5毫秒

而(Dlay = RTC)的; / /液晶接受加利福尼亚LCDByte(0x028,0); / /步骤6,设置经营0010 1000LCDByte(0x008,0); / /步骤7,显示关闭0000 1000LCDByte(0x001,0); / /步骤8,显示清晰0000 0001LCDByte(0x006,0); / /步骤9,转移0000 0110LCDByte(0x00E,0); / /第10步,在0000 1110展出)/ /结束LCDInit
 
最后
, 我知道了。我的代码中发现的一些错误。此外
, 我用简化和元素我的二极管和电阻电路。
说明在这里:http://www.scienceprog.com/interfacing-lcd-to-atmega-using-two-wires/
此外
, 我附上原理图和这个职位的代码。
很抱歉,您还没有登录查看此附件

 
您也可以检查我的日常使用3线:
http://www.scienceprog.com/connect-lcd-to-atmega-using-3-wires/

 
只有一个没有-塔斯地址设置时间(从RS和RW系的建立
, 提高电子商务的时间)必须至少为40纳秒根据HDxxx液晶数据表
, 这是您的实现0。

但是
, 它工作,也有我的祝贺)。

 

Welcome to EDABoard.com

Sponsor

Back
Top