Obrigado mais uma vez projetos_afg e vtrx por terem colaborado.
Localizei uma fonte provável dos problemas: Ao aquecer a parte posterior do LCD os problemas começar (mais ou menos 25 graus celsius), ao afastá-lo da fonte de calor, o LCD funciona normalmente.
A rotina lcd_init(); eu uso na inicialização do programa, agora posso usá-lo de tempos em tempos para reinicar o LCD?
infelizmente não tenho mais pinos suficientes para poder usar a função RW do LCD.
Bom pelo que sei a função usb_task é necessária para manter a comunicação USB ativa, mas pelo que li aqui mesmo no fórum, não poderia estar dentro de um timer, agora não sei o porquê, e realmente depois que fiz isso coloquei-o dentro do loop principal, a comunicação ficou totalmente estável, comunicando com o PC por mais de semanas. Eu uso HID. Desta forma se for dado um time, a conexão cairá. Acredito que isso não seja verdade, mas eu não gostaria de mudar, pois demorou muito tempo para testar, e não possuo mais tempo para testar a comunicação USB.
Me preocupou bastante a falta de qualidade do displays, pois os dois são exatamente iguais, e um deles apresenta esse problema por aquecimento, agora se eu for usar em escala, precisarei testar um a um antes para ver se apresenta problemas. Mas esses são os percalços. Mas uma vez obrigado, e caso puderem me dar mais idéias me será muito útil.