问题描述:
(1)按照《实验教程》一书第198页的“LCD实验”,显示正常:
第一行显示为“Welcome To ZLG”,
第二行显示为“www.zlgmcu.com”;
(2)改写代码,从“LCD实验”提取出LCD显示模块“LCD_Driver.v”,使用Core8051与其通信,使显示需要显示的内容,可正常显示:
第一行显示为“ AMT TCU ”,
第二行显示为“ZLG OUC SDU supp”;
(3)但是,添加其他功能模块后(这些功能模块,并不影响LCD_Driver.v),发现LCD不能正常显示:
现象a:第一个画面显示不正常:
正确的显示内容应该是:
第一行显示为“ AMT TCU ”,
第二行显示为“ZLG OUC SDU supp”;
但实际显示的内容是:
第一行显示为“ AMT TCU ”,
第二行显示为“ZLG#MW@#PET#qtpp”;
容易发现:第一行显示正常,但第二行显示不正常;
现象b:第二个画面显示不正常:
第二个画面的功能是实时显示Fusion芯片AFS600的AV0、AC0两个引脚上的电压值:
正确的显示内容应该是:
第一行显示为“AV0:x.xV AD:xxx”,
第二行显示为“AC0:x.xV AD:xxx”;
但实际显示的内容是:
第一行显示为“AV0:x.xV AD:xxx”,
第二行显示为“AC082,2T !@F8xxx”; //注:红色的“xx”代表实时显示的电压值或AD值;
并且,悬空AC0时,显示"AC082,2T !@F8xxx";连接AC0时,显示"AC0;2-:T !@F:xxx"
容易发现:第一行显示正常,但第二行显示不正常;并且,第二行显示的内容还随着AC0是否有接入而改变;
(4)根据(3)的现象,我猜测可能是给LCD的读写时钟太快了,导致数据传输不问题,进而致使显示不正常。所以,我将给LCD的读写时钟从500Hz降到了250Hz,现象如下:
第一个画面:
正确的显示内容应该是:
第一行显示为“ AMT TCU ”,
第二行显示为“ZLG OUC SDU supp”;
但实际显示的内容是:
“ AMT TCU ”,
“ZLG!OUB!RET!stpp”; //注:红色的“E”是跳变的,有时候显示为“E”,有时候显示为“乱码”(此乱码在ASCII码表中,未找到)
第二个画面:
正确的显示内容应该是:
第一行显示为“AV0:x.xV AD:xxx”,
第二行显示为“AC0:x.xV AD:xxx”;
但实际显示的内容是:
第一行显示为“AV0:x.xV AD:xxx”,
第二行显示为“AC0:x.xV !@D:xxx”;
并且,悬空AC0时,显示"AC0:x.xV !@D:xxx";连接AC0时,显示"AC0;2/8V !@D:xxx";(注:红色的“/”是跳变的,有时候显示为“/”,有时候显示为“.”
容易发现:显示情况上看,250Hz比500Hz稍微好一些,但问题仍然没有解决;
(5)不同于(3)和(4)的思路,(5)的思路是将“显示内容”直接写在Verilog代码中,不再使用Core8051给LCD_Driver.v传递“显示内容”,但显示仍然不正常。
据此,我判断,问题不是出在Core8051和LCD_Driver.v的通信上,而是出在LCD_Driver.v本身。(不知这个推断是否合理,请批评!)
请教:有遇到类似问题的吗?原先的系统可以正常运行,加入一个并不影响其他模块的模块后,原来的系统就不能正常运行了。
问题出在哪儿?应该从哪个地方下手去找问题?可能出现问题的地方是哪儿?
现在卡住了,不知从哪儿下手,连解决思路都没有了。给个解决思路,或者建议,也行啊!谢谢!
|