ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
8 июля
251082 Топик полностью
LeonidPr (29.04.2011 15:22, просмотров: 186) ответил LeonidPr на Спасибо, посмотрю. Сейчас в эмуляторе он завелся, как реальный получим, буду запускать.
Второй день пытаюсь заставить нормально работать реальный индикатор. Все в принципе работает. Но один раз из десяти-двадцати. Т.е. включаю макет, и на экране ничего. Понажимаю кнопку сброса микроконтроллера раз 20, после этого все запускается и затем работает без проблем. Если выключить питание и потом включить секунд через пять-десять, все будет работать хорошо. Но если включить через полминуты- минуту, то опять таже фигня начнется. Думаю, может тайминги где-то неправильные у меня. Привожу код основных функций и инициализации //Чтение статуса дисплея BYTE LCD_ReadStatus() { BYTE stat; stat=0; LCD_DATA_TRIS=0xFF; Delay1TCY(); LCD_RD_PIN=0; LCD_WR_PIN=1; LCD_CD_PIN=1; LCD_CE_PIN=0; Delay10TCYx(10); stat=LCD_DATA_PORT; Delay10TCYx(10); LCD_CE_PIN=1; LCD_DATA_TRIS=0x00; return stat; } //Ожидание готовности дисплея к приему команд и данных void LCD_WaitReady() { BYTE counter; BYTE stat; counter=0; do { stat=LCD_ReadStatus(); counter++; if ((stat & 0x01) && (stat & 0x02)) break; }// while (counter<200); while(1); if (counter>5) LCD_Flags.bits.b0=1; } void LCD_WriteCommand(BYTE cmd) { LCD_WaitReady(); LCD_CD_PIN=1; LCD_WR_PIN=0; LCD_RD_PIN=1; LCD_CE_PIN=0; Delay10TCYx(10); //Задержка 10 мкс LCD_DATA_PORT=cmd; Delay10TCYx(5); //Задержка 5 мкс LCD_CE_PIN=1; Delay10TCYx(5); //Задержка 5 мкс } void LCD_WriteData(BYTE data) { LCD_WaitReady(); LCD_CD_PIN=0; LCD_WR_PIN=0; LCD_RD_PIN=1; LCD_CE_PIN=0; Delay10TCYx(10); //Задержка 10 мкс LCD_DATA_PORT=data; Delay10TCYx(5); //Задержка 5 мкс LCD_CE_PIN=1; Delay10TCYx(5); //Задержка 5 мкс } void LCDInit() { BYTE stat; LCD_DATA_TRIS=0; LCD_RST_TRIS=0; LCD_CE_TRIS=0; LCD_CD_TRIS=0; LCD_RD_TRIS=0; LCD_WR_TRIS=0; LCD_HALT_TRIS=0; LCD_DATA_PORT=0; LCD_RST_PIN=1; LCD_CE_PIN=1; LCD_CD_PIN=0; LCD_RD_PIN=1; LCD_WR_PIN=1; LCD_HALT_PIN=1; Delay10TCYx(10); //Задержка 10 мкс LCD_RST_PIN=0; Delay1KTCYx(1); //Задержка 100 мкс LCD_RST_PIN=1; Delay1KTCYx(10); //Задержка 1 мс do { stat=LCD_ReadStatus(); } while (!(stat && 0x20)); LCD_WriteCommand(0x98); //Graphics on, text off LCD_WriteData(0x00); LCD_WriteData(0x00); LCD_WriteCommand(0x42); //Set graphics home address LCD_WriteData(0x14); //20 columns LCD_WriteData(0x00); LCD_WriteCommand(0x43); //Set graphic area }