Перейти к содержанию

Помогите! Atmega16 И Lcd !


Рекомендуемые сообщения

Нет постоянно регенерировать низя еепром выйдет из строя.Перед отключением будет некая команда,после неё запись в память.Переменных несколько;1-считает единицы.2-десятки,3-сотни,4- тысячи.

Мне кажется,что всё это можно реализовать проще,но не знаю как.Код получился огроменный.Наверное я где-то туплю.В железе работает.

#include <tiny2313.h>

#asm
  .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd_rus.h>
#include <delay.h>
unsigned char sch=0,des=0;
unsigned int sot=0,tys=0;
interrupt [EXT_INT1] void ext_int1_isr(void)
  {
  if(sch!=9)
    {
    ++sch;
    }
     else
         {
         sch=0;
         }       
   ++des;
   ++sot;
   ++tys;         
  }

// Declare your global variables here

void main(void)
{

#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif


PORTB=0x08;
DDRB=0x08;


PORTD=0x7F;
DDRD=0x77;


GIMSK=0x80;
MCUCR=0x00;
EIFR=0x80;
ACSR=0x80;
lcd_init(16);

lcd_gotoxy(5,0);lcd_putsf("ГОТОВ");
delay_ms(2000);
lcd_clear();
lcd_gotoxy(9,0);lcd_putsf("0");
lcd_gotoxy(5,1);lcd_putsf("МОТАЕМ");
#asm("sei")

while (1)
  {    
   #asm("cli")

if(sch==0){lcd_gotoxy(9,0);lcd_putsf("0");lcd_gotoxy(1,1);lcd_putsf("витков считано");}
if(sch==1){lcd_gotoxy(9,0);lcd_putsf("1");}
if(sch==2){lcd_gotoxy(9,0);lcd_putsf("2");}
if(sch==3){lcd_gotoxy(9,0);lcd_putsf("3");}
if(sch==4){lcd_gotoxy(9,0);lcd_putsf("4");}
if(sch==5){lcd_gotoxy(9,0);lcd_putsf("5");}
if(sch==6){lcd_gotoxy(9,0);lcd_putsf("6");}
if(sch==7){lcd_gotoxy(9,0);lcd_putsf("7");}
if(sch==8){lcd_gotoxy(9,0);lcd_putsf("8");}
if(sch==9){lcd_gotoxy(9,0);lcd_putsf("9");}          


switch(des)
 {
case 10  : lcd_gotoxy(8,0);lcd_putsf("1");break;
case 20 : lcd_gotoxy(8,0);lcd_putsf("2");break;
case 30 : lcd_gotoxy(8,0);lcd_putsf("3");break;
case 40 : lcd_gotoxy(8,0);lcd_putsf("4");break;
case 50 : lcd_gotoxy(8,0);lcd_putsf("5");break;
case 60 : lcd_gotoxy(8,0);lcd_putsf("6");break;
case 70 : lcd_gotoxy(8,0);lcd_putsf("7");break;
case 80 : lcd_gotoxy(8,0);lcd_putsf("8");break;
case 90 : lcd_gotoxy(8,0);lcd_putsf("9");break;    
 }
 if(des==100){des=0;}
 switch(sot)
   {
    case 100:lcd_gotoxy(7,0);lcd_putsf("10");break;
    case 200:lcd_gotoxy(7,0);lcd_putsf("20");break;
    case 300:lcd_gotoxy(7,0);lcd_putsf("30");break;
    case 400:lcd_gotoxy(7,0);lcd_putsf("40");break;
    case 500:lcd_gotoxy(7,0);lcd_putsf("50");break;
    case 600:lcd_gotoxy(7,0);lcd_putsf("60");break;
    case 700:lcd_gotoxy(7,0);lcd_putsf("70");break;
    case 800:lcd_gotoxy(7,0);lcd_putsf("80");break;
    case 900:lcd_gotoxy(7,0);lcd_putsf("90");break; 
    }
    if(sot==1000){sot=0;}
 switch (tys)
   {
  case 1000:lcd_gotoxy(6,0);lcd_putsf("1000");break;
  case 2000:lcd_gotoxy(6,0);lcd_putsf("2000");break;
  case 3000:lcd_gotoxy(6,0);lcd_putsf("3000");break;
  case 4000:lcd_gotoxy(6,0);lcd_putsf("4000");break;
  case 5000:lcd_gotoxy(6,0);lcd_putsf("5000");break;
  case 6000:lcd_gotoxy(6,0);lcd_putsf("6000");break;
  case 7000:lcd_gotoxy(6,0);lcd_putsf("7000");break;
  case 8000:lcd_gotoxy(6,0);lcd_putsf("8000");break;
  case 9000:lcd_gotoxy(6,0);lcd_putsf("9000");break;
   }             

   if(tys>=9999)
   {OCR1A=0;lcd_clear();lcd_gotoxy(5,0);lcd_putsf("10000");
   lcd_gotoxy(1,1);lcd_putsf("Счет остановлен");
   delay_ms(5000);lcd_clear();lcd_gotoxy(2,0);lcd_putsf("Максимальный");
   lcd_gotoxy(5,1);lcd_putsf("отсчет");delay_ms(5000);}                              

  delay_us(100);

 #asm("sei")             
 };
}

Изменено пользователем evgesha53
Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 100
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

Извини, но писать код короче мне сейчас неохота, сделай так:

eeprom unsigned char sch=0,des=0;

eeprom unsigned int sot=0,tys=0;

и будет тебе счастье, переписывать программу не придется вообще, если до этого работало.

скажу проще:

создаешь переменную. ну скажем int и вывод на дисплей организуй так:

lcd_putchar(perem/1000+0x30);

lcd_putchar(perem%1000/100+0x30);

lcd_putchar(perem%1000%100/10+0x30);

lcd_putchar(perem%1000%100%10+0x30);

Ссылка на комментарий
Поделиться на другие сайты

Код получился огроменный...

И совершенно избыточный. Похоже это Вам для какого то счетчика витков или подобного нужно. Чтобы при отключении питания можно было начать с того же места мотать? Замечания по коду:

-Совсем необязательно вводить переменные для десятков, тысяч и т.д. Берете одну интовую переменную и все. До 65535 хватит... В обработчике ее приращиваете на единицу.

-Заводите флаг в обработчике. После приращения счетчика взводите его.

-В основном цикле проверяете этот флаг - если стоит - обновляете дисплей и сбрасываете флаг...

-Можно выводить на дисплей сразу переменные. Для этого делаете преобразование bcd счетчика и результат ложите в буфер и выводите его стандартной функцией на дисплей... На форуме есть примеры - выкладывал неоднократно, поищите...

-Для сброса переменной-счетчика можно предусмотреть кнопку..

-Чтобы запоминать при отключении питания переменную делаете просто: мониторите наличие питания (МК питаете через диод+конденсатор) - пропало до диода со стороны БП - быстренько (чтоб конденсатора хватило, или ионистора) записываем в еепром переменную... Либо по кнопке... ибо про bod почитайте..

-После включения доставайте из eeprom значения и инициализируйте им рабочую переменную...

-Не используйте квалификаторы eeprom - лучше функции записи чтения/записи eeprom по определенному адресу...

Это примерно. Но так можно создать более-менее надежную систему и получить простой читаемый код при этом...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

пропало до диода со стороны БП - быстренько (чтоб конденсатора хватило, или ионистора) записываем в еепром переменную

Вот кстати раз уж пошла тема, какая ёмкость для этого нужна? Может кто ставил эксперименты? :)

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Ясно всё.Буду думать.

Так пробовал

eeprom unsigned char sch=0,des=0;

eeprom unsigned int sot=0,tys=0;

теряются показания.Из-за несуразного кода.Буду что-то типа с переменной мутить,чтоб код уменьшить.

Ато в тинку не влезит.Там ещё шим будет мотором управлять и хотел через матрицу сделать ввод необходимого числа витков с сигнализацией по окончанию отсчёта.

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Значит так:

Обьявляем глобальную переменную. Например eeprom int perem=0;

В прерывании на инт: perem++; delay_ms(200); Пауза для устранения дребезга. Вообщем щас не за дребезг.

Основной цикл:

lcd_clear();

lcd_gotoxy(0,0);

lcd_putsf("Намотали ");

lcd_putchar(perem/1000+0x30);

lcd_putchar(perem%1000/100+0x30);

lcd_putchar(perem%1000%100/10+0x30);

lcd_putchar(perem%1000%100%10+0x30);

lcd_putsf(" в.");

delay_ms(200);

Всё ;) По идее при обесточке показания сохраняться. А там кнопку сброса и прочее додумывай сам.

Либо мутим обновление дисплея при срабатывании прерывания. Обьявляем еще одну глобальную переменную например char sr=1;

добавляем в обработчик прерываний sr++;

в основной цикл условие

if (sr) {

lcd_clear();

lcd_gotoxy(0,0);

lcd_putsf("Намотали ");

lcd_putchar(perem/1000+0x30);

lcd_putchar(perem%1000/100+0x30);

lcd_putchar(perem%1000%100/10+0x30);

lcd_putchar(perem%1000%100%10+0x30);

lcd_putsf(" в.");

sr=0;

};

Всё ;)

компактнее вроде некуда ;)

Изменено пользователем VipAndrey
Ссылка на комментарий
Поделиться на другие сайты

Огромное тебе спасибо.Не в первый раз озадачил тебя .

Завтра в коде проработаю.

Спасибо,что время нашёл.

Офигеть и будет работать??? :blink:

Сейчас ещё книгу открою,буду код изучать.

Изменено пользователем evgesha53
Ссылка на комментарий
Поделиться на другие сайты

Давай чтобы не флудить перенесем бедеду куда нить, предлагаю либо мэйл агент(mail.ru) либо личку ) я так понимаю вопросов у тебя достаточно ;)

Ссылка на комментарий
Поделиться на другие сайты

Значит так:

Обьявляем глобальную переменную. Например eeprom int perem=0;

В прерывании на инт: perem++;...

И примерно через 100000 витков эта переменная протрет до дыры ячейку eeprom...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

Согласен. Только вот это тут не главное - я показал как можно уменьшить код. А добавить обработчик, который вытаскивает при старте переменную и сохраняет при завершении не трудно. Опять таки если автору это нужно будет ;)

Ссылка на комментарий
Поделиться на другие сайты

Ну всё правильно,мне и нужен был пример,как в переменную засунуть выеденные значения.

А в еепром всё равно планируется записывать с кнопки при необходимости.

Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте, извиняюсь, что вклиниваюсь, но вопрос по теме, а новую создавать не охото :)

Имею индикатор 16*1, в результате попыток подключения и включения его был спален контроллер :( , вот теперь купил второй и не охото его сразу палить...

Вобщем, вопрос в следующем:

при подаче на индикатор питания (и на 3 ногу минус питания для контрастности) на его 4 ножке (RS), 5 (R/W) и 12 (5 бит данных) появляются единички :blink:, а на дисплее появляются 8 прямоугольничков (из 16 почемуто :blink: )

Это нормально? Мне кажется от этого прошлый МК и умер, т.к. все выводы на нём были назначены как выходы, с нулями на концах по умолчанию.

Вот даже не знаю как и инициализировать его в таком состоянии(

Изменено пользователем Paska_2
Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте, извиняюсь, что вклиниваюсь, но вопрос по теме, а новую создавать не охото :)

Имею индикатор 16*1, в результате попыток подключения и включения его был спален контроллер :( , вот теперь купил второй и не охото его сразу палить...

Вобщем, вопрос в следующем:

при подаче на индикатор питания (и на 3 ногу минус питания для контрастности) на его 4 ножке (RS), 5 (R/W) и 12 (5 бит данных) появляются единички :blink:, а на дисплее появляются 8 прямоугольничков (из 16 почемуто :blink: )

Это нормально? Мне кажется от этого прошлый МК и умер, т.к. все выводы на нём были назначены как выходы, с нулями на концах по умолчанию.

Вот даже не знаю как и инициализировать его в таком состоянии(

Я тоже собирал звонок на pic c дисплеем не мог запустить,нужного дисплея не было и я поставил подходящий (дисплей был двустрочный)загорались почти все прямоугольнички на дисплее и грелась кренка только спустя год когда появился у меня интернет я нашёл в чём проблема индикатор который я поставил был по полярности другой и из за этого то и грелась кренка и горели прямоугольнички.

Ссылка на комментарий
Поделиться на другие сайты

Индикатор MT-16S01A вроде как, но на нём самом написано

SPC-16010D-SYR

http://www.lcdinfo.ru/html.cgi/txt/lcd/lcm/melt/char/MT-16S1A.htm ---- с сайта производителя

Если на дисплее выводятся квадратики, то я так понял, это значит что дисплей не инициализирован, хотя как пишет производитель, если инициализация прошла, то квадратики останутся, и что бы они ушли надо подать команду на очистку дисплея...

Изменено пользователем Paska_2
Ссылка на комментарий
Поделиться на другие сайты

3й контакт не на минус !!!! .... 3й контакт это контрасность, его нужно подсоединить к подстроечнгому резистору ( постоянного тока) а остальные 2 контакта резистора на "+" и "-" .

Иначе вы ничего не увидите на ЖК.

Резистор +\- 10 кОм.

===========================================================================

===========================================================================

===========================================================================

Спасибо Alex за исходник..

#include <mega16.h>
#include <stdio.h>
#include <delay.h>

#asm
  .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

#pragma rl+
unsigned char arr_1[] = " Eiiiooa?ii eioaa?e?iaaiiuao i?iooeaieeai?aeiu   " ;
unsigned char arr_2[] = "   lkl;kjdfljei?eaioaeeaaiauio?aioiaa?uiaaie    " ;
#pragma rl-

void main(void)
{
unsigned int i=0 , a=0;
unsigned int size_1, size_2;
unsigned int s_tmp_1, s_tmp_2;

ACSR=0x80;
SFIOR=0x00;

lcd_init(16);
lcd_clear();  

size_1 = sizeof(arr_1)-17;     
size_2 = sizeof(arr_2)-17;    

while(1)      
{
//*****************
       if(s_tmp_1 < (size_1) )  
       {
       s_tmp_1++;

       for(i=0;i<16;i++)        
               {
                lcd_gotoxy(i,0); 
                lcd_putchar(arr_1[s_tmp_1+i]);
               }
       }
//******************
       if(s_tmp_2 < (size_2) )     
       {
       s_tmp_2++;

       for(i=0;i<16;i++)          
               {
                lcd_gotoxy(i,1); 
                lcd_putchar(arr_2[s_tmp_2+i]);
               }
       }
delay_ms(100);   
};
};

пробывал редактировать код но опять ничего не получается.... немогу зациклить вывод строк...

Изменено пользователем Lexey
Ссылка на комментарий
Поделиться на другие сайты

Самое простое:

if(s_tmp_X < (size_X) )
{...
 for...
   {
   ...
   }
}
else 
{
 s_tmp_X=0;
}

Вместо "Х" - 1 или 2, смотря какая строка.

Единственное что - строка покажет чуть дольше свой хвост (100ms+100ms) и начнется с самого начала.

Ссылка на комментарий
Поделиться на другие сайты

:) я уже пытался примерно таким же способом реализовать..., т.е. обнулять значение.., но как вы гаварите столкнулся со следужей проблемкой, что последующий массив начинает выводиться с 1й позиции.., а нужно с 15й ( т.е. с крайнего правого положения в крайнее левое)!
Ссылка на комментарий
Поделиться на другие сайты

да, 3 вывод это контраст. Максимальный контраст будит если мы его закоротим на землю, а не увидим мы ничего илбо при висящем в воздухе 3 выводе, либо если подаим + питания, но так делать нельзя, как говорит разработчик, индикатору может настать.... жопа :D

Сегодня сутра скачал какую то прогу - тестер индикаторов через ЛПТ порт, всё подключил, и ..о чудо - заработало))

Но появились другие проблемы =) Вобщем, будим разбираться =)

Ссылка на комментарий
Поделиться на другие сайты

2 Lexey

while(1)
{
s_tmp_1=0;
s_tmp_2=0;
fl=0;
while(!fl)      // Æä¸ì ôëàãà îêîí÷àíèÿ âûâîäà ñòðîê
{

//*****************
       if(s_tmp_1 < (size_1) )   // Åñëè 1-àÿ ñòðîêà íå çàêîí÷èëàñü
       {
       s_tmp_1++;

       for(i=0;i<16;i++)        // Âûâîäèì 16 ñëåäóþùèõ ñèìâîëîâ
               {
                lcd_gotoxy(i,0); 
                lcd_putchar(arr_1[s_tmp_1+i]);
               }
       }
//******************
       if(s_tmp_2 < (size_2) )     // Åñëè 2-àÿ ñòðîêà íå çàêîí÷èëàñü
       {
       s_tmp_2++;

       for(i=0;i<16;i++)           // Âûâîäèì 16 ñëåäóþùèõ ñèìâîëîâ
               {
                lcd_gotoxy(i,1); 
                lcd_putchar(arr_2[s_tmp_2+i]);
               }
       }

//***************** 
fl = (s_tmp_1==size_1) && (s_tmp_2==size_2);    // Æä¸ì îêîí÷àíèÿ âûâîäà îáåèõ ñòðîê. 
                                                //Åñëè çàêîí÷èëè óñòàíàâëèâàåì ôëàã äëÿ âûõîäà èç öèêëà  


delay_ms(100);    // Ïàóçà
}

}

:)

Голову иногда нужно включать, а не тупо переписывать и перебирать всё подряд ;)

Извени, но так оно и есть..

При таком раскладе повтор начнётся только после прохода обеих строк.

Для непрерывного повотра каждой строки пробуй как сказал Dan'nah, нужно просто обнулять счётчик для каждой строки.

Ссылка на комментарий
Поделиться на другие сайты

Вот пример того, что предложил VipAndrey, только работает не с памятью дисплея, а с памятью МК:

/*****************************************************
CodeWizardAVR V2.03.9 Standard

Chip type               : ATtiny2313
AVR Core Clock frequency: 8,000000 MHz
Memory model            : Tiny
External RAM size       : 0
Data Stack size         : 32
*****************************************************/

#include <tiny2313.h>
#include <delay.h>
#include <string.h>


#asm
  .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>

#define LIGHT PORTB.3


unsigned char mas1[17]; 
unsigned char mas2[17];

flash unsigned char arr_1[] ={224,'o',178,'p','o',' ',190,'o',182,'a',187,'o',179,'a',191,196,' ',179,' ',
                        'y',179,187,'e',186,'a',191,'e',187,196,189,195,185,' ',188,184,'p',' ',
                        197,187,'e',186,191,'p','o',189,184,186,184,'!','!','!'};
flash unsigned char arr_2[] = "ne vse to zoloto, chto blestit!";

void main(void)
{
unsigned int size_1, size_2;
unsigned char n_sim1,n_sim2,k;

PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0xFF;

PORTD=0x00;
DDRD=0x00;

ACSR=0x80;

// LCD module initialization
lcd_init(16);
lcd_clear();

LIGHT=1;  

size_1 =sizeof(arr_1);     
size_2 =31;// sizeof(arr_2);
n_sim1=16;
n_sim2=16;
memcpyf(mas1,arr_1,16);
memcpyf(mas2,arr_2,16);

while (1)
{

 lcd_gotoxy(0,0);
 lcd_puts(mas1);  
 for(k=0;k<16;k++)
 {
   mas1[k]=mas1[k+1];
 }
 mas1[15]=arr_1[n_sim1];
 if(++n_sim1>(size_1-1))
 {
   n_sim1=0;
 }

 lcd_gotoxy(0,1);
 lcd_puts(mas2);  
 for(k=0;k<16;k++)
 {
   mas2[k]=mas2[k+1];
 }
 mas2[15]=arr_2[n_sim2];
 if(++n_sim2>(size_2-1))
 {
   n_sim2=0;
 }
 delay_ms(400);
};
}

Ссылка на комментарий
Поделиться на другие сайты

Может переименовать тему в "бегущую строку"? ;) А вообще задачка на сообразительность: сделать бегущую строку, на которой время+дата+день недели ;) Если уже делать, то хоть то, где можно подумать ;)))

Ссылка на комментарий
Поделиться на другие сайты

  • 5 месяцев спустя...

Всем привет.

Не хочу создавать новую тему, так что задам свой вопрос связанный с дисплейчиком тут.

Проблема, собственно, в том, что символы не хотят выводиться на дисплей, хотя курсор после отправки символа и команды на вывод уходит вправо, т.е. якобы он нарисовал получается.

Все инициализируется, команды дисплея выполняются (сдвиг туда сюда, вкл, выкл - это всё ок), дисплей нормальный, ( на компе прогу писал и через ЛПТ вывододил информацию на него), но сомволы не прорисовываются =(

Может кто сталкивался с такой проблемой?

Код если надо то выложу, хотя показыть студно :D всё биты вручнею выставляю...

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...