اطلاعیه

Collapse
No announcement yet.

نحویه شیفت دادن متن با ایسی 74hc595

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

    نحویه شیفت دادن متن با ایسی 74hc595

    با سلام ...

    از ایسی 74hc595 و میکرو مگا128 و نرم افزار کدویژن استفاده می کنم .
    می خواهم متن را به راست و چپ حرکت دهم .. ولی ظاهرا کار سختی است ..لطفا راهنمایی فرمایید ...

    کتابخانه مورد استفاده ایسی 74hc595
    [code=c]#ifndef clock
    #define clock PORTB.0
    #define strobe PORTB.1
    #define data PORTB.2
    #endif

    //-----------------------------------------------------------------------------------------

    void ic74595_init() //صفر کردن پایه ها
    {
    clock=0;
    strobe=0;
    data=0;
    }

    //-----------------------------------------------------------------------------------------

    void ic74595_load_reg(void) //نمایش کدها
    {
    strobe=1;
    delay_us(1);
    strobe=0;
    }

    //-----------------------------------------------------------------------------------------

    void ic74595_send_byte(unsigned char dt)
    {
    unsigned char i;

    for(i = 0; i <8; i++) // Send 8 bits
    {
    if(dt & 0x80)
    {
    data=1;
    delay_us(1);
    }
    else
    {
    data=0;
    delay_us(1);
    }

    clock=1; //Clock
    delay_us(1);
    clock=0;

    dt <<= 1; // Get next bit into MSB position
    }
    }

    //-----------------------------------------------------------------------------------------

    void ic74595_shift_send(char *d,char size)
    {
    int i=0;
    for(i=size;i>=0;i--)
    ic74595_send_byte(d[i]);

    delay_us(1);
    ic74595_load_reg(); //نمایش دادن کدها
    }

    //-----------------------------------------------------------------------------------------[/code]

    اگر چیزی دیگری هم نیاز است بفرمایید تا قرارش بدهم..
    باتشکر.

    #2
    پاسخ : نحویه شیفت دادن متن با ایسی 74hc595

    :eek: :eek: :eek: :eek: :eek: :eek: :eek:
    دقیقا متن کجاست
    تو ال سی دی یا دات ماتریس یا رجیستر داخلی
    عجب روزگاریست...! هیچکس به سکوت آدم نمیرسد،همه منتظرند به داد آدم برسند...!

    دیدگاه


      #3
      پاسخ : نحویه شیفت دادن متن با ایسی 74hc595

      سلام بر شما و تشکر از پاسختون .

      14 دات ماتریکس 8*8 دو رنگ ..(که البته فعلا با دو رنگش کاری نداریم،تا تسلتمان بیشتر شود)
      بصورت دو ردیف 7 تایی و کنترول شده با دو عدد ایسی uln2803

      کدهای متن ها بصورت یک کتابخانه سفارشی(خیلی از کدها رو بدلیل حجم زیاد حذفشون کردم)
      [code=c]const unsigned char num1[112]=
      {
      .........
      };

      const unsigned char num2[112]=
      {
      ....
      };
      const unsigned char num3[112]=
      {
      ....
      };
      const unsigned char num4[112]=
      {
      .....
      };
      const unsigned char num5[112]=
      {
      ....
      };
      const unsigned char num6[112]=
      {
      .....
      };
      const unsigned char num7[112]=
      {
      ...
      };
      const unsigned char num8[112]=
      {
      .....
      };
      const unsigned char num9[112]=
      {
      ....
      };

      const unsigned char num10[112]=
      {
      ...
      };

      const unsigned char max[112]=
      {
      0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0007 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
      0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 000E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
      0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0015 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
      0x18,0x00,0xF0,0x03,0xE0,0x01,0x80, // 001C . . . # # . . . . . . . . . . . # # # # . . . . . . . . . . # # # # # . . . . . . . . . . . . # # . . . . . . .
      0x18,0x01,0x9C,0x06,0x70,0x03,0x80, // 0023 . . . # # . . . . . . . . . . # # . . # # # . . . . . . . # # . . # # # . . . . . . . . . . # # # . . . . . . .
      0x78,0x00,0x0C,0x00,0x30,0x05,0x80, // 002A . # # # # . . . . . . . . . . . . . . . # # . . . . . . . . . . . . # # . . . . . . . . . # . # # . . . . . . .
      0x18,0x00,0x0C,0x00,0x30,0x09,0x80, // 0031 . . . # # . . . . . . . . . . . . . . . # # . . . . . . . . . . . . # # . . . . . . . . # . . # # . . . . . . .
      0x18,0x00,0x0C,0x00,0x60,0x09,0x80, // 0038 . . . # # . . . . . . . . . . . . . . . # # . . . . . . . . . . . # # . . . . . . . . . # . . # # . . . . . . .
      0x18,0x00,0x1C,0x01,0xC0,0x11,0x80, // 003F . . . # # . . . . . . . . . . . . . . # # # . . . . . . . . . # # # . . . . . . . . . # . . . # # . . . . . . .
      0x18,0x00,0x18,0x00,0x60,0x21,0x80, // 0046 . . . # # . . . . . . . . . . . . . . # # . . . . . . . . . . . . # # . . . . . . . # . . . . # # . . . . . . .
      0x18,0x00,0x30,0x00,0x30,0x3F,0xC0, // 004D . . . # # . . . . . . . . . . . . . # # . . . . . . . . . . . . . . # # . . . . . . # # # # # # # # . . . . . .
      0x18,0x00,0x60,0x00,0x30,0x01,0x80, // 0054 . . . # # . . . . . . . . . . . . # # . . . . . . . . . . . . . . . # # . . . . . . . . . . . # # . . . . . . .
      0x18,0x00,0xC0,0x00,0x30,0x01,0x80, // 005B . . . # # . . . . . . . . . . . # # . . . . . . . . . . . . . . . . # # . . . . . . . . . . . # # . . . . . . .
      0x18,0x01,0x80,0x06,0x60,0x01,0x80, // 0062 . . . # # . . . . . . . . . . # # . . . . . . . . . . . . # # . . # # . . . . . . . . . . . . # # . . . . . . .
      0x7E,0x01,0xFE,0x03,0xC0,0x01,0x80, // 0069 . # # # # # # . . . . . . . . # # # # # # # # . . . . . . . # # # # . . . . . . . . . . . . . # # . . . . . . .
      0x00,0x00,0x00,0x00,0x00,0x00,0x00 // 0070 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
      };

      const unsigned char j21[112]=
      {
      ....
      };[/code]
      کد برنامه (چون نسخه ازمایشی هست،بعضی کدها ازمایشی هستش ..)
      [code=c]#include <mega128a.h>
      #include <string.h>
      #include <delay.h>
      #include "74595.c" //کتابخانه ایسی74595
      #include "uni.c" //کتابخانه متن ها

      unsigned char cpy1[16][7]; //آرایه دو بعدی برای تایین سطر و ستون ها
      unsigned char cpy2[16][7];
      unsigned char cpy3[16][7];
      unsigned char cpy4[16][7];
      unsigned char cpy5[16][7];
      unsigned char cpy6[16][7];
      unsigned char cpy7[16][7];
      unsigned char cpy8[16][7];
      unsigned char cpy9[16][7];
      unsigned char cpy10[16][7];
      unsigned char cpy11[16][7];
      unsigned char cpy12[16][7];

      unsigned unsigned char o,i,buffer[7]; //متغییر دات های ماتریکسی

      unsigned char Scan[]={0b10000000,0b01000000,0b00100000,0b00010000,0b00 001000,0b00000100,0b00000010,0b00000001};//ریفرش کردن پایه ها
      unsigned char Scan2[]={0b00000000,0b00000000,0b00000000,0b00000000,0b00 000000,0b00000000,0b00000000,0b00000000,0b00000000 ,0b10000000,0b01000000,0b00100000,0b00010000,0b000 01000,0b00000100,0b00000010,0b00000001};//ریفرش کردن پایه ها
      int k,j;
      void math(void)
      {
      memcpy(cpy1,num1+j ,112); //تعداد بیت در اینجا نوشته میشود
      memcpy(cpy2,num2+j ,112); //تعداد بیت در اینجا نوشته میشود
      memcpy(cpy3,num3+j ,112); //تعداد بیت در اینجا نوشته میشود
      memcpy(cpy4,num4+j ,112); //تعداد بیت در اینجا نوشته میشود
      memcpy(cpy5,num5+j ,112); //تعداد بیت در اینجا نوشته میشود
      memcpy(cpy6,num6+j ,112); //تعداد بیت در اینجا نوشته میشود
      memcpy(cpy7,num7+j ,112); //تعداد بیت در اینجا نوشته میشود
      memcpy(cpy8,num8+j ,112); //تعداد بیت در اینجا نوشته میشود
      memcpy(cpy9,num9+j ,112); //تعداد بیت در اینجا نوشته میشود
      memcpy(cpy10,num10+j ,112);//تعداد بیت در اینجا نوشته میشود
      memcpy(cpy11,max+j ,112); //تعداد بیت در اینجا نوشته میشود
      memcpy(cpy12,j21+j ,112); //تعداد بیت در اینجا نوشته میشود

      for(o=0;o<50;o++)
      {
      for (i=0;i<16;i++) //مدت زمان برای لود شدن متن
      {
      PORTC=Scan[i]; //وصل شده به ایسی اول 2803
      PORTA=Scan2[i]; //وصل شده به ایسی دوم 2803

      buffer[0]=cpy11[i][0];
      buffer[1]=cpy11[i][1];
      buffer[2]=cpy11[i][2];
      buffer[3]=cpy11[i][3];
      buffer[4]=cpy11[i][4];
      buffer[5]=cpy11[i][5];
      buffer[6]=cpy11[i][6];

      ic74595_shift_send(buffer,6);
      delay_ms(1);
      PORTC=0x00;
      PORTC=0x00;
      PORTA=0x00;
      PORTA=0x00;
      }
      k++;
      }
      // j+=210;
      // if (j>210) j=0;
      }

      void main(void)
      {
      DDRC=0xFF;
      PORTC=0x00;
      DDRB=0xFF;
      PORTB=0x00;
      DDRA=0xFF;
      PORTA=0x00;
      ic74595_init(); //ارسال کد صفر برای پایه ها ایسی 595
      while (1)
      {
      math();
      }

      }
      [/code]

      دیدگاه


        #4
        پاسخ : نحویه شیفت دادن متن با ایسی 74hc595

        سلام

        پرتئوس هم هست .. لطفا اگر ممکنه راهنمایی کنید..
        باتشکر.

        دیدگاه


          #5
          پاسخ : نحویه شیفت دادن متن با ایسی 74hc595

          سلام
          مثل اینکه اشتباه شد من اصلا کدویژن کار نمیکنم
          صورت سوالتون طوری بود که کنجکاو شدم
          باز هم ببخشید :nerd:
          عجب روزگاریست...! هیچکس به سکوت آدم نمیرسد،همه منتظرند به داد آدم برسند...!

          دیدگاه


            #6
            پاسخ : نحویه شیفت دادن متن با ایسی 74hc595

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

            دیدگاه


              #7
              پاسخ : نحویه شیفت دادن متن با ایسی 74hc595

              سلام

              دوست عزیز

              شماتیک مدار رو قراربدین
              بگید چه تابلویی میخواین درست کنین میخواین یه متن رو فقط نمایش بدین که مثلا از راست به چپ حرکت می کنه یا افکت هم میخواین ؟

              به نظر من اول هر طرحی رو طراحی مفهومی کنید بعد برید سراغ سورس اگه تونستید طرح مفهومی شو در بیارید زبان برنامه نویسی - کمپایلر و سخت افزارش زیاد کاری نداره مشکل اکثر دوستان اینه که نمی دونند میخوان چیکار کنن میان کد میزنن

              اگه میخواین یه متن رو فقط شیفت بدین خیلی سادست فرض کنید متن تون تو حافظه 100 بایت رو اشغال کرده و صفحه نمایش شما میتونه 20 خونه رو نمایش بده شما باید برنامه ای بنویسید که فانکشنی داشته باشه که با گرفتن شماره خونه اول صفحه نمایش رو رفرش کنه بعد بیاین هر مثلا 1 ثانیه این عدد رو یکی افزایش بدین میبینین متن حرکت میکنه البته این طرحو باید گسترشش بدین من فقط مثال زدم خودم چند سال پیش تابلویی درست کرده بودم اما الان کد ها شو ندارم

              یه روش دیگه هم هست که میاین یه فضایی از حافظه رم رو برا صفحه نمایش تون اختصاص میدین و یکی از وقفه ها رو طوری مینویسین که مثلا هر ثانیه 24 با بیاد این حافظه رو بخونه و صفحه نمایش رو از روی این قسمت حافظه رفرش کنه بعد توی برنامه هر تغییری که توی این قسمت حافظه بدین روی صفحه نمایش اعمال میشه به همین راحتی میتونین افکت های مختلفی به متن بدین شیفت به بالا پایین چپ راست چرخش و ... این طوری دست تون بازتره ... بقیه کار با خودتون خداحافظ

              دیدگاه


                #8
                پاسخ : نحویه شیفت دادن متن با ایسی 74hc595

                سلام
                دوست عزیز باید از پورت spi میکرو استفاده کنی.من خودم کامل روی این قضیه کار کردن و ماژول تابلو روان هم باهاش تولید کردم.مین بردش هم باatmega 8بود.

                دیدگاه

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