Форум РадиоКот • Просмотр темы - Дисплей от Siemens S65
Сообщения без ответов | Активные темы
Страница 12 из 13
[ Сообщений: 257 ]
... , , , ,
Автор
Сообщение
vlad145
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Ср авг 24, 2011 19:47:20
Карма: 4
Рейтинг сообщений: 13
Зарегистрирован: Пт мар 06, 2009 22:54:37Сообщений: 130Откуда: Курган
Рейтинг сообщения: 0
mr_smit писал(а):
Немного переделал функцию
put_char , теперь можно выводить текст с масштабированием от 1 до 4.
Код:
// поместить символ в графическую память дисплея // m - масштаб текста. 1-самый маленький void put_char(char x, char y, char c, unsigned int color, char m) { char h,ch,p,mask,tt; x=DISP_H - CHAR_H - x; WRCMD(0xEF90); WRCMD(0x0504); WRCMD(0x0800+y); WRCMD(0x0A00+x); WRCMD(0x0900+y+CHAR_H*m-1); WRCMD(0x0B00+x+CHAR_W*m-1); for (h=CHAR_H; h>0; h--) { // every column of the character for(tt=0;tt<m;tt++) { ch=ascii_tab[ c-32 ][CHAR_H-h]; mask=0x01; for (p=0; p<CHAR_W; p++) { // write the pixels if (ch&mask) { WRDATA(color); if(m==2) { WRDATA(color); } if (m==3) { WRDATA(color); WRDATA(color); } if (m==4) { WRDATA(color); WRDATA(color); WRDATA(color); } } else { WRDATA(bgcolor); if(m==2) { WRDATA(bgcolor); } if (m==3) { WRDATA(bgcolor); WRDATA(bgcolor); } if (m==4) { WRDATA(bgcolor); WRDATA(bgcolor); WRDATA(bgcolor); } } mask=mask*2; } } } }
А для LPH8836 можно такое сделать? Вот код
put_char .
_________________ Владимир
Вернуться наверх
Реклама
mr_smit
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Чт авг 25, 2011 09:18:09
Вымогатель припоя
Карма: 4
Рейтинг сообщений: 16
Зарегистрирован: Пн мар 23, 2009 09:25:58Сообщений: 651Откуда: Самара
Рейтинг сообщения: 0
Так там то же самое. Практически один в один. Чуть изменить.
// поместить символ в графическую память дисплея void put_char(char x, char y, char c, unsigned int color, char rot,
char m )
И кусок функции переправить:
Код:
... for (p=0; p<CHAR_W; p++) // write the pixels { if (ch&mask) { lcd_write(color); if(m==2) { lcd_write(color); } if (m==3) { lcd_write(color); lcd_write(color); } if (m==4) { lcd_write(color); lcd_write(color); lcd_write(color); } } else { lcd_write(bgcolor); if(m==2) { lcd_write(bgcolor); } if (m==3) { lcd_write(bgcolor); lcd_write(bgcolor); } if (m==4) { lcd_write(bgcolor); lcd_write(bgcolor); lcd_write(bgcolor); } } mask=mask/2; } ...
Переделывал прям в браузере поэтому может где скобку какую не закрыл
_________________ Нельзя всё знать, достаточно понимать.
Вернуться наверх
Реклама
vlad145
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Чт авг 25, 2011 19:06:46
Карма: 4
Рейтинг сообщений: 13
Зарегистрирован: Пт мар 06, 2009 22:54:37Сообщений: 130Откуда: Курган
Рейтинг сообщения: 0
А в функции
put_string что то изменять(добавлять) нужно? У меня ругался на данную функцию пока не добавил
char m . В результате на экране вместо символов мусор.
Это функция
put_char :
Код:
// поместить символ в графическую память дисплея void put_char(char x, char y, char c, unsigned int color, char rot, char m) { char h,ch,p,mask; CS= 0; switch(rot) { default: case 0: lcd_reg(0x05);lcd_dat(0x0038); lcd_reg(0x17);lcd_dat8(x+CHAR_W-1, x); lcd_reg(0x16);lcd_dat8(y+CHAR_H-1, y); lcd_reg(0x21);lcd_dat8(x,y); lcd_reg(0x22); lcd_write8(0x76); break; case 1: lcd_reg(0x05);lcd_dat(0x0030); lcd_reg(0x16);lcd_dat8(x+CHAR_W-1, x); lcd_reg(0x17);lcd_dat8(y+CHAR_H-1, y); lcd_reg(0x21);lcd_dat8(y, x); lcd_reg(0x22); lcd_write8(0x76); break; } if (c>127) { c=c-57; //убираем отсутствующую часть таблицы ASCII }; for (h=0; h<CHAR_H; h++) // every column of the character { if (rot==1) ch=ascii_tab[ c-32 ][h]; else ch=ascii_tab[ c-32 ][CHAR_H-h-1]; mask=0x80; for (p=0; p<CHAR_W; p++) // write the pixels { if (ch&mask) { lcd_write(color); if(m==2) { lcd_write(color); } if (m==3) { lcd_write(color); lcd_write(color); } if (m==4) { lcd_write(color); lcd_write(color); lcd_write(color); } } else { lcd_write(bgcolor); if(m==2) { lcd_write(bgcolor); } if (m==3) { lcd_write(bgcolor); lcd_write(bgcolor); } if (m==4) { lcd_write(bgcolor); lcd_write(bgcolor); lcd_write(bgcolor); } } mask=mask/2; } } CS= 1; // deselect display }
Это функция
put_string :
Код:
// записать строку, начиная с координат x, y, цветом color и ориентацией orient // если orient=0, то горизонтально, если =1, то вертикально void put_string(unsigned char x, unsigned char y, char *str, unsigned int color, unsigned char orient, char m) { j=0; while (j<strlen(str)) { put_char(x+j*CHAR_W,y,str[j],color,orient,m); // 0 deg. rotated j++; } }
Может где ошибся или не дописал?
_________________ Владимир
Вернуться наверх
vlad145
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Чт авг 25, 2011 22:34:17
Карма: 4
Рейтинг сообщений: 13
Зарегистрирован: Пт мар 06, 2009 22:54:37Сообщений: 130Откуда: Курган
Рейтинг сообщения: 0
После очередного колдовства с кодом, получилось следующее. Код вывода символа и строки прилагаю. Почему то увеличение происходит только по вертикали.
_________________ Владимир
Вернуться наверх
Реклама
vlad145
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Пт авг 26, 2011 16:22:49
Карма: 4
Рейтинг сообщений: 13
Зарегистрирован: Пт мар 06, 2009 22:54:37Сообщений: 130Откуда: Курган
Рейтинг сообщения: 0
Наконец удалось увеличить по вертикали, но как то не так. Символы получаются как бы через строчку. Подскажиге уважаемые гуру, где косяк.
_________________ Владимир
Вернуться наверх
Реклама
vlad145
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Пт авг 26, 2011 19:23:34
Карма: 4
Рейтинг сообщений: 13
Зарегистрирован: Пт мар 06, 2009 22:54:37Сообщений: 130Откуда: Курган
Рейтинг сообщения: 0
Решено. Нужно было изменить следующий код:
Код:
for (h=0; h<CHAR_H*m; h++) // every column of the character { if (rot==1) ch=ascii_tab[ c-32 ][h/m]; else ch=ascii_tab[ c-32 ][CHAR_H-h/m];
_________________ Владимир
Вернуться наверх
Реклама
vlad145
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Сб авг 27, 2011 23:19:23
Карма: 4
Рейтинг сообщений: 13
Зарегистрирован: Пт мар 06, 2009 22:54:37Сообщений: 130Откуда: Курган
Рейтинг сообщения: 0
Доброго времени суток.
Есть вот такой код вывода на дисплей окружности, как закрасить её?
Код:
//// Рисуем окружность void lcd_circle(char xcenter, char ycenter, signed int rad, int color) { signed int tswitch,y1,x1 = 0; signed char d; CS=0; xcenter = DISP_H - xcenter; d = ycenter - xcenter; y1 = rad; tswitch = 3 - 2 * rad; while (x1 <= y1) { lcd_pixel(xcenter + x1, ycenter + y1, color); lcd_pixel(xcenter + x1, ycenter - y1, color); lcd_pixel(xcenter - x1, ycenter + y1, color); lcd_pixel(xcenter - x1, ycenter - y1, color); lcd_pixel(ycenter + y1 - d, ycenter + x1, color); lcd_pixel(ycenter + y1 - d, ycenter - x1, color); lcd_pixel(ycenter - y1 - d, ycenter + x1, color); lcd_pixel(ycenter - y1 - d, ycenter - x1, color); if (tswitch < 0) tswitch += (4 * x1 + 6); else { tswitch += (4 * (x1 - y1) + 10); y1--; } x1++; } CS=1; }
Я сделал через цикл, перебором радиуса, но мне кажется должен быть другой способ.
P.S. От использования окружности оказался в пользу квадратных индикаторов, быстро и практично.
_________________ Владимир
Последний раз редактировалось vlad145 Чт сен 15, 2011 18:43:35, всего редактировалось 1 раз.
Вернуться наверх
vlad145
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Чт сен 15, 2011 18:39:16
Карма: 4
Рейтинг сообщений: 13
Зарегистрирован: Пт мар 06, 2009 22:54:37Сообщений: 130Откуда: Курган
Рейтинг сообщения: 0
Доброго времени суток уважаемые. Есть такая задумка, реализовать смену экранов на данном дисплее. Как избежать постоянной перерисовки заполнения в цикле? Вот часть кода: ... const char m_main = 0, m_term = 1, m_kul = 2, m_set = 3; char mode; //Меню mode = m_main; while (1) { // Place your code here if (PINC.7 == 0) { mode++; if (mode == 4) mode = 0; if (PINC.6 == 0) mode = 0; }; if (mode == m_main) { fill_area(3,155,3,128,0x01FF); //Часы put_string(29,32,txt4,textcolor,0x01FF,0,3); put_string(76,47,txt6,textcolor,0x01FF,0,1); put_string(86,32,txt4,textcolor,0x01FF,0,3); put_string(73,25,txt4,textcolor,0x01FF,0,1); }; if (mode == m_term) { fill_area(3,155,3,128,0x02FF); sprintf( LcdBuffDevices,"%d", devices,1 ); delay_ms(50); //выводим информацию о кол-ве датчиков put_string(76,4,LcdBuffDevices,BLACK,0,1); //кол-во датчиков }; }; }; Бьюсь уже пару дней и все в пустую, помогите, плииииз.
_________________ Владимир
Вернуться наверх
choo-joe
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Ср фев 13, 2013 16:35:20
Зарегистрирован: Вс янв 20, 2013 02:02:48Сообщений: 7
Рейтинг сообщения: 0
не могу запустить ls020 i atmega8.
Спойлер Код:
#include <mega8.h> #include <delay.h> #include <spi.h> #include "lcd_init.h" #include <string.h> #define DISP_W 132 #define DISP_H 176 #define CHAR_H 14 #define CHAR_W 8 // RS = high Command // RS = low Data #define RS PORTB.0 #define CS PORTB.2 #define RESET PORTB.4 #define sky 0x54fb #define black 0x0000 #define white 0xFFFF #define green 0x07E0 #define blue 0x001F #define red 0xF800 #define yellow 0xDEE0 #define orange 0xAB00 #define pink 0xF97F #define brown 0x8200 #define grey 0x8410 #define violet 0x91D4 unsigned int bgcolor=0x0000; void m8_init_port(void) { // MK - LCD DDRB | PORTB // PB0 - RS 1 | 1 // PB1 - // 0 | 0 // PB2 - CS 1 | 1 // PB3 - DAT (MOSI) 1 | 0 // PB4 - Reset 1 | 1 // PB5 - CLK 1 | 0 // PB6 - // 0 | 0 // PB7 - // 0 | 0 // | // HEX 3D | 15 // PORTB=0x15; DDRB=0x3D; // init SPI SPCR=0x50; SPSR=0x01; } void lcd_write8(char dat) { spi(dat); } // запись двух байт void lcd_write(unsigned int dat) { lcd_write8(dat>>8); lcd_write8 (dat); } // пишем в память дисплея данные (2 байта) void lcd_d(unsigned int data) { CS=0; RS=0; lcd_write(data); CS=1; } // отсылаем команды (2 байта) void lcd_c(unsigned int command) { CS=0; RS=1; lcd_write(command); CS=1; } void fill_screen(unsigned int color) { unsigned int i; lcd_c(0xEF90); lcd_c(0x0500); lcd_c(0x0600); lcd_c(0x0700); for (i=0; i<DISP_W*DISP_H; i++) lcd_d(color); //DISP_W 132 DISP_H 176 } void lcd_init(void) { int i; //RS=1 Command //RS=0 DATA RESET=0; CS=0; delay_ms(5); RS=1; RESET=1; delay_ms(50); for (i=0;i<12;i++) lcd_c(INIT1[i]) ; delay_ms(7); for (i=0;i<20;i++) lcd_c(INIT2[i]); delay_ms(50); for (i=0;i<1;i++) lcd_c(INIT3[i]); delay_ms(5); //fill_screen(bgcolor); // очищаем экран от мусора CS=1; } void put_char(char x, char y, char c, unsigned int color) { char h,ch,p,mask,tt; //char m=1; // DISP_READY=0; x=DISP_H - CHAR_H - x; lcd_c(0xEF90); lcd_c(0x0504); lcd_c(0x0800+y); lcd_c(0x0A00+x); lcd_c(0x0900+y+CHAR_H-1); lcd_c(0x0B00+x+CHAR_W-1); for (h=CHAR_H; h>0; h--) // every column of the character { for(tt=0;tt<1;tt++) { ch=ascii_tab[c][CHAR_H-h]; mask=0x01; for (p=0; p<CHAR_W; p++) // write the pixels { if (ch&mask) { lcd_d(color); //if(m==2) lcd_d(color); } else { lcd_d(bgcolor); //if(m==2) lcd_d(bgcolor); } mask=mask*2; } } } } void put_string(unsigned char x, unsigned char y, char *str, unsigned int color) { unsigned char j=0; while (j<strlen(str)) { put_char(x+j*CHAR_W,y,str[j],color); // 0 deg. rotated str[j] j++; } } /* void put_dot(int x, int y,long int color) { send_cmd(0xEF90); send_cmd(0x0500); send_cmd(0x0800+x); send_cmd(0x0A00+y); send_data(color); } */ void lcd_poweroff (void) { lcd_c(0xEF00); lcd_c(0x7E04); lcd_c(0xEFB0); lcd_c(0x5A48); lcd_c(0xEF00); lcd_c(0x7F01); lcd_c(0xEFB0); lcd_c(0x64FF); lcd_c(0x6500); lcd_c(0xEF00); lcd_c(0x7F01); lcd_c(0xE262); lcd_c(0xE202); lcd_c(0xEFB0); lcd_c(0xBC02); lcd_c(0xEF00); lcd_c(0x7F01); lcd_c(0xE200); lcd_c(0x8000); lcd_c(0xE204); lcd_c(0xE200); lcd_c(0xE100); lcd_c(0xEFB0); lcd_c(0xBC00); lcd_c(0xEF00); lcd_c(0x7F01); } void ColorZone(int x1, int y1, int x2, int y2,long int color) { int i; lcd_c(0xEF90); // if(m_bRotate) // { // lcd_c(0x0500); // } // else // { lcd_c(0x0500); // } lcd_c(0x0800+x1); lcd_c(0x0900+x2); lcd_c(0x0A00+y1); lcd_c(0x0B00+y2); for(i=0; i<(x2-x1+1)*(y2-y1+1); i++) { lcd_d(color); } }
подсветку не подключаю, так как нету источника 12В.
На екран ничего не выводится, абсолютно.
Подключаю напрямую, без резисторов.
Ногу дисплея NC не трогаю.
Спасибо за ответы.
Вернуться наверх
Реклама
HHIMERA
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Ср фев 13, 2013 17:09:03
Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34Сообщений: 4583Откуда: ЮВ
Рейтинг сообщения: 0
.....
Питание не подаю
Мегу в панельку не вставляю
Проводки не припаиваю
Пачему не робит???
_________________ "Я не даю готовых решений, я заставляю думать!"(С)
Вернуться наверх
choo-joe
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Ср фев 13, 2013 17:15:34
Зарегистрирован: Вс янв 20, 2013 02:02:48Сообщений: 7
Рейтинг сообщения: 0
а что без подсветки роботать не будет никак??
Вернуться наверх
HHIMERA
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Ср фев 13, 2013 17:20:40
Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34Сообщений: 4583Откуда: ЮВ
Рейтинг сообщения: 0
Без подсветки можете ничего не увидеть... А без сопротивлений и питании 5 Вольт - спалить дисплей...
_________________ "Я не даю готовых решений, я заставляю думать!"(С)
Вернуться наверх
choo-joe
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Ср фев 13, 2013 17:21:29
Зарегистрирован: Вс янв 20, 2013 02:02:48Сообщений: 7
Рейтинг сообщения: 0
мк и дисплей роботают от 3в.
Вернуться наверх
choo-joe
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Ср фев 13, 2013 17:24:45
Зарегистрирован: Вс янв 20, 2013 02:02:48Сообщений: 7
Рейтинг сообщения: 0
по сути в исходниках вроде все окей, но не инициализует никак( на ноги мк цеплял вместо дисплея диоды. но те что отвезают за RS reset cs всегда горят.
Вернуться наверх
ibiza11
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Чт фев 14, 2013 12:46:20
Поставщик валерьянки для Кота
Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40Сообщений: 1900Откуда: Москва
Рейтинг сообщения: 0
choo-joe , включите подсветку. без нее есть подозрение, что вы просто не видите, что происходит на дисплее.
_________________ Ставим плюсы: )
Вернуться наверх
Kezoox
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Пн мар 25, 2013 01:16:23
Карма: -3
Рейтинг сообщений: -9
Зарегистрирован: Вт янв 01, 2013 12:36:33Сообщений: 46
Рейтинг сообщения: 0
без подсветки будет видно что работает но цвета непонятные почти чб
товарищи коты подскажите есть ли метод установить цветную картинку фон и поверх что то писать не перерисовывая её после стирания символа ?
Вернуться наверх
trey3499
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Пт янв 03, 2014 22:03:27
Первый раз сказал Мяу!
Зарегистрирован: Вт июн 08, 2010 10:39:11Сообщений: 33Откуда: гТверь
Рейтинг сообщения: 0
Всем привет! а проект дисплея для протеуса есть у кого?
Вернуться наверх
Moto_v3x
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Пт янв 03, 2014 23:09:46
Потрогал лапой паяльник
Карма: 13
Рейтинг сообщений: 43
Зарегистрирован: Ср мар 31, 2010 11:45:58Сообщений: 307Откуда: Славянск
Рейтинг сообщения: 0
Вернуться наверх
trey3499
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Ср янв 08, 2014 22:34:14
Первый раз сказал Мяу!
Зарегистрирован: Вт июн 08, 2010 10:39:11Сообщений: 33Откуда: гТверь
Рейтинг сообщения: 0
Да вот это. Большое спасибо.
Вернуться наверх
trey3499
Заголовок сообщения: Re: Дисплей от Siemens S65
Добавлено: Вт янв 21, 2014 15:30:50
Первый раз сказал Мяу!
Зарегистрирован: Вт июн 08, 2010 10:39:11Сообщений: 33Откуда: гТверь
Рейтинг сообщения: 0
Еще вопросик. а библиотеки ls020 для имитации дисплея нет в природе? просто дисплея на руках еще нет.
Вернуться наверх
Страница 12 из 13
[ Сообщений: 257 ]
... , , , ,
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения