Уважаемые сэнсэи, подсобите, плз! В одном несложном девайсе на PIC16F877A понадобилось в качестве индикатора использовать ЖКИ DG16080-57S2FBLY Но он никак не хочет отображать данные. По-началу думал, что он сам для себя выдает -10В, но оказалось, надо подавать от внешнего источника. Все равно, вместо отображаемых данных сверху вниз с периодичностью ~300мс пробегает черная полоса спадающей яркости, но данные не выводятся.
Попросил программиста написать простейшую програмку с испытательной сеткой, чтоб хоть как-то оживить экран. Увы, глухо! Вот эта програмка. Что не так???
#define wait() DelayUs(5) #define LCD_GRAPHIC_WIDTH 160 void lcd_graphics_init(void) { // unsigned char commandData; lcd_res_low();// сброс индикатора lcd_enable_low(); lcd_rs_low(); lcd_cs_low(); DelayMs(1); lcd_res_high();// резет в 1 DelayMs(50); // инициализация графического режима lcd_write_command(0x00,0x32); lcd_write_command(0x01,0x07); lcd_write_command(0x02,(LCD_GRAPHIC_WIDTH / 8)-1); lcd_write_command(0x03,0x4F); lcd_write_command(0x08,0x00); lcd_write_command(0x09,0x00); lcd_write_command(0x0A,0x00); lcd_write_command(0x0B,0x00); // очистка индикатора lcd_graphics_clear(); } void lcd_graphics_clear(void) { unsigned int i; lcd_write_command(0x0A,0x00);// установка в начало lcd_write_command(0x0B,0x00); // обнуление for(i = 0; i < 800; i++) { lcd_write_command(0x0C,0x00); } // вывод "сетки" для тестовой проверки второй половины экрана for(i = 800; i < 1600; i++) { lcd_write_command(0x0C,0x55); } lcd_write_command(0x0A,0x00);// установка в начало lcd_write_command(0x0B,0x00); } //--------------------------------------------- void lcd_write_command(unsigned char command, unsigned char data) { lcd_writecom(command); wait(); lcd_writedat(data); wait(); } //-------------------------------------------- void lcd_writedat(unsigned char byte) { lcd_rs_low(); lcd_rw_low(); wait(); fnSetLcdData(byte);// вывод байта на шину данных wait(); lcd_strobe_enable(); } //------------------------------------------ void lcd_writecom(unsigned char byte) { lcd_rs_high(); lcd_rw_low(); wait(); fnSetLcdData(byte);// вывод байта на шину данных wait(); lcd_strobe_enable(); } //------------------------------------------- void lcd_strobe_enable(void) { wait(); lcd_enable_high(); wait(); lcd_enable_low(); wait(); } //--------------------------------------------
Заранее благодарю.
|