恰好我也遇到过这个问题,原因是初始化是0x38要设置两次以上。
因为第一次在设置时,1602的控制芯片无法确定数据是几位的,只好默认是4位的。这是很有道理的。因为如果默认为8位,那四位用户怎么办?他们会很麻烦的。而默认为四位,对于8位用户则没什么了啦,因为在第一次设置0x38时,只有高四位3被识别,1602的控制芯片由此可知你要用8位数据线与他通信,这样第二次设置时高四位和第四位就都可以被接受了。而恰恰第四位中就由单双行设置位,如果只设置一次0x38的话,1602就处于默认的单行显示。
除此之外我还遇到另外一个问题,就是软件好像会改变lcd的特性,就是在相同的对比度电压输入下,不同的程序会有不同的显示效果。有两三次就是本来调好对比度了,改了改程序,就几乎看不清了,弄得我还以为没输出呢,动了动对比度输入电压,显示才又正常了。不知道你有没有遇到这样的问题。