آموزش راه اندازی lcd کاراکتری با میکروکنترلر AVR + تابلو روان

امروز در آموزش راه اندازی lcd کاراکتری با میکروکنترلر AVR  می خواهیم یاد بگیریم که چطور تو پروژه هامون، نوشته دلخواهمون رو روی lcd نمایش بدیم.

بطور کلی میکرو با کمک lcd میتونه با ما صحبت کنه پس  با یادگیری نحوه راه اندازی lcd ما میتونیم کلی کار با حال مثل : نمایش مقادیر سنسور های مختلف ، ساخت منو (برای کنترل کارکرد دستگاه) و … رو انجام بدیم .

 

وسایل مورد نیاز در آموزش راه اندازی lcd کاراکتری با میکروکنترلر AVR  :

[icon name=”tv” style=”solid” class=”” unprefixed_class=””] یک عدد lcd2*16

[icon name=”tv” style=”solid” class=”” unprefixed_class=””] یک برد برد (bred board )

[icon name=”tv” style=”solid” class=”” unprefixed_class=””] تعدادی  سیم برد برد

[icon name=”tv” style=”solid” class=”” unprefixed_class=””] رئوستا(پتاسیومتر)

[icon name=”tv” style=”solid” class=”” unprefixed_class=””] میکروکنترلرAtmega32

 

خب حالا بریم ‍♀️ سراغ وسایلی که در راه اندازی lcd کاراکتری و ساخت تابلو روان کاربرد دارند تا بیشتر با هاشون آشنا شیم .

 :  lcd2*16 [icon name=”cog” class=”” unprefixed_class=””]

lcd 1602 در آموزش راه اندازی lcd کاراکتری با میکروکنترلر AVR

lcd 1602 در آموزش راه اندازی lcd کاراکتری با میکروکنترلر AVR

همانطور که در تصویر هم می بینید، این lcd ها دارای 16 پایه هستند و با اتصال به پین های میکرو بوسیله سیم جامپر ،دیتا مورد نظر ما را از میکرو دریافت و نمایش می دهند.

 

[icon name=”cog” class=”” unprefixed_class=””] پتاسیومتر :

انواع پتانسیومتر در آموزش راه اندازی lcd کاراکتری با میکروکنترلر AVR

در تصویر بالا انواع پتانسیومتر و رئوستا را می بینید. اما اگه تازه پا به دنیا دنیای الکترونیک گذاشته باشید ممکن براتون سئوال پیش بیاد که پتاسیومتر چیه؟

پتاسیومتر چیست؟

مقاومت متغییر یا پتاسیومتر در واقع از 2 مقاومت متغییر تشکیل شده استو دارای 3پایه است، و پایه وسط آن مقاومت را کم و زیاد می کند. این قطعه وظیفه محدود كردن جريان و ايجاد ولتاژ را دارد وواحد سنجش  این قطعه همانند مقاومت اهم و آن را با علامت Ω نمایش می‌دهند. دراثرکم و زیاد کردن مقاومت در پتاسیومتر، نور lcd هم زیاد وکم میشه.

 

 

بیاین اول باهم شکل زیر را برسی کنید، و بعد می ریم سراغ اتصالات مدار که جدول براتون آوردم.

 

معرفی پایه ها در آموزش راه اندازی lcd کاراکتری با میکروکنترلر AVR

 

 

[su_table responsive=”yes”]

VSS GND
VDD VCC
VEE پایه وسط رئوستا (این همان پایه ای که مقاومت داخل رئوستا راکم وزیاد میکند)
RS( انتخاب رجیستر) PA.1
RW( انتخاب نوشتن با خواندن ) PA.2
E (فعالسازی) PA.3
D4 PA.4
D5 PA.5
D6 PA.6
D7 PA.7
A VCC
K GND

[/su_table]

 

برای شروع ابتدا یک پروژه داخل کدویژن میسازیم. در تصویر زیرتنظیمات لازم برای راه اندازی lcd در نرم افزار کدویژن رو براتون آوردم. تنظیمات سایر بخش ها رو در آموزش های قبلی بهش اشاره کردم پس دراینجا به توضیح برخی نکات درباره تنظیمات مربوط که قبلا نگفتیم میپردازیم.

 

 

تنظیمات پین های lcd درکدویژن در آموزش راه اندازی lcd کاراکتری با میکروکنترلر AVR

 

 

یادتون نره که بعد از اتصال پایه ها  lcd  به میکرو، حتما تغذیه های میکرو را متصل کنید.حالا میریم سراغ نوشتن کد های [icon name=”code” class=”” unprefixed_class=””] برنامه…

 

1.پروژه نوشتن کلمه robot afzar روی lcd :

 

[icon name=”circle-o” class=”” unprefixed_class=””] دستور :

#include <mega32.h>

.که شامل توابع این میکرو کنترلر است رابه برنامه فرا میخوانیم  Atmega32  را با این دستور کتابخانه

#include <mega32.h>

 

[icon name=”circle-o” class=”” unprefixed_class=””] دستور :

#include <alcd.h>

با این دستور تمام توابع مربوط به lcd را فرا میخوانیم.

 

#include <alcd.h>

 

[icon name=”circle-o” class=”” unprefixed_class=””] دستور :

#include <delay.h>

این دستور تابع تاخیررا به برنامه فرامیخوان.کاراین تابع ایجاد وقفه دربرنامه است.

#include <delay.h>

 

 

[icon name=”circle-o” class=”” unprefixed_class=””] دستور :

lcd_init(16);

این دستور نوع  lcd  ما را مشخص میکند که در اینجا 2*16است

 

void main(void)
{

lcd_init(16);

 

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

      while(1) {

دستورwhile  یک حلقه تکرار پذیر .

while (1)
      {

 

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

lcd_clear();

این دستور هرچه روی lcd است پاک میکند .

lcd_clear();
//lcd فرمان پاک کردن

 

 

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

lcd_gotoxy(2,0);

این دستور به میکرو میگوید روی کدام سطر و ستون  lcd نوشتن را شروع کند،برایدرک بهتر ترتیب نوشتن اعداد به تصویر زیر دقت کنید.

این دستور یکی از کتابخانه های lcdاست

lcd_gotoxy(2,0);
//lcd سطر وستوني که ميکرو شروع ميکند به نوشتن روي

 

سطر وستون lcd در آموزش راه اندازی lcd کاراکتری با میکروکنترلر AVR

 

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

lcd_putsf(“robotafzar”);

این دستور به میکرو فرمان میدهد کلمه مد نظرمان را روی  lcd نمایش بده.

این دستور یکی از کتابخانه های lcd است.

 

lcd_putsf("robotafzar");
//کلمات داخل  را نمايش ميدهد

 

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

delay_ms(500);

.با این دستور تابع تاخیر یک وقفه500میلی ثانیه ای ایجاد میک

delay_ms(500); 
             
      }   
       
      }
}

 

source کامل پروژه:

[vc_row][vc_column][vc_message message_box_color=”pink” icon_fontawesome=”fa fa-cloud-download”]برای دانلود کامل برنامه و فایل های پروژه به صورت رایگان به پایین صفحه مراجعه کنید.[/vc_message][/vc_column][/vc_row]

delay_ms(500); 
             
      }   
       
      }
}
#include <mega32.h>
#include <alcd.h>
#include <delay.h>


void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0<<AS2;
TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
MCUCSR=(0<<ISC2);

// USART initialization
// USART disabled
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
SFIOR=(0<<ACME);

// ADC initialization
// ADC disabled
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

// SPI initialization
// SPI disabled
SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTA Bit 1
// RD - PORTA Bit 2
// EN - PORTA Bit 3
// D4 - PORTA Bit 4
// D5 - PORTA Bit 5
// D6 - PORTA Bit 6
// D7 - PORTA Bit 7
// Characters/line: 16
lcd_init(16);

while (1)
      { 
      lcd_clear();
      //lcd فرمان پاک کردن     
      lcd_gotoxy(2,0);
      //lcd سطر وستوني که ميکرو شروع ميکند به نوشتن روي   
      lcd_putsf("robotafzar");
      //کلمات داخل  را نمايش ميدهد   
      delay_ms(500); 
             
      }   
       
      }

 

 

 

2.پروژه تابلو روان:

#include <mega32.h>
#include <alcd.h>
//توابع ال سي دي رافراميخوانيم
#include <delay.h>

 

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

int i;

با این دستور متغییر i را از نوع  int  تعریف میکنیم.

 

int i;
//متغييري که براي حرکت دادن حروف روي ال سي دي استفاده ميکنيم

 

void main(void)
.
.
lcd_init(16);

while (1)
      {

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

for( i=0;i<11;i++) {

این دستور حلقه for است.که داخل حلقه به این صورت است(گام حلقه;شرط حلقه;شروع حلقه)

{for( i=0;i<11;i++){
//دراينجا يک حلق داريم که مقدار اوليه اش 0 ويکي يکي زياد ميشه تا برسه به خونه 11

 

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

lcd_gotoxy(i,0);

. میریزیم lcd راروی i  بااین دستورمتغییر

 lcd_gotoxy(i,0);
         
      lcd_putsf("robotafzar");    
      delay_ms(500); 
      lcd_clear();
      }   
       
      }

 

 

source کامل پروژه:

[vc_row][vc_column][vc_message message_box_color=”pink” icon_fontawesome=”fa fa-cloud-download”]برای دانلود کامل برنامه و فایل های پروژه به صورت رایگان به پایین صفحه مراجعه کنید.[/vc_message][/vc_column][/vc_row]

#include <mega32.h>
#include <alcd.h>
//توابع ال سي دي رافراميخوانيم
#include <delay.h>

int i;
//متغييري که براي حرکت دادن حروف روي ال سي دي استفاده ميکنيم

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0<<AS2;
TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
MCUCSR=(0<<ISC2);

// USART initialization
// USART disabled
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
SFIOR=(0<<ACME);

// ADC initialization
// ADC disabled
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

// SPI initialization
// SPI disabled
SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTA Bit 1
// RD - PORTA Bit 2
// EN - PORTA Bit 3
// D4 - PORTA Bit 4
// D5 - PORTA Bit 5
// D6 - PORTA Bit 6
// D7 - PORTA Bit 7
// Characters/line: 16
lcd_init(16);

while (1)
      {for( i=0;i<11;i++){
//دراينجا يک حلق داريم که مقدار اوليه اش 0 ويکي يکي زياد ميشه تا برسه به خونه 11     
      lcd_gotoxy(i,0);
//دراینجا متغییر i را داخل تابع میریزم
//تاباهربار اضافه شدن iکلمه مدنظر رویlcdحرکت کند   
      lcd_putsf("robotafzar"); 
/فرمان نوشته کلمه robot afzar روی lcd   
      delay_ms(500); 
//ایجاد کردن تاخیر
      lcd_clear();
// lcdرا پاک کن 
      }   
       
      }
}

 

جمع بندی:

در این آموزش چگونگی راه اندازی lcd کاراکتری با AVR رو برای ساخت تابلو روان را یاد گرفتیم.

کاربرد های آن در تبلیغات , در برد های آسانسور که برای راهنمایی طبقات استفاده می گردد.

و نیز می توان از آن بروی ساعت و یا برای نشان دادن دمای هوا کرد.

 

خب اینم از آموزش امروز امیدوارم که لذت برده باشید وشما هم پروژه رو بسازید و فیلمشو روی صفحه اینستگرام خودتون بزارید ، مارو تگ کنید و کپن تخفیف از ما بگیرید.

راستی یادتون نره ، حتما به اینستاگرام ماهم سربزنید

[wp_ulike]
اگر می‌خواهید از آخرین و محبوب‌ترین مقالات ما در ایمیل خود مطلع شوید، همین الان ایمیل و شماره موبایل خود را در کادر زیر وارد کنید:
تعداد علاقه مندانی که تاکنون عضو خبرنامه ما شده اند: 0 نفر
دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *