اطلاعیه

Collapse
No announcement yet.

سوال جالب و کاربردی در رابطه با چرخاندن کاراکترهای LCD2*16

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

    #16
    پاسخ : سوال جالب و کاربردی در رابطه با چرخاندن کاراکترهای LCD2*16

    سلام
    به لینک زیر یه سری بزنید
    لینک

    :read:
    1: اللهم صل علی محمد و آل محمد و عجل فرجهم و ...
    2: دانش بهتره یا ثروت؟ بدون شعور هیچکدوم!
    3: دلا معاش چنان کن که گر بلغزد پای *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

    دیدگاه


      #17
      پاسخ : سوال جالب و کاربردی در رابطه با چرخاندن کاراکترهای LCD2*16

      نوشته اصلی توسط محمدصادق رستمی
      سلام
      ببخشید دویدم وسط بحث
      کتاب میکروکنترلرهای AVR و کاربردهای آن
      نوشته ی آقای پرتوی فر و ...
      نحوه ی قرار دادن کاراکتر یا هر شکل دلخواه بر روی ال سی دی رو آموزش داده
      شما چطوری برای LCD گرافیکی برنامه مینویسی؟
      برای کاراکتری هم میتونی همونطور برنامه بنویسی
      (فقط یه کم دستت بسته تره)
      ما برای یک پروژه بر روی ال سی دی کاراکتری 2 در 16، یک انیمیشن بسیار ساده هم طراحی کردیم :nerd:
      ... :read:
      سلام
      منظورتون اینه که در حین نمایش در صفحه نمایش از هشت کارکتر بیشتر نشه ؟؟؟؟
      اگر منظورتون این باشه که من قبلا این کار رو کردم و شده ...
      الان مساله اینه که می خواهیم کل متن LCD رو برعکس کنیم ....

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

      دیدگاه


        #18
        پاسخ : سوال جالب و کاربردی در رابطه با چرخاندن کاراکترهای LCD2*16

        نوشته اصلی توسط SAMAN.ASADI
        واقعا میشه ؟؟؟
        تا نبینم باور نمیکنم ....
        این فایل رو نگاه کنین ، توجه کنین بیشتر از 8 کاراکتر نمایش داده میشه
        http://s5.picofile.com/file/8118106934/charachter.rar.html
        خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.
        [hr]

        دیدگاه


          #19
          پاسخ : سوال جالب و کاربردی در رابطه با چرخاندن کاراکترهای LCD2*16

          نوشته اصلی توسط امین غفاری
          این فایل رو نگاه کنین ، توجه کنین بیشتر از 8 کاراکتر نمایش داده میشه
          http://s5.picofile.com/file/8118106934/charachter.rar.html
          سلام امین جان
          خب اینجوری که شما برنامه نوشتید که نمیشه ...
          شما آزمایشتون رو دقیق انجام ندادید ...
          سوال اینجاست که از کجا متوجه بشیم که این 8 کارکتر با هم فرق دارند ؟؟؟
          این سورس رو همین الان نوشتمش ...
          این کد نظر شما رو نقض میکنه ...
          کد:
          /*****************************************************
          Author : Saman.Asadi
          Chip type        : ATmega16
          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]={16,0,0,0,0,0,0,0};
          flash byte char_1[8]={20,0,0,0,0,0,0,0};
          flash byte char_2[8]={21,0,0,0,0,0,0,0};
          flash byte char_3[8]={21,8,0,0,0,0,0,0};
          flash byte char_4[8]={21,10,0,0,0,0,0,0};
          flash byte char_5[8]={21,10,16,0,0,0,0,0};
          flash byte char_6[8]={21,10,20,0,0,0,0,0};
          flash byte char_7[8]={21,10,21,0,0,0,0,0};
          flash byte char_8[8]={21,10,21,8,0,0,0,0};
          flash byte char_9[8]={21,10,21,10,0,0,0,0};
          flash byte char_10[8]={21,10,21,10,16,0,0,0};
          flash byte char_11[8]={21,10,21,10,20,0,0,0};
          flash byte char_12[8]={21,10,21,10,21,0,0,0};
          flash byte char_13[8]={21,10,21,10,21,8,0,0};
          flash byte char_14[8]={21,10,21,10,21,10,0,0};
          flash byte char_15[8]={21,10,21,10,21,10,16,0};
          flash byte char_16[8]={21,10,21,10,21,10,20,0};
          flash byte char_17[8]={21,10,21,10,21,10,21,0};
          flash byte char_18[8]={21,10,21,10,21,10,21,8};
          flash byte char_19[8]={21,10,21,10,21,10,21,10};
          
          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);
            define_char(char_3,3);
            define_char(char_4,4);
            define_char(char_5,5);
            define_char(char_6,6);
            define_char(char_7,7);
          lcd_clear();
            lcd_putchar(0);
            delay_ms(300);
            lcd_putchar(1);
            delay_ms(300);
            lcd_putchar(2);
            delay_ms(300);
            lcd_putchar(3);
            delay_ms(300);
            lcd_putchar(4);
            delay_ms(300);
            lcd_putchar(5);
            delay_ms(300);
            lcd_putchar(6);
            delay_ms(300);
            lcd_putchar(7);
            delay_ms(300); 
          ////////////////////////////////////////////
            define_char(char_8,0);
            delay_ms(300);
            define_char(char_9,1);
            delay_ms(300);
            define_char(char_10,2);
            delay_ms(300);
            define_char(char_11,3);
            delay_ms(300);
            define_char(char_12,4);
            delay_ms(300);
            define_char(char_13,5);
            delay_ms(300);
            define_char(char_14,6);
            delay_ms(300);
            define_char(char_15,7);
            delay_ms(300);   
          /////////////////////////////////////////////
          lcd_gotoxy(8,0);
            lcd_putchar(0);
            delay_ms(300);
            lcd_putchar(1);
            delay_ms(300);
            lcd_putchar(2);
            delay_ms(300);
            lcd_putchar(3);
            delay_ms(300);
            lcd_putchar(4);
            delay_ms(300);
            lcd_putchar(5);
            delay_ms(300);
            lcd_putchar(6);
            delay_ms(300);
            lcd_putchar(7);
            delay_ms(300);
            lcd_gotoxy(0,1);
          
            while (1);
          }
          در این برنامه 16 کارکتر به کار گرفته شده که به ترتیب ابتدا 8 کارکتر روی LCD رایت شده و آنها را نمایش میدهیم و دوباره 8 کارکتری که با کارکترهای قبلی متفاوت است را رایت میکنیم و آنها را نمایش میدهیم ....
          اتفاق جالبی که می افتد این است که در حال رایت کردن 8 کارکتر دوم همینطور حروف قبلی که نمایش داده شده بود تغییر پیدا میکند ...
          پس
          بنابراین این کد به ما ثابت میکند که در LCD تا 8 کارکتر بیشتر قابل تعریف نیست ....
          این هم سورس کد + شبیه سازی
          http://s5.picofile.com/file/8118209642/LCD_define_char.zip.html

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

          دیدگاه


            #20
            پاسخ : سوال جالب و کاربردی در رابطه با چرخاندن کاراکترهای LCD2*16

            نوشته اصلی توسط SAMAN.ASADI
            سلام امین جان
            خب اینجوری که شما برنامه نوشتید که نمیشه ...
            شما آزمایشتون رو دقیق انجام ندادید ...
            سوال اینجاست که از کجا متوجه بشیم که این 8 کارکتر با هم فرق دارند ؟؟؟
            این سورس رو همین الان نوشتمش ...
            این کد نظر شما رو نقض میکنه ...
            کد:
            /*****************************************************
            Author : Saman.Asadi
            Chip type        : ATmega16
            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]={16,0,0,0,0,0,0,0};
            flash byte char_1[8]={20,0,0,0,0,0,0,0};
            flash byte char_2[8]={21,0,0,0,0,0,0,0};
            flash byte char_3[8]={21,8,0,0,0,0,0,0};
            flash byte char_4[8]={21,10,0,0,0,0,0,0};
            flash byte char_5[8]={21,10,16,0,0,0,0,0};
            flash byte char_6[8]={21,10,20,0,0,0,0,0};
            flash byte char_7[8]={21,10,21,0,0,0,0,0};
            flash byte char_8[8]={21,10,21,8,0,0,0,0};
            flash byte char_9[8]={21,10,21,10,0,0,0,0};
            flash byte char_10[8]={21,10,21,10,16,0,0,0};
            flash byte char_11[8]={21,10,21,10,20,0,0,0};
            flash byte char_12[8]={21,10,21,10,21,0,0,0};
            flash byte char_13[8]={21,10,21,10,21,8,0,0};
            flash byte char_14[8]={21,10,21,10,21,10,0,0};
            flash byte char_15[8]={21,10,21,10,21,10,16,0};
            flash byte char_16[8]={21,10,21,10,21,10,20,0};
            flash byte char_17[8]={21,10,21,10,21,10,21,0};
            flash byte char_18[8]={21,10,21,10,21,10,21,8};
            flash byte char_19[8]={21,10,21,10,21,10,21,10};
            
            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);
              define_char(char_3,3);
              define_char(char_4,4);
              define_char(char_5,5);
              define_char(char_6,6);
              define_char(char_7,7);
            lcd_clear();
              lcd_putchar(0);
              delay_ms(300);
              lcd_putchar(1);
              delay_ms(300);
              lcd_putchar(2);
              delay_ms(300);
              lcd_putchar(3);
              delay_ms(300);
              lcd_putchar(4);
              delay_ms(300);
              lcd_putchar(5);
              delay_ms(300);
              lcd_putchar(6);
              delay_ms(300);
              lcd_putchar(7);
              delay_ms(300); 
            ////////////////////////////////////////////
              define_char(char_8,0);
              delay_ms(300);
              define_char(char_9,1);
              delay_ms(300);
              define_char(char_10,2);
              delay_ms(300);
              define_char(char_11,3);
              delay_ms(300);
              define_char(char_12,4);
              delay_ms(300);
              define_char(char_13,5);
              delay_ms(300);
              define_char(char_14,6);
              delay_ms(300);
              define_char(char_15,7);
              delay_ms(300);   
            /////////////////////////////////////////////
            lcd_gotoxy(8,0);
              lcd_putchar(0);
              delay_ms(300);
              lcd_putchar(1);
              delay_ms(300);
              lcd_putchar(2);
              delay_ms(300);
              lcd_putchar(3);
              delay_ms(300);
              lcd_putchar(4);
              delay_ms(300);
              lcd_putchar(5);
              delay_ms(300);
              lcd_putchar(6);
              delay_ms(300);
              lcd_putchar(7);
              delay_ms(300);
              lcd_gotoxy(0,1);
            
              while (1);
            }
            در این برنامه 16 کارکتر به کار گرفته شده که به ترتیب ابتدا 8 کارکتر روی LCD رایت شده و آنها را نمایش میدهیم و دوباره 8 کارکتری که با کارکترهای قبلی متفاوت است را رایت میکنیم و آنها را نمایش میدهیم ....
            اتفاق جالبی که می افتد این است که در حال رایت کردن 8 کارکتر دوم همینطور حروف قبلی که نمایش داده شده بود تغییر پیدا میکند ...
            پس
            بنابراین این کد به ما ثابت میکند که در LCD تا 8 کارکتر بیشتر قابل تعریف نیست ....
            این هم سورس کد + شبیه سازی
            http://s5.picofile.com/file/8118209642/LCD_define_char.zip.html

            سال خوبی داشته باشید
            آره منم آزمایش کردم ، حرف شما درسته :mrgreen:
            خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.
            [hr]

            دیدگاه


              #21
              پاسخ : سوال جالب و کاربردی در رابطه با چرخاندن کاراکترهای LCD2*16

              نوشته اصلی توسط امین غفاری
              :surprised: مطمئن هستید ، در آن واحد و در یه لحظه حق با شماست ولی میشه بیشتر از 8 تا رو نشون داد چون اطلاعات داده شدن به LCD تا زمانی که دستور پاک کردن LCD به اون داده نشه رو LCD باقی می مونن.
              بله. کاراکترهای نمایش داده شده در lcd از حافظه DDRAM(Display Data RAM) گرفته میشوند. ddram اطلاعاتش را ار حافظه CGRAM میگیرد. CGRAM یا Character Grapic RAM حافظه ای است که اطلاعات گرافیکی مربوط به هر کاراکتر را در خود جای میدهد. کاراکترهایی که شما درست میکنید در حافظه CGRAM قرار میگیرد. بنابراین به محض تغییر اطلاعات در CGRAM، اطلاعات DDRAM نیز تغییر پیدا میکند و کاراکتر نمایش داده شده قبلی به طور خودکار عوض میشود.
              برای نمایش پیکسلها در lcdها دقیقاً از روش بکار رفته در تابلوهای روان استفاده میشود. در تابلوهای روان، ledها به صورت سطر و ستونی به یکدیگر وصل شده اند. هنگام نمایش، ستونها به ترتیب فعال شده و اطلاعات هر ستون در سطرها قرار میگیرد و از آنجائیکه این پروسه به سرعت انجام میشود بیننده متوجه این مراحل نمیشود. در lcdها نیز از همین روش برای نمایش پیکسلها استفاده میشود و این همان فلسفه استفاده از حافظه DDRAM در lcdها است.

              دیدگاه

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