grek81 0 2 октября, 2009 Опубликовано 2 октября, 2009 · Жалоба В программе Proteus есть LCD монитор HDM32GS12Y-3,ни как не могу его инициализировать.Использую CodeVision мега 32.То есть хотелось бы написать программу для графического LCD 122x32,но ни как не получается.Не могу понять инициализировался LCD или нет.Хотелось бы нарисовать точку в определенном месте,но никак не могу. LCD_CONTROL_DDR=0xFF;// óñòàíàâëèâàåì PORTA â âûõîäû LCD_DATA_DDR=0xFF; // óñòàíàâëèâàåì PORTC â âûõîäû SetBit(LCD_CONTROL_PORT, E);//Íà÷àëüíîå çíà÷åíèå ñèãíàëà èíäèêàòîðó ClrBit(LCD_CONTROL_PORT, RES);// âûâîä RES â ñîñòîÿíèè ëîãè÷åñêîãî “0” delay_us(20); SetBit(LCD_CONTROL_PORT, RES);// óñòàíàâëèâàåì íà RES = 1; delay_ms(2); SetBit(LCD_CONTROL_PORT, E1);//âêëþ÷åíèå E1 ClrBit(LCD_CONTROL_PORT, E2); WriteCode(0xE2);//Reset ClrBit(LCD_CONTROL_PORT, E1);//âêëþ÷åíèå E2 SetBit(LCD_CONTROL_PORT, E2); WriteCode(0xE2);//Reset SetBit(LCD_CONTROL_PORT, E1);//âêëþ÷åíèå E1 ClrBit(LCD_CONTROL_PORT, E2); WriteCode(0xEE);//ReadModifyWrite off ClrBit(LCD_CONTROL_PORT, E1);//âêëþ÷åíèå E2 SetBit(LCD_CONTROL_PORT, E2); WriteCode(0xEE);//ReadModifyWrite off SetBit(LCD_CONTROL_PORT, E1);//âêëþ÷åíèå E1 ClrBit(LCD_CONTROL_PORT, E2); WriteCode(0xA4);//Âêëþ÷èòü îáû÷íûé ðåæèì ClrBit(LCD_CONTROL_PORT, E1);//âêëþ÷åíèå E2 SetBit(LCD_CONTROL_PORT, E2); WriteCode(0xA4);//Âêëþ÷èòü îáû÷íûé ðåæèì SetBit(LCD_CONTROL_PORT, E1);//âêëþ÷åíèå E1 ClrBit(LCD_CONTROL_PORT, E2); WriteCode(0xA9);//Âêëþ÷èòü îáû÷íûé ðåæèì ClrBit(LCD_CONTROL_PORT, E1);//âêëþ÷åíèå E2 SetBit(LCD_CONTROL_PORT, E2); WriteCode(0xA9);//Âêëþ÷èòü îáû÷íûé ðåæèì SetBit(LCD_CONTROL_PORT, E1);//âêëþ÷åíèå E1 ClrBit(LCD_CONTROL_PORT, E2); WriteCode(0xC0);//Âåðõíþþ ñòðîêó íà 0 ClrBit(LCD_CONTROL_PORT, E1);//âêëþ÷åíèå E2 SetBit(LCD_CONTROL_PORT, E2); WriteCode(0xC0);//Âåðõíþþ ñòðîêó íà 0 SetBit(LCD_CONTROL_PORT, E1);//âêëþ÷åíèå E1 ClrBit(LCD_CONTROL_PORT, E2); WriteCode(0xA1);//Invert scan RAM ClrBit(LCD_CONTROL_PORT, E1);//âêëþ÷åíèå E2 SetBit(LCD_CONTROL_PORT, E2); WriteCode(0xA0);//NonInvert scan RAM SetBit(LCD_CONTROL_PORT, E1);//âêëþ÷åíèå E1 ClrBit(LCD_CONTROL_PORT, E2); WriteCode(0xAF);//Display on ClrBit(LCD_CONTROL_PORT, E1);//âêëþ÷åíèå E2 SetBit(LCD_CONTROL_PORT, E2); WriteCode(0xAF);//Display on и точку рисую вот так но ничего не получается,либо каких то непонятных 2 точки *Ôóíêöèÿ êîòîðàÿ ðåñóåò íà ýêðàíå 1 ïèêñåë*/ void LCD_PUT_PIXEL(byte x, byte y){ //Îáüÿâëÿåì ïåðåìåííûå byte bite; byte page; byte data, data2; //Âûõîä åñëè òî÷êà ëåæèò âíå ýêðàíà if((x>MAX_X)|(y>MAX_Y)) return; //Âûáèðàåì êðèñòàëë if(x>=61){ ClrBit(LCD_CONTROL_PORT, E1); SetBit(LCD_CONTROL_PORT, E2); x=x-61; } else{ ClrBit(LCD_CONTROL_PORT, E2); SetBit(LCD_CONTROL_PORT, E1); } //page-íîìåð ñòðàíèöû page=y/4; //bite-Íîìåð áàéòà êîòîðûé íàì ïðåäñòîèò âûâåñòè bite=y%4; //Óñòàíàâëèâàåì ñòðàíèöó è àäðåññ LCD_SET_PAGE(page); LCD_SET_ADDRESS(x); //×èòàåì áàéò ñ LCD(2 öèêëà ò.ê. â ïåðâîì ìóñîð) data=ReadData(); data=ReadData(); // çàâèñèìîñòè îò ìåòîäà âûâîäà âûâîäèì íàø ïèêñåë. // Àäðåññ ñòðàíèöû íå ìåíÿëñÿ, ïîýòîìó åãî íå óñòàíàâëèâàåì switch(met){ case MET_OR : { data=data|(1<<bite); break;} case MET_XOR : {data=data^(1<<bite); break;} } LCD_SET_ADDRESS(x); WriteData(data); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
designer 0 18 октября, 2009 Опубликовано 18 октября, 2009 · Жалоба если получится , то отпишите, мне тоже интересно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
grek81 0 20 октября, 2009 Опубликовано 20 октября, 2009 · Жалоба Отпишусь,занимаюсь этим вопросом.В инете что то ничего не нашел Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smartfox 0 14 октября, 2019 Опубликовано 14 октября, 2019 · Жалоба Вот ето примернии проект на Мега8 читайте описание README HDM32GS12Y3.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться