اطلاعیه

Collapse
No announcement yet.

کار با LCD کاراکتری یا متنی به زبان C

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کار با LCD کاراکتری یا متنی به زبان C


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

    ابتدا پایه های LCD :



    پایه های LCD پایه نام عملکرد
    1 VSS زمین
    2 VCC 5V+
    3 VEE کنترل درخشندگی (می توانید با یک مقاومت 1 کیلو آن را زمین کنید)
    4 RS اگر این پایه 0 باشد اطلاعات روی DB0-DB7 به عنوان فرمان و اگر 1 باشد به عنوان کاراکتر پذیرفته می شود
    5 R/W اگر این پایه 0 باشد LCD برای نوشتن آماده می شود و اگر 1 باشد برای خواندن آماده می شود
    6 E فعال سازی LCD که با یک لبه پایین رونده می باشد
    7 DB0 خطوط دیتا
    8 DB1
    9 DB2
    10 DB3
    11 DB4
    12 DB5
    13 DB6
    14 DB7
    15 A 5V+ از پایه 15 و 16 برای روشن کردن LED پس زمینه استفاده می شود
    16 K زمین



    کد های فرمان LCD:

    کد عملکرد فرمان
    0X01 پاک کردن صفحه نمایش
    0X02 بازگشت مکان نما به سطر و ستون 0و0 HOME
    0X04 انتقال مکان نما به چپ
    0X05 جابجایی صفحه نمایش به راست
    0X06 انتقال مکان نما به راست
    0X07 جابجایی صفحه نمایش به چپ
    0X08 صفحه نمایش و مکان نما خاموش
    0X0A صفحه نمایش خاموش و مکان نما روشن
    0X0C صفحه نمایش روشن و مکان نما خاموش
    0X0E صفحه نمایش روشن و مکان نما روشن
    0X0F صفحه نمایش روشن و مکان نما در حالت چشمک زن
    0X10 جابجایی مکان نما به چپ
    0X14 جابجایی مکان نما به راست
    0X18 حرکت کل صفحه نمایش به چپ

    0X38 سازمان دهی 8 بیتی و ماتریس 5×7

    0X28 سازمان دهی 4 بیتی و ماتریس 5×7
    0X10 حرکت کل صفحه نمایش به راست
    0XC0 مکان نما به آغاز خط دوم انتقال می یابد



    //www.picpars.com
    #include <mega8.h> // معرفی میکر
    #include <stdio.h> //فراخوانی دستورات استاندارد ورودی خروجی
    #include <delay.h> // فراخوانی تابع تاخیری
    #include <lcd.h> // فراخوانی دستورات ال سی دی
    #define xtal 8000000
    #asm // شروع دستورات اسمبلی
    .equ __lcd_port=0x18; PORTB //معرفی پورت ال سی دی
    #endasm // پایان دستورات اسمبلی
    unsigned char i;
    /*********www.picpars.com**********/
    void main(void){ // تابع اصلی
    char buffer[10]; // در این متغییر اطلاعات به صورت رشته قرار میگیرند
    lcd_init(16); // ال سی دی با 16 ستون

    while(1){
    i++; //
    lcd_clear(); // پاک کردن ال سی دی
    sprintf(buffer,"PICPARS.COM %d",i); //آماده کردن اطلاعات به صورت رشته
    lcd_puts (buffer); // ارسال اطلاعات به ال سی دی
    delay_ms(200); // تاخیر 200 میلی ثانیه
    }
    }

    این برنامه یک نمونه ساده از برنامه هایی است که با ال سی دی کاراکتری ارتباط دارد. در این برنامه یک متغییر با اسم i تعریف شده که این متغیر در حلقه while قرار دارد و با یک تاخیر 200 میلی ثانیه یک واحد به این متغییر اضافه می شود و روی LCD نمایش داده می شود. توضیح دستوارت را در اینجا می دهیم و تا آخر هر جا از LCD استفاده کردیم اصول کلی آن به صورت زیر می باشد.

    از دستور asm# برای نوشتن دستورات به زبان اسمبلی استفاده می شود که در اینجا ما از یک دستور اسمبلی برای معرفی کردن پورت B برای LCD به صورت بالا استفاده می کنیم که اگر شما از codewizard استفاده کنید این قسمت برای شما ایجاد خواهد شد و endasm# هم برای خاتمه دادن به دستورات اسمبلی می نویسیم.

    lcd_init(16); از این دستور برای تعیین کردن تعداد ستون های LCD استفاده می شود. که در اینجا LCD را برای 16 ستون سازماندهی می کند.

    char buffer: این متغییر که به صورت یک آرایه 10 تایی تعریف شده و حتما نوع آن باید از char باشد، برای ذخیره سازی موقت اطلاعات به صورت رشته می باشد به این صورت که ما اگر بخواهیم نوشته ای را همراه با یک متغییر روی LCD نمایش بدهیم چون محتوای متغییر ما (در اینجا عدد می باشد) عدد است باید این عدد را به صورت رشته درآوریم و همراه با آن text مان برای LCD بفرستیم که این تبدیل عدد به رشته را دستور sprintf انجام می دهد و بعد این رشته را در متغیر buffer قرار می دهد.

    sprintf: فرم نوشتن این دستور به این صورت می باشد که ابتدا یک متغیر برای ذخیره سازی و بعد رشته (همان نوشته یا پیغام) و بعد هم متغیر i که حاوی یک عدد است. "PICPARS.COM %d" در اینجا d% یعنی اینکه متغیر i در مبنای دسیمال نمایش داده شود که در جدول زیر تمام این علایم را توضیح داده ایم. پس این دستور این رشته را در متغیر buffer به این صورت PICPARS.COM 1 ذخیره می کند.

    lcd_puts(buffer): این دستور محتوای متغییر buffer را برای LCD ارسال می نماید.

    lcd_clear(); این دستور کل صفحه نمایش را پاک می کنید و نویسه را در مختصات 0و0 قرار می دهد.

    فرمت کاراکتر های ارسالی:

    کاراکتر نوع اطلاعات ارسالی
    c% یک تک کاراکتر
    d% عدد صحیح علامت دار در مبنای 10
    i% عدد صحیح علامت دار در مبنای 10
    e% نمایش عدد ممیز شناور به صورت علمی
    E% نمایش عدد ممیز شناور به صورت علمی
    f% عدد اعشاری
    s% عبارت رشته ای واقع در حافظه SRAM
    u% عدد صحیح بدون علامت در مبنای 10
    X% به فرم هگزا دسیمال با حروف بزرگ
    x% به فرم هگزا دسیمال با حروف کوچک
    P% عبارت رشته ای واقع در حافظه FLASH
    %% نمایش علامت ٪



    دستورات استفاده شده در LCD:

    _lcd_ready()این دستور منتظر می ماند تا LCD آماده دریافت اطلاعات شود. این دستور باید حتما قبل از دستور زیر اجرا شود.

    _lcd_write_data()به کمک این دستور می توان در رجیستر دستور العمل LCD فرمان هایی نوشت که در جدول کد های فرمان LCD این فرمان ها توضیح داده شده اند.

    مثال:

    //www.picpars.com
    #include <mega8.h>
    #include <stdio.h>
    #include <delay.h>
    #include <lcd.h>
    #define xtal 8000000
    #asm .equ __lcd_port=0x18; PORTB
    #endasm
    unsigned char i=20; /*********www.picpars.com**********/
    void main(void){
    char buffer[10];
    lcd_init(16);
    sprintf(buffer,"PICPARS.COM %d",i);
    lcd_puts (buffer);
    while(1){ delay_ms(200);
    _lcd_ready(); //آماده دریافت دستور
    _lcd_write_data(0x1c); // کل صفحه نمایش به چپ انتقال داده شود
    }
    }در این مثال ابتدا عبارت PICPARS.COM 20 روی LCD نمایش داده می شود و سپس کل صفحه نمایش با تاخیر 200 میلی ثانیه به سمت چپ منتقل می شود.(مانند تابلو روان)

    اصول کار LCD های ماتریسی به صورت می باشد و طرز استفاده از دستورات به همین صورت می باشد. امیدوارم که این توضیحات کافی باشد. در صورتی که سوالی در مورد این قسمت دارید می توانید در همین صفحه در قسمت نظرات آن را مطرح نماید.

    منبع: www.picpars.com

    #2
    پاسخ : کار با LCD کاراکتری یا متنی به زبان C

    سلام
    نحوه راه اندازی lcd و ترفندهای کار با اون
    نحوه نشون دادن مقادیر عددی روی LCD رو تو کامپایلر کدویژن براتون بذارم .
    همون طور که میدونید تابع lcd_puts نمیتونه متغیر عددی رو نمایش بده و فقط متغیر رشته ای رو نمایش میده . به خاطر همین مساله باید متغیر عددی رو به یه متغیر رشته ای تبدیل کنیم .
    این کار با تابع (itoa (int,string انجام میشه . توی آرگومان اول متغیر عددی قرار میگیره و تو آرگومان دوم ( String ) متغیر رشته ای . در ضمن برای استفاده از این تابع باید فایل سرآیندش رو اعلان کنیم : <include <stdlib.h
    فقط همین ! حالا باید متغیر رشته ای رو توسط تابع lcd_puts نمایش بدین . در ضمن بگم برای تبدیل متغیر عددی اعشاری باید از تابع ftoa به جای itoa استفاده کنیم .


    اگه خوشت اومد تشکر یادت نره

    دیدگاه


      #3
      پاسخ : کار با LCD کاراکتری یا متنی به زبان C


      اینم لینک دانلود نرم افزارhttp://www.picpars.com/334/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1/%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-PicPars-tools-%28%D8%B3%D8%A7%D8%AE%D8%AA-%DA%A9%D8%A7%D8%B1%D8%A7%DA%A9%D8%AA%D8%B1-%D9%87%D8%A7%DB%8C-LCD-%D9%88-%D9%85%D8%AD%D8%A7%D8%B3%D8%A8%D9%87-%D9%85%D9%82%D8%A7%D9%85%D8%AA%29/
      سلام دوست عزیز میشه میتونی با این نرم افزار کار کنی و یک کارکترو نشون بدی مثلا همین (م) لطفا کمک کنید خیلی مهمه

      دیدگاه


        #4
        پاسخ : کار با LCD کاراکتری یا متنی به زبان C

        من وقتشو ندارم یکی نرم افزار بالا را دانلود کنه تست کنه ثواب داره ؟نتیجه را همین جا بنویسه

        دیدگاه


          #5
          پاسخ : کار با LCD کاراکتری یا متنی به زبان C

          نوشته اصلی توسط مجید باقری
          من وقتشو ندارم یکی نرم افزار بالا را دانلود کنه تست کنه ثواب داره ؟نتیجه را همین جا بنویسه
          سلام
          ممنون از مطالب خوبتون
          نرم افزار خوبیه
          نوشته اصلی توسط 91421146
          میشه با این نرم افزار کار کنی و یک کارکترو نشون بدی مثلا همین (م) لطفا کمک کنید خیلی مهمه
          بله چرا که نشه
          من با این نرم افزار کار کردم

          این هم نمونه برنامه
          کد:
          /*****************************************************
          Date  : 2/26/2014
          Author : Saman.Asadi
          Chip type        : ATmega8
          Program type      : Application
          AVR Core Clock frequency: 8.000000 MHz
          Memory model      : Small
          External RAM size    : 0
          Data Stack size     : 256
          *****************************************************/
          
          #include <mega8.h>
          #include <alcd.h>
          #include <delay.h>
          #define byte unsigned char
          flash byte char_0[8]={0,0,21,21,31,0,0,0};
          flash byte char_1[8]={18,18,10,6,15,0,0,0};
          flash byte char_2[8]={3,5,15,16,16,16,16,16};
          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)
          {
            // Alphanumeric LCD initialization
            // Connections are specified in the
            // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
            // RS - PORTB Bit 0
            // RD - PORTB Bit 1
            // EN - PORTB Bit 2
            // D4 - PORTB Bit 4
            // D5 - PORTB Bit 5
            // D6 - PORTB Bit 6
            // D7 - PORTB Bit 7
            // Characters/line: 16
            lcd_init(16);
            //////////////////////////////////////////////
            define_char(char_0,0);
            define_char(char_1,1);
            define_char(char_2,2);
          lcd_clear();
            lcd_putsf("salam");
            lcd_gotoxy(13,0);
            lcd_putchar(2);
            lcd_putchar(1);
            lcd_putchar(0);
          while (1)
             {
             // Place your code here
          
             }
          }
          این هم مدارش

          این هم سورس کد در کدویژن و شبیه سازی در پروتئوس 7.10
          http://s5.picofile.com/file/8114947876/LCD.zip.html
          موفق باشید
          [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
          معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
          معرفی نرم افزار Codewizard PWM
          با من بیشتر آشنا شوید

          دیدگاه


            #6
            پاسخ : کار با LCD کاراکتری یا متنی به زبان C

            مرسی ، دوست خوبم آقای اسدی
            دوستان هر کدام تجربه خاصی در مورد این lcd دارند یا مشکلی بوده که رفع شده را در این تاپیک بذارید بقیه هم استفاده کنند
            با تشکر از همه

            دیدگاه


              #7
              پاسخ : کار با LCD کاراکتری یا متنی به زبان C

              ایجاد منو در lcd
              http://www.eca.ir/forum2/index.php?topic=90268.0
              در این ادرس

              دیدگاه


                #8
                پاسخ : کار با LCD کاراکتری یا متنی به زبان C

                دوستان توی این سایت تاپیکهای مختلفی در مورد lcd نوشته شده اما لطفا روش اصولی تست اون رو یکنفر توضیح بده - متاسفانه از مطالب موجودمن نتونستم بفهمم صحت کارکرد lcd رو بدون اتصال به میکرو چطور میشه تست کرد ممنون میشم کمک کنید - متاسفانه برد بوردم از داخل اتصال کرده بو د و روی زمین میکرو 5 ولت افتاده بود روی نمایشگرم هم فقط میتونم مربع مربع ببینم نمیدونم اشکال از میکرو یا از Lcd کمک کنید

                مشکل دوستمان emamy2010
                البته مشکل منم هست اگر لطف کنید جواب بدید ممنون می شم

                دیدگاه


                  #9
                  پاسخ : کار با LCD کاراکتری یا متنی به زبان C

                  نوشته اصلی توسط مجید باقری
                  دوستان توی این سایت تاپیکهای مختلفی در مورد lcd نوشته شده اما لطفا روش اصولی تست اون رو یکنفر توضیح بده - متاسفانه از مطالب موجودمن نتونستم بفهمم صحت کارکرد lcd رو بدون اتصال به میکرو چطور میشه تست کرد ممنون میشم کمک کنید - متاسفانه برد بوردم از داخل اتصال کرده بو د و روی زمین میکرو 5 ولت افتاده بود روی نمایشگرم هم فقط میتونم مربع مربع ببینم نمیدونم اشکال از میکرو یا از Lcd کمک کنید

                  مشکل دوستمان emamy2010
                  البته مشکل منم هست اگر لطف کنید جواب بدید ممنون می شم
                  معمولا خیلی کم پیش میاد که بسوزه
                  من حدس میزنم که واسه پایه 3 باشه
                  پایه 2 یک پتانسیومتر 10کیلو اهم رو به پایه 3 LCD وصل کنید
                  پایه 1 و 3 هم یکیشو به VCC و یکیشو هم به GND وصلش کنید
                  این پتانسیومتر رو تغییرش بدید تا اونجایی که ببینید اون مربع مربعی ها دارند محو میشوند
                  اگر به این مساله توجه نکنید حتی اگر میکرو با LCD هم به درستی ارتباط برقرار کرده باشد ، شما نمیتوانید حروفها را ببینید چون شدت نور حروف نمایش داده شده زیاد است و قابل دید نیست .
                  البته یه مساله دیگه هم هست
                  توجه کنید ، زمانی که LCD را به پورت C میکرو mega16-32 وصل میکنید حتما باید JTAG میکرو را از طریق فیوزبیت غیرفعال کنید .
                  در مورد اون مدار هم ....
                  من شخصا اینگونه مدارها رو تا حالا ندیدم . (چون کنترل LCD نیاز به پردازنده داره)

                  در ضمن به آقای امامی هم بگید اینجا سوالاتشون رو بپرسند
                  ممنون

                  موفق باشید
                  [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                  معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                  معرفی نرم افزار Codewizard PWM
                  با من بیشتر آشنا شوید

                  دیدگاه


                    #10
                    پاسخ : کار با LCD کاراکتری یا متنی به زبان C

                    ممنون از پاسخ

                    دیدگاه


                      #11
                      پاسخ : کار با LCD کاراکتری یا متنی به زبان C

                      خوب حالا که بحث سر lcd شد من قبلا یک سوال پرسیده بودم و یکی از دوستان هم همراهی کرده بودند ولی کسی جواب نداد . [-(

                      سوالم این بود که چطوری کاراکتر هایی که توی lcd ذخیره شده رو تغییر بدیم . مثلا حروف چینی رو به فارسی تغییر بدیم یا اینکه کاراکتر های مورد نظرمون رو قرار بدیم .
                      که با اين درد اگر دربند درمانند درمانند
                      فاميل دور : اشاره داره به درهايي که واقعا در نيستن ، مثل نقاشي در روي ديوار. يعني اين دردها مارو شبيه اون درها ميکنه .

                      دیدگاه


                        #12
                        پاسخ : کار با LCD کاراکتری یا متنی به زبان C

                        نوشته اصلی توسط mehrdadttt
                        خوب حالا که بحث سر lcd شد من قبلا یک سوال پرسیده بودم و یکی از دوستان هم همراهی کرده بودند ولی کسی جواب نداد . [-(

                        سوالم این بود که چطوری کاراکتر هایی که توی lcd ذخیره شده رو تغییر بدیم . مثلا حروف چینی رو به فارسی تغییر بدیم یا اینکه کاراکتر های مورد نظرمون رو قرار بدیم .
                        تا اونجایی که من میدونم تا 8 حرف رو بیشتر نمیشه این کار رو کرد
                        ولی اگه خواستید تمام فارسی باشد یک سری LCD هایی هستند که مخصوص فارسی باشند (البته ارزش اینکار رو ندارد چون حروف جدا جدا هستند)
                        موفق باشید
                        [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                        معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                        معرفی نرم افزار Codewizard PWM
                        با من بیشتر آشنا شوید

                        دیدگاه


                          #13
                          پاسخ : کار با LCD کاراکتری یا متنی به زبان C

                          در مورد تست lcd یه سر به این آدرس بزنید
                          http://www.eca.ir/forum2/index.php?topic=74391.0

                          دیدگاه


                            #14
                            پاسخ : کار با LCD کاراکتری یا متنی به زبان C

                            سلام دوستان ناپیک ناقص کامل نشده کسی همکاری نمی کنه

                            دیدگاه


                              #15
                              پاسخ : کار با LCD کاراکتری یا متنی به زبان C

                              سلام آقا دمتون گرم خیلی مطالب خوبی بود اون نرم افزار هم خیلی حال کردم مرسی :biggrin:
                              آقای باقری من به اون مشکلی که گفتی بر خوردم
                              برنامم تو پروتئوس خوب کار میکنه ولی تو عمل فقط خط اول مربع مربع نشون میده
                              میکرو هم عوض کردم نشد!
                              ولی LCD فقط یه دونه داشتم
                              فکر کنم مشکل از LCD باشه

                              دیدگاه

                              لطفا صبر کنید...
                              X