求救:1602液晶的程序,不知道错在哪里。望指教,谢谢!
//====初始设定函数(8位元传输模式)===================void init_LCM(void)
{
E->DATA = 0;
write_inst(0x38);
write_inst(0x38);
write_inst(0x0c);
write_inst(0x01);
write_inst(0x06);
} // init_LCM()函数结束
//==== 写入指令函数 / 检测忙信号的=======================ok
void write_inst(char inst)
{
E->DATA = 0;
RS->DATA = 0;
RW->DATA = 0; delay1ms(5);
DB->DATA = inst; delay1ms(5);
E->DATA = 1; delay1ms(5);
E->DATA = 0; delay1ms(5);
check_BF(); // 检查是否忙碌
} // write_inst()函数结束
//==== 写入字符数据函数 ============================ok
void write_char(char chardata)
{
E->DATA = 0;
RS->DATA = 1;
RW->DATA = 0; delay1ms(5);
DB->DATA = chardata; delay1ms(5);
E->DATA = 1; delay1ms(5);
E->DATA = 0; delay1ms(5);
check_BF(); // 检查是否忙碌
delay1ms(1000);
} // write_char()函数结束
//====检查忙碌函数================================ok
void check_BF(void)
{
RS->DATA = 0;
RW->DATA = 1; delay1ms(5);
E->DATA = 1; delay1ms(5);
while(DB->DATA & 0x80); // 忙碌继续等
E->DATA=0; // 禁止读写动作
} //check_BF()函数结束
//==== 延迟函数 ================================ok
void delay1ms(int x)
{
usleep(1100*x);
}
另外一个版本的初始化函数:
//====初始设定函数(8位元传输模式)===================
void init_LCM(void)
{
delay1ms(15); //5.1
write_inst_n(0x38); // 5.2
delay1ms(5); //5.3
write_inst_n(0x38); // 5.4
delay1ms(5); //5.5
write_inst_n(0x38); // 5.6
write_inst(0x38); // 5.8 英文LCM设定两列,中交LCM可忽略
write_inst(0x08); // 5.9 显示功能-关显示幕-无游标-游标不闪
write_inst(0x01); // 5.10 清除显示幕(填0x20,I/D=1)
write_inst(0x06); // 5.11 输入模式-位址递增-关显示幕
write_inst(0x0c); // 5.12 显示功能-开显示幕-无游标-游标不闪
} // init_LCM()函数结束
请大家指教,谢谢! 补充:
D0~D7设置为1个bidir型8位PIO。RS、RW、E各为1为输出型PIO。
编译的时候,没有提示错误。通过AS方式下载,发现初始化的函数可以运行,但好像运行不正确(白屏)。后面预期显示的字符都显示不出来。从加入的LED显示知道,初始化函数、显示字符的语句都是运行到了的。
页:
[1]