|
SED1335,PIC18F4550 и LCD320x240, разбираем по косточкам модуль SED1335.c |
|
|
|
Jan 25 2008, 21:00
|

Знающий
   
Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143

|
Привет народ.Вот решил я слепить себе нечто из указанных в теме компонентов.Нарисовал и изготовил макетку, красиво всё распаял и написал из надёрганных в сети кусков маленькую програмку для управления ЖКИ. Вначале, после нудного изучения даташитов никак не мог инициализировать ЖКИ, но потом разобрался что к чему и наконец он начал подавать признаки жизни и засветился. Компилятор, который я пользую - CCS, имеет в своём составе файл SED1335.C , но как я не пытался приспособить его, так и не смог.Порывшись в сети,я нашёл другой файл с таким же названием, но вроде бы не для ПИКов, а для чего-то другого.Однако , слегка подшаманив его, я смог встроить его в прогу и он заставил таки выдавать на экран символы в текстовом режиме(даже с возможностью размещения в заданое место) и переключаться в графический режим. И на этом всё и закончилось. Все попытки нарисовать линию или круг или просто точку,несмотря на множество примеров, я так и не смог. Позаимствовав из старого файла процедуру
void glcd_pixel(int16 x, int16 y, int1 color) { int8 data; int16 addr; // Calculate the byte address containing the pixel addr = GLCD_GRAPHICS_ADDR + (GLCD_WIDTH/8 * y + x/8); // Read the byte of data at the address data = getData(addr); // Turn the pixel on or off if(color == ON) bit_set(data, 7 - x%8); else bit_clear(data, 7 - x%8); // Write the new data byte to display memory setData(addr, data); }
я попробовал нарисовать на экране пиксель, но он вроде как нарисовался но разместился не в тех координатах, которые я указывал.Как я понимаю, за размещение отвечает строка //GLCD_GRAPHICS_ADDR- нач. адрес- 1200, GLCD_WIDTH- кол во символов в строке- 320 addr = GLCD_GRAPHICS_ADDR + (GLCD_WIDTH/8 * y + x/8); Может кто из вас раскомментирует эту странную формулу и подправит её, если она неправильная.
Сообщение отредактировал andreichk - Jan 25 2008, 21:03
--------------------
|
|
|
|
|
Jan 28 2008, 07:38
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 1-11-06
Пользователь №: 21 855

|
Цитата(andreichk @ Jan 27 2008, 07:06)  Теперь надо научиться выводить параметры и картинки.Может кто подскажет , куды кинуться? посмотри микрочиповскую реализацию www.microchip.com/graphics и немного по-русски http://microchip.com.ru/1010/Support/GUI.html
|
|
|
|
|
Jan 29 2008, 22:32
|

Знающий
   
Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143

|
Сегодня закончил оформление внешнего вида. Нарисовал сетку размером 320х240, но она вся не влезла, очевидно из-за каких-то ограничений.Пришлось поделить её на две части и с помошью процедуры перевёртыша загрузить два раза.Благодаря двухслойной функции экрана сетка не затирается.Так же нарисовал несколько маленьких картинок и подгрузил их для красявости. Ниже привожу текст процедуры и фото
void bild(unsigned int16 addr,unsigned char data) { send_msg( 0x46, 1, 0, 1, 0 ); Output_bit(LCD_A0 ,0); write_data( (addr) & 0x00ff ); write_data( (addr)>>8 & 0x00ff ); send_msg( 0x42, 1, 0, 1, 0 );// Output_bit(LCD_A0 ,0); Output_d(data); Output_bit(LCD_CS,0);// Output_bit(LCD_WR,0); // Output_bit(LCD_WR,1);// Output_bit(LCD_CS,1);// }
void DrawImage(unsigned int16 y1,unsigned int16 y2 )// нормальный вид { unsigned int16 addr, x,y,i;i=0; for (y = y1; y < y2; y++) { for (x = 0; x < 264;x=x+8) { addr = 40 * y + x/8 - 1 ;//10802;//расчитать байт адреса, содержащего пиксель bild( addr,Grid_8x4[i++]);// работает } } }//--------------------------OK //##################################################################### void DrawImage11(unsigned int16 y1,unsigned int16 y2 )// перевёртыш
{ unsigned int16 addr, x,y,i;i=3959; for (y = y1; y < y2; y++)// { for (x = 264; x > 0;x=x-8) { addr = 40 * y + x/8 - 2 ;//10802;//расчитать байт адреса, содержащего пиксель bild( addr,Grid_8x4[i--]);// работает } } }//--------------------------OK //#####################################################################
--------------------
|
|
|
|
|
Feb 1 2008, 10:15
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Цитата(andreichk @ Jan 30 2008, 02:32)  Сегодня закончил оформление внешнего вида. Нарисовал сетку размером 320х240, но она вся не влезла, очевидно из-за каких-то ограничений.Пришлось поделить её на две части и с помошью процедуры перевёртыша загрузить два раза.Благодаря двухслойной функции экрана сетка не затирается.Так же нарисовал несколько маленьких картинок и подгрузил их для красявости. Ниже привожу текст процедуры и фото
Код //##################################################################### void DrawImage11(unsigned int16 y1,unsigned int16 y2 )// перевёртыш
{ unsigned int16 addr, x,y,i;i=3959; for (y = y1; y < y2; y++)// { for (x = 264; x > 0;x=x-8) { addr = 40 * y + x/8 - 2;//10802;//расчитать байт адреса, содержащего пиксель bild( addr,Grid_8x4[i--]);// работает } } }//--------------------------OK //##################################################################### Не вдаваясь в подробности, просто по оформлению, используй теги под символом #. Если кто смотреть будет, так читать легче.
|
|
|
|
|
Feb 4 2008, 23:07
|

Знающий
   
Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143

|
Слепил сегодня процедурку рисования кривых.Теперь вот голову ломаю . как это всё синхронизировать, чтобы картинка устойчивой была.Подскажите плиз
//##################################################################### void front(unsigned int8 x,unsigned int8 y_anf,unsigned int8 y_end) {unsigned int8 y; for (y = y_anf ; y > y_end; y--) { pixel(x,y,1); } }//--------------------------OK //##################################################################### void spad(unsigned int8 x,unsigned int8 y_anf,unsigned int8 y_end) {unsigned int8 y; for ( y = y_anf ; y < y_end ; y++ ) { pixel(x,y,1); } }//--------------------------OK //##################################################################### void pix(unsigned int8 y_pos)// рисуем кривую, типа синусоиды и пр. {unsigned int8 x , y , yy ; x = 1; y = 0; yy = 0; for(;;){ x++; if (x==255) {x=1;setCursorAddress(0x2581);clear_graphic();} delay_ms(Zeitablenkung_x(0)); //развёртка Sec/Div yy=y; y = input_b()+y_pos; // y = Amplitude_y(1) + y_pos-150; if (yy>y) front(x,yy,y); // Рисуем фронт if (yy<y) spad(x,yy,y); // Рисуем спад pixel(x,y,1);// Рисуем вершину } }//--------------------------OK //#####################################################################
--------------------
|
|
|
|
|
Feb 10 2008, 17:41
|

Знающий
   
Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143

|
Выяснил причину по которой HEX-файл неполностью зашивался в процессор. Оказывается программа прошивки IC-Prog1.6А програмирует только до адреса 0х1000.Дальше сплошные FFFF. Выкинул её нафик.Теперь програмирую другой прогой - P18 Parallelportbrenner V1.8 , взятой с сайта http://www.sprut.de. По ходу научился выводить тексты в графическом режиме и переменные величины. //########## выводим на экран числа в графическом режиме ################## void displayVoltage(int wert) { char voltage[9]; sprintf(voltage, "%f",(float)(1.715*(5.00 - wert * .01960784))); // преобразуем в текст voltage[4] = '\0'; //ограничиваем тремя знаками rect(5, 230, 29, 237, 1,0); //стираем старое значение text57(5, 230, voltage, 1, 1); //выводим новое значение }//--------------------------OK //####################################################
--------------------
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|