اطلاعیه

Collapse
No announcement yet.

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

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

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

    بالاخره حل شد :wow:
    آقا ممنون :smile:
    http://www.eca.ir/forum2/index.php?topic=108455.msg777842#msg777842

    دیدگاه


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

      نوشته اصلی توسط Saman Taghipour
      بالاخره حل شد :wow:
      آقا ممنون :smile:
      قابلی نداشت ...
      موفق باشید
      [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
      معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
      معرفی نرم افزار Codewizard PWM
      با من بیشتر آشنا شوید

      دیدگاه


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

        نوشته اصلی توسط ameen.kh
        سلام آقا دمتون گرم خیلی مطالب خوبی بود اون نرم افزار هم خیلی حال کردم مرسی :biggrin:
        آقای باقری من به اون مشکلی که گفتی بر خوردم
        برنامم تو پروتئوس خوب کار میکنه ولی تو عمل فقط خط اول مربع مربع نشون میده
        میکرو هم عوض کردم نشد!
        ولی LCD فقط یه دونه داشتم
        فکر کنم مشکل از LCD باشه
        سلام
        من هم همین مشکل رو داشتم و lcd به جای متن فقط یک ردیف مربع رو نشون میداد.
        خدا را شکر مشکل حل شد :nice: :applause: :wow:
        علت اصلی اینه که "میکرو با lcd ارتباط نداره "چون وقتی lcd رو به تنهایی پایه 1 lcd رو به زمین و 3 رو با یک
        مقاومت (حدود300 تا 1000 اهم) به زمین وصل کنید و پایه 2 رو هم به 5 ولت وصل کنید lcd روشن میشه و بدون اینکه به میکرو وصل باشه یک ردیف مربع نشون میده که یعنی سالمه . اما مشکل من این بود که من lcd رو به پورت c از atmega32 وصل کرده بودم و نمیدونم یا اشتباه وصل کرده بودم و یا اصلا پورت c رو نمیشه به lcd وصل کرد ولی وقتی پورت رو به پورت B تغییر دادم درست شد و کار کرد

        توصیه میکنم که اگه از یک منبع تغذیه مشترک برای میکرو lcd استفاده میکنیدعلاوه بر پایه های 10 و 11 میکرو اتمگا 32 که vcc و Gnd هستند حتما پایه های 30 , 31 میکرو که AVCC و GND هستند رو هم تغذیه وصل کنید.

        دیدگاه


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

          نوشته اصلی توسط mmbbox32123
          سلام
          من هم همین مشکل رو داشتم و lcd به جای متن فقط یک ردیف مربع رو نشون میداد.
          خدا را شکر مشکل حل شد :nice: :applause: :wow:
          علت اصلی اینه که "میکرو با lcd ارتباط نداره "چون وقتی lcd رو به تنهایی پایه 1 lcd رو به زمین و 3 رو با یک
          مقاومت (حدود300 تا 1000 اهم) به زمین وصل کنید و پایه 2 رو هم به 5 ولت وصل کنید lcd روشن میشه و بدون اینکه به میکرو وصل باشه یک ردیف مربع نشون میده که یعنی سالمه . اما مشکل من این بود که من lcd رو به پورت c از atmega32 وصل کرده بودم و نمیدونم یا اشتباه وصل کرده بودم و یا اصلا پورت c رو نمیشه به lcd وصل کرد ولی وقتی پورت رو به پورت B تغییر دادم درست شد و کار کرد

          توصیه میکنم که اگه از یک منبع تغذیه مشترک برای میکرو lcd استفاده میکنیدعلاوه بر پایه های 10 و 11 میکرو اتمگا 32 که vcc و Gnd هستند حتما پایه های 30 , 31 میکرو که AVCC و GND هستند رو هم تغذیه وصل کنید.
          شما اگه فیوزبیت jtagen رو هم که پیشفرض فعاله غیر فعال کنید روی پورت c هم ال سی دی جواب میده
          http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

          دیدگاه


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

            با سلام. امیدوارم که دوستان و همکاران عزیز از اینکه یه تاپیک قدیمی رو دارم فعال میکنم پوزش بنده رو ببخشند. چون این تاپیک با مشکل من مرتبط بود لذا اینجا مشکلمو بیان میکنم.
            دوستان من مدتها تو محیط بسکام با AVR کار میکردم. مدتیه که دارم سعی میکنم کدویژن رو هم یاد بگیرم. مشکلی در راه اندازی LCD کارکتری دارم و اونم اینکه برنامهآ‌ای که برای تست LCD مینویسم فقط خط اول رو نمایش میده و خط دوم چیزی دیده نمیشه. با بسکام چک کردم نه LCD و نه میکرو هیچ مشکلی ندارن. ورژن کدویژن من V2.05.3 و کتابخونه ای که برای LCD تو برنامه ازش استفاده کردم alcd_ks0073.h هستش. چون با کتابخونه alcd.h هیچ چیزی روی LCD دیده نمیشد. لطفا اگر راه حل ارائه بدید. سپاسگزارم
            برنامه ساده ای که برای تست نوشتم بصورت زیره:

            کد:
            #include <mega16a.h>
            #include <alcd_ks0073.h>
            
            void main(void)
            {
            // 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);
            lcd_clear();
            lcd_putsf("  First Line");
            lcd_gotoxy(1,1);
            lcd_putsf("  Second Line");
            
            while (1)
               {
               // Place your code here
            
               }
            }

            دیدگاه


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

              نوشته اصلی توسط محمود سلیمانی
              با سلام. امیدوارم که دوستان و همکاران عزیز از اینکه یه تاپیک قدیمی رو دارم فعال میکنم پوزش بنده رو ببخشند. چون این تاپیک با مشکل من مرتبط بود لذا اینجا مشکلمو بیان میکنم.
              دوستان من مدتها تو محیط بسکام با AVR کار میکردم. مدتیه که دارم سعی میکنم کدویژن رو هم یاد بگیرم. مشکلی در راه اندازی LCD کارکتری دارم و اونم اینکه برنامهآ‌ای که برای تست LCD مینویسم فقط خط اول رو نمایش میده و خط دوم چیزی دیده نمیشه. با بسکام چک کردم نه LCD و نه میکرو هیچ مشکلی ندارن. ورژن کدویژن من V2.05.3 و کتابخونه ای که برای LCD تو برنامه ازش استفاده کردم alcd_ks0073.h هستش. چون با کتابخونه alcd.h هیچ چیزی روی LCD دیده نمیشد. لطفا اگر راه حل ارائه بدید. سپاسگزارم
              برنامه ساده ای که برای تست نوشتم بصورت زیره:

              کد:
              #include <mega16a.h>
              #include <alcd_ks0073.h>
              
              void main(void)
              {
              // 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);
              lcd_clear();
              lcd_putsf("  First Line");
              lcd_gotoxy(1,1);
              lcd_putsf("  Second Line");
              
              while (1)
                 {
                 // Place your code here
              
                 }
              }
              خب در نظر میگیریم برنامه توی زبان سی از 0 شروع میکنه نه از یک یعنی شما مختصات 0و0 بدی میشه خط اول ستون اول
              و برای ستون دوم میشه 1و1 و خط دوم و ستون دوم یعنی از 0 شروع به شمارش میکنه
              کد:
              lcd_gotoxy(0,0);
              lcd_putsf("  First Line");
              lcd_gotoxy(1,1);
              lcd_putsf("  Second Line");
              شما اینو تست کنید نتیجه رو بپیر باید درست شده باشه و بعد هم کتابخونه خود کدویژن مشکلی نداره اونم میتونید راه بندازید
              http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

              دیدگاه


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

                نوشته اصلی توسط MAHDI ZAMANI
                خب در نظر میگیریم برنامه توی زبان سی از 0 شروع میکنه نه از یک یعنی شما مختصات 0و0 بدی میشه خط اول ستون اول
                و برای ستون دوم میشه 1و1 و خط دوم و ستون دوم یعنی از 0 شروع به شمارش میکنه
                کد:
                lcd_gotoxy(0,0);
                lcd_putsf("  First Line");
                lcd_gotoxy(1,1);
                lcd_putsf("  Second Line");
                شما اینو تست کنید نتیجه رو بپیر باید درست شده باشه و بعد هم کتابخونه خود کدویژن مشکلی نداره اونم میتونید راه بندازید
                سپاسگزارم مهندس. انجام دادم اما تاثیری نداشت. بیشتر حدس میزنم مشکل از کتابخونه باشه. اگه راه حل دیگه ای به ذهنتون میرسه ممنون میشم.

                دیدگاه


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

                  نوشته اصلی توسط kavosh_1 نمایش پست ها
                  به نام خدا
                  سلام دوستان این مطلب را تو سایت 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
                  سلام.برای ارسال این فرمان ها پایه ها رو باید به چه صورت به میکرو وصل کنیم؟من با این قسمتش مشکل دارم.

                  دیدگاه


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

                    نوشته اصلی توسط saeed0047 نمایش پست ها
                    سلام.برای ارسال این فرمان ها پایه ها رو باید به چه صورت به میکرو وصل کنیم؟من با این قسمتش مشکل دارم.
                    سلام
                    ببخشید متوجه نشدم دقیقا مشکلتون با کدوم قسمت قضیه اس؟ پین های میکروکنترلر رو نمیشناسید یا lcd؟ اگر از کدویژن استفاده می کنید توی قسمت ویزارد گفته کدوم پایه از lcd باید به کدوم پایه از میکروکنترلر متصل بشه؛ حتی میتونید تغییرش بدید.
                    ضمنا سوالتون رو فقط داخل یک تاپیک مطرح کنید کافیه؛ احتیاجی نیست 2 یا چند جا بپرسید.

                    دیدگاه

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