آموزش فارسی نوشتن در lcd کاراکتری با lcd vision

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

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

 

وسایل مورد نیاز در آموزش فارسی نوشتن روی LCD کاراکتری:

[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 ها دارای 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]

 

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

 

 

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

 

 

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

 

خب حالا وقتشه که بریم سراغ آشنایی با lcd vision

lcd vision چیه؟ 

LCD Vision یک زیر برنامه برای نرم افزار CodeVisionAVR که به ما امکان ساخت کاراکتر دلخواه، انواع فونت، تصاویری که فرمت wbmp دارند رو در اختیار ما قرار می دهد. این برنامه در اصل یک مبدل یا Generator Code که موارد فوق رو به کدهای استاندارد و سازگار با <alcd.h> تبدیل میکنه .

احتمالا الان این سوال براتون پیش اومده که این برنامه رو از کجا بیاریم؟

 

آیکون Lcd Vision در آموزش فارسی نوشتن در lcd کاراکتری

نکته:

در هنگام باز کردن نرم افزار، ممکن است شما با خطا مواجه شوید☠️. اما نگران نباشید برای حل این مشکل کافی است، برنامه ی کدویژنی که در حال حاضر از آن استفاده میکنید را، پاک نمایید و سپس نسخه پیشرفته CodeVisionAVR را نصب نمایید.

Error A CodeVisionAVR Advanced license is required to use LCD Vision. In order to purchase please contact HP InfoTech www.hpinfotech.com. OK

 

خب حالا که برنامه به درستی کار کرد،میریم سراغ آشنایی با محیط داخلی نرم افزارlcd vision:

 

محیط داخلی نرم افزار lcd vision در آموزش فارسی نوشتن در lcd کاراکتری

درتصویر زیر نشان دادیم که چگونه کلمه مدنظرتان رابسازید:

 

ساختن حروف در آموزش فارسی نوشتن در lcd کاراکتری

بعد از ساختن کلمات مدنظر، فایل ها رو پسوند lcd ذخیره میکنیم ! بعد میریم سراغ کدها وبا همین روش کلمه سلام ساخته و روی lcd نمایش می دیم.

 

 

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

#include <mega32.h>

#include <mega32.h>
// فراخوانی کتابخانه میکروکنترلرAtmega32.

 

 

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

#include <alcd.h>

#include <alcd.h>
//فراخوانی کتابخانه های lcd

 

 

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

#include <delay.h>

#include <delay.h>
//مادراینجاتابع تاخیر رابه برنامه فرخوانی میکنیم 
//با این توابع دربرنامه تاخیر ایجاد میکنیم

 

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

#include <lcd.lib>

با این دستور که یک دستور مربوط به کتابخونه های lcd  است ما کتابخونه هایlcd vision  را فرخوانی میکنم

 #include <lcd.lib>

 

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

typedef unsigned char byte;

این دستور به ناحیه global میگوید که متغییرها ما در اینجا تعریف شده اند

typedef unsigned char byte;

 

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

این کدها اشاره دارند به همان خانه های مربعی5*8  که هر کدام از خط ها یکی از ردیف های آن ردیف های هشتایی را نشان میدهد. هر خط بیانگر یک ردیف است. چینش این فایل ها،از سمت بالا چپ  شروع میشود. 0b که ابتدا این دستورات نوشته است، در واقع اشاره به آدرس خانه این حروف دارد، که با کدهای باینری (کدهایی با مبنای 2 ) هستند.

 

برای فهم بیشتر این کد هابه لینک مراجعه کنید…

flash byte char0[8] ={

0b00000000,

0b00000000,

0b00000000,

0b00010101,

0b00001010,

0b00000000,

0b00000000,

0b00000000};

flash byte char1[8]= {

0b00000000,

0b00001010,

0b00001010,

0b00001010,

0b00001011,

0b00000110,

0b00000000,

0b00000000};

flash byte char2[8]= {

0b00000000,

0b00000000,

0b00000010,

0b00000101,

0b00000111,

0b00001000,

0b00001000,

0b00001000};

flash byte char0[8] ={

0b00000000,

0b00000000,

0b00000000,

0b00010101,

0b00001010,

0b00000000,

0b00000000,

0b00000000};

flash byte char1[8]= {

0b00000000,

0b00001010,

0b00001010,

0b00001010,

0b00001011,

0b00000110,

0b00000000,

0b00000000};



flash byte char2[8]= {

0b00000000,

0b00000000,

0b00000010,

0b00000101,

0b00000111,

0b00001000,

0b00001000,

0b00001000};

 

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

define_char(char0,0);

define_char(char1,1);

define_char(char2,2);

این دستور به تعریف کاراکترهای (س/لا/م) 0تا3 کاربر میپردازد.

 

define_char(char0,0);
define_char(char1,1);
define_char(char2,2);

 

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

void define_char(byte flash *pc,byte char_code)

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

و برای تعریف کاراکتر های کاربر استفاده میشود.

 

void define_char(byte flash *pc,byte char_code)

{

byte i,a;

a=(char_code<<3) | 0x40;

for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);

}

void main (void){

.

.

lcd_init(16);



while (1)

{

 

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

 

lcd_gotoxy(14,0);

lcd_putchar(0);

lcd_gotoxy(13,0);

lcd_putchar(1);

lcd_gotoxy(12,0);

lcd_putchar(2);

این دستورات معلوم میکنن کدام کلمه درچه سطر وستونی از   lcdنمایش داده شود

lcd_gotoxy(14,0);

lcd_putchar(0);

lcd_gotoxy(13,0);

lcd_putchar(1);

lcd_gotoxy(12,0);

lcd_putchar(2);





}





}

}

 

source کامل پروژه:

 

#include <mega32.h>
//با این دستور توابع atmega32 رابه برنامه فرامیخوانیم.
#include <alcd.h>
//با این دستور توابع lcd رابه برنامه فرامیخوانیم.
#include <delay.h>
//این تابع .تابع تاخیراست.
 #include <lcd.lib>
// این دستور زمانی که  lcd vision فعال میشه باید دربرنامه فراخوانی شود. 
typedef unsigned char byte;

flash byte char0[8]= 
{
 0b00000000,
 0b00000000,
 0b00000000,
 0b00010101,
 0b00001010,
 0b00000000,
 0b00000000,
 0b00000000};

//این تعریف کردن حرف (س)است به صورتی که هر آرایه کاراکتر0 معرف یکخط از8خط 
 
flash byte char1[8]=
 { 
 
 0b00000000,
 0b00001010,
 0b00001010,
 0b00001010,
 0b00001011,
 0b00000110,
 0b00000000,
 0b00000000};
//این تعریف کردن حرف (لا)است به صورتی که هر آرایه کاراکتر1 معرف یکخط از8خط 
flash byte char2[8]=
 {
 0b00000000,
 0b00000000,
 0b00000010,
 0b00000101,
 0b00000111,
 0b00001000,
 0b00001000,
 0b00001000};
 //این تعریف کردن حرف (م)است به صورتی که هر آرایه کاراکتر2 معرف یکخط از8خط 
 

define_char(char0,0);
define_char(char1,1);
define_char(char2,2);


void define_char(byte flash *pc,byte char_code)
{
  byte i,a;
  a=(char_code<<3) | 0x40;
  for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);
}


   
void main(void)
{


// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out 
DDRA=(1<<DDA7) | (1<<DDA6) | (1<<DDA5) | (1<<DDA4) | (1<<DDA3) | (1<<DDA2) | (1<<DDA1) | (1<<DDA0);
// State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0 
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 0
// RD - PORTA Bit 1
// EN - PORTA Bit 2
// D4 - PORTA Bit 3
// D5 - PORTA Bit 4
// D6 - PORTA Bit 5
// D7 - PORTA Bit 6
// Characters/line: 16
lcd_init(16);
while (1)
      {
             
      {lcd_clear();      
             
      lcd_gotoxy(14,0);
//این دستور به میگوید برو ستون14 سطراول
      lcd_putchar(0); 
//دستور چاپ کردن کاراکتر0 بروی lcd
        
      lcd_gotoxy(13,0);
//این دستور به میگوید برو ستون13 سطراول
      lcd_putchar(1); 
////دستور چاپ کردن کاراکتر1 بروی lcd
                        
      lcd_gotoxy(12,0);
//این دستور به میگوید برو ستون12 سطراول
      lcd_putchar(2);
//دستور چاپ کردن کاراکتر2 بروی lcd
       }  
                      

      }
}

 

 

جمع بندی:

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

 

 

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

[icon name=”asterisk” class=”” unprefixed_class=””] حجم فایل : زیر 1 مگابایت – رمز فایل : robotafzar.com

[sdfile url=”https://school.robotafzar.com/wp-content/uploads/2019/07/lcd-persian.rar”]

 

 

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

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

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