نرم افزار PicPars tools (ساخت کاراکتر های LCD و محاسبه مقامت)
نرم افزار PicPars tools (ساخت کاراکتر های LCD و محاسبه مقامت)
10 تیر, 1391
پروژه دربازکن الکترونیکی خانه قفل رمز با avr
پروژه دربازکن الکترونیکی خانه قفل رمز با avr
25 تیر, 1391
نرم افزار PicPars tools (ساخت کاراکتر های LCD و محاسبه مقامت)
نرم افزار PicPars tools (ساخت کاراکتر های LCD و محاسبه مقامت)
10 تیر, 1391
پروژه دربازکن الکترونیکی خانه قفل رمز با avr
پروژه دربازکن الکترونیکی خانه قفل رمز با avr
25 تیر, 1391
کار با LED ماتریسی 8.8 (LED Displays 8.8 LED Matrix)

بازدیدها: 51

در این مبحث آموزشی ما خواهیم گفت که چگونه باید یک ماتریس LED سایز 8×8 را کنترل کرد، یا بیان دیگر چگونه حروف و علایم را بر روی 64 عدد LED به نمایش بگذاریم. همانطور که میدانیم این ماتریس دارای 8 سطر و 8 ستون می باشد، با اتصال ماتریسی LED ها (64 عدد) تعداد پایه های خروجی را به 16 پین کاهش می دهیم. بنابراین برای کنترل آن باید به روش جاروب کردن سطر و ستون استفاده کرد، به این صورت که ابتدا سطر اول را یک (مابقی صفر) می‌کنیم و سپس مقادیر (خاموش یا روشن بودن هر 8 LED این سطر) مربوط به این ردیف را بر روی 8 پین ستون قرار دهیم حال در مرحله بعدی سطر دوم را یک (مابقی صفر) می‌کنیم و سپس مقادیر مربوط به ردیف دوم را بر روی 8 پین ستون قرار دهیم و همین طور تا سطر هشتم ادامه می دهیم. به یاد داشته باشید که تمامی این مراحل باید با سرعت بالا انجام پذیرد که در این برنامه ما زمان تاخیر بین هر یک از عملیات فوق را 2 میلی ثانیه قرار داده ایم و از آنجایی که چشم انسان خطای دید دارد ما به راحتی وضعیت هر 64 LED را در آن واحد مشاهد می‌کنیم. این روش همانند ایجاد کاراکتر های خاص (مثلا علایم و حروف فارسی) در LCD های متنی می باشد.

برنامه به گونه‌ای نوشته شده است که به براحتی می توانید حروف انگلیسی بزرگ و کوچک را توسط نرم افزار PicPars Tools طراحی کنید و سپس کدهای مربوطه را به آرایه A1_alephba (برای حروف بزرگ) و a0_alephba (برای حروف کوچک) اضافه کنید. و در نهایت به صورت کاملا عادی جملات خود نوشته و سپس توسط دستورات سی معادل حروف الفبایی را پیدا کرده و کدهای متناظر آنها را از آرایه های ذکر برای نمایش انتخاب می‌کنیم، در ادامه این مسئله را بیشتر توضیح خواهیم داد.

اصول کلی ارسال داده

همانطور که گفتیم برای ارسال هر یک از 8 داده آرایه ها باید از روش جاروب کردن استفاده کنیم به این صورت که در هر مرحله تنها یکی از سطر ها یک شود و مابقی صفر باشند و این لحظه داده های مربوطه این سطر نوشته شوند، آرایه زیر این عملیات برای ما انجام می دهد.

unsigned char R_data[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

متغییر speed برای کنترل سرعت نمایش حروف است، یعنی فاصله بین نمایش هر حروف توسط این تاخیر انجام می پذیرد. (بر حسب میلی ثانیه و ماکزیمم آن 65535 می‌باشد)

ایجاد فونت

Aa متغیری برای بزرگ بودن یا کوچک بودن حروف می باشد. locat نیز متغیر بسیار مهمی است که معادل حروف اسکی را از آرایه بر می‌دارد. دو آرایه زیر که به اصلاح فونت ما دارد می باشد باید به صورت a-z و A-Z تکمیل گردد که ما برای نمونه سه تا از حروف آن را تکمیل کرده ایم و مابقی را به سلیقه خوتان گذاشته ایم که باید توسط نرم افزار PicPars Tools طراحی و تکمیل شوند.

 flash unsigned char A1_alephba[][8]={
 {0X18,0X3C,0X66,0X66,0X7E,0X66,0X66,0X00}, // A  Locate in array = 0
 {0X78,0X64,0X64,0X7C,0X7C,0X64,0X64,0X78}, // B  Locate in array = 1
 {0X04,0X3C,0X7C,0X64,0X60,0X60,0X7C,0X3C}, // C  Locate in array = 2
 };
 
 flash unsigned char a0_alephba[][8]={
 {0X38,0X44,0X04,0X3C,0X44,0X44,0X3E,0X00}, // a  Locate in array = 0
 {0X20,0X20,0X20,0X38,0X24,0X24,0X38,0X00}, // b  Locate in array = 1
 {0X00,0X00,0X38,0X40,0X40,0X40,0X38,0X00}, // c  Locate in array = 2
 };

جدول شناسایی موقیعت حروف

به ازای هر حروفی که در آرایه اضافه می کنید باید در تابع lockup نیز یک case جدید برای شناسی ایجاد کنید، نکته مهم این است که باید ترتیب قرار گرفتن رعایت شود مانند آرایه های بالا که توضیح دادیم و همچنین case ها همگی با حروف کوچک تعریف شوند. اولین حرف locat 0 را دارد و حروف دوم locat 1 را دارد و همین طور تا آخر… بنابراین باید آدرس این locat‌ در تابع lockup نیز به طور صحیح وارد شوند.

void lockup(char input){
        switch (input) {
            case 'a'  :
            locat=0;
            break;
            case 'b'  :
            locat=1;
            break;
            case 'c'  :
            locat=2;
            break;
        };
    }

تابعrefrash

وظیفه این تابع این است که در مدت زمانی که تاخیر ایجاد می‌شود به صورت مداوم داده ها را روی ماتریس تازه سازی (Refresh) نماید، همانطور هم که قبلا اشاره کردیم اگر عمل تازه سازی را انجام ندهیم حروف تنها برای مدت 16 میلی ثانیه قابل دیدن خواهد بود.

  void refrash(){
     unsigned char i,d;
     unsigned int sp;
     sp=speed/16; if(sp<=0) sp=1; 
        for(d=0; d



در این تابع از دو حلقه تو در تو استفاده کرده ایم که حلقه داخلی وظیفه ارسال داده های موجود در آرایه انتخاب شده را دارند یعنی هر 8 بایت موجود در آرایه انتخاب شده باید با تاخیر 2 میلی ثانیه ارسال شوند بنابراین 16 میلی ثانیه تاخیر در اینجا به وجود می آيد حال با تقسیم کردن تاخیر کلی یعنی speed بر عدد 16 شرط حلقه for اولی ایجاد می شود و تا زمانی که این شرط برقرار است هم تاخیر دلخواه را ایجاد می کنیم و هم در لابه لای این تاخیر آرایه انتخاب شده تازه سازی می شود.

نحوی ارسال جملات به ماتریس

به عنوان مثلا ما می خواهیم جمله AaBbCcABCabc را روی ماتریس به صورت حروف به حروف نمایش دهیم. ابتدا باید این جمله را در حافظه flash میکرو به صورت زیر بنویسیم:

flash char text1[]={"AaBbCcABCabc"};

اکنون باید به صورت زیر جمله را برای ارسال آماده سازی کنیم:

// text1 START
            len=strlenf(text1);  //Lengh of string
            for(i=0; i



ابتدا توسط دستور strlenf طول جمله موجود در متغیر text1 را بدست می آوریم و درون متغیر len قرار می‌دهیم، متغیر len شرط پایان پذیرفتن حلقه می باشد، حال به ترتیب حروف جمله را جدا کرده و درون متغیر c قرار می دهیم و توسط دستور islower ابتدا چک میکنیم که آیا این کارکتر حروف کوچک می باشد یا خیر؟ در صورتی که جزء حروف کوچک بود با فراخوانی تابع lockup(c) آدرس آرایه این حرف را پیدا می کنیم و درون متغیر locat قرار می دهیم، همچین Aa=0 قرار می دهیم به این معنی که حروف کوچک می باشد. اما در صورتی که شرط برقرار نبود مجددا توسط دستور isupper چک می شود که آیا حرف موجود در متغییر c جزء حروف بزرگ می باشد یا خیر؟ در صورتی که اینگونه بود ابتدا تابع tolower فراخوانی می‌شود و حروف بزرگ به حروف کوچک تبدیل می شود سپس با فراخوانی تابع lockup(c) آدرس این حرف در آرایه پیدا می شود و درون متغیر locat قرار می‌گیرد، همچین Aa=1 می شود به این معنی که حروف بزرگ می باشد.

برای ایجاد جمله جدید فقط باید دستورات فوق را مجددا بنویسید و نام متغیر text1 را تغیر دهید به عنوان مثال text2 و در ابتدای برنامه text2 را تعریف کرده و جمله خود را درون آن بنویسید.

این مثال در نگاه اول شاید کاربری نباشد ولی دارای نکات آموزش فراوانی است. افرادی که تا بحال با ماتریس LED کار نکرده اند با مطالعه این مطلب به راحتی اصول اولیه آن را یاد خواهند گرفت و قادر خواهند بود که با تغیراتی در این برنامه آن را توسعه دهند و یا اینکه جملات را به صورت روان به حرکت درآورند.

انشاء الله در مطالب آیند به موضوع حرکت درآوردن متن خواهیم پرداخت.