ایجاد حرکت در تابلو روان - حرکت به چپ تاریخ : سه شنبه، 9 مهر ماه ، 1387
موضوع : تابلوروان - تابلو روان


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



حالا تصور کنید که ما بجای اینکه در این روش ابتدا اطلاعات ستون اول را در محل اصلی خود یعنی همان ستون اول نمایش دهیم، در ستون دوم نمایش دهیم و همینطور سایر اطلاعات را به اندازه یک ستون جابجا نمایش دهیم، چه اتفاقی می‌افتد؟ بله، متن به نمایش در خواهد آمد ولی بصورت افقی به اندازه یک ستون جابجا شده. اساس کار حرکات افقی ( چپ و راست ) در تابلوهای روان با جاروب ستونی هم همین است. به برنامه زیر دقت کنید.

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

For S = 0 To 4
        For Refresh = 1 To 10
            Scan = &B00000001
            For Col = 0 To 4
                Index = S + Col
                Portb = Lookup(Index , Gelayof)
                Portd = Scan
                Waitus 250
                Rotate Scan , Left
                Portd = &H00
            Next Col
        Next Refresh
    Next S

همانطور که می‌بینید این برنامه از سه حلقه For-Next تو در تو تشکیل شده، دو حلقه درونی صرفاً به نمایش اطلاعات می‌پردازند. حلقه داخلی یکبار تمام ستونها را جاروب میکند. حلقه وسط این کار را تا ده مرتبه تکرار میکند تا متن به اندازه کافی دیده شود و حلقه خارجی هر بار محل خواندن اطلاعات از جدول گلایف را به اندازه یک بایت (یک ستون) جابجا میکند. که باعث به حرکت درآمدن متن در تابلو میشود.

دقت کنید که ما در دستور Lookup آدرس خواندن اطلاعات را از متغییر Index میخوانیم، که این متغییر هم مقدارش توسط جمع زدن مقادیر Col و S محاسبه میشود که Col ستون در حال جاروب شدن بر روی ماتریس LED را نشان میدهد و S محل شروع خواندن مقادیر در جدول گلایف است.

خوب برنامه را اجرا کنید. تعجب کردید... یک کاراکتر عجیب غریب که مثل دنباله به کاراکتر اصلی شما چسبیده و به دنبال آن حرکت میکنه. این موجود ناشناخته از کجا پیداش شد؟! نمیتونید این مطلب به گردن میکروکنترلر بیچاره بیندازید. چون اون بجز اجرای بی چون چرای دستورات شما هیچکار دیگری نمیکنه. پس باید بکار خود شک کنیم. بله دوباره به سراغ برنامه میرویم و آنرا با دقت بیشتری بررسی میکنیم. زمانی که مقدار متغییر S یک میشود یعنی لحظه‌ای کاراکتر به اندازه یک ستون بر روی ماتریس LED جابجا میشود مقدار متغییر Index برابر با 5 خواهد شد ( البته در زمانی که مقدار متغییر Col برابر با 4 است ). و در دستور بعدی توسط فرمان Lookup میکرو به سراغ برداشتن بایت ششم ذخیر شده در جدول Gelayof میرود. در حالی که ما این جدول را تا 5 بایت تعریف کردیم و عملاً در مکان ششم هیچ متغییری توسط ما تعریف نشده و محتویات آن ناحیه نامشخص است.

Gelayof:
Data &B10000011
Data &B11110101
Data &B11110110
Data &B11110101
Data &B10000011

 

 و باعث میگردد که شما آن موجود غریبه را مشاهده کنید. برای رفع این مشکل باید به انتهای جدول گلایف به اندازه ابعاد ماتریس اضافه کنیم و مقادیری را در آن قرار دهیم که زمان نمایش چیزی بر روی تابلو روان نمایان نشود.( در این برنامه تمامی خانه ها یک میشوند ).

Gelayof:
Data &B10000011
Data &B11110101
Data &B11110110
Data &B11110101
Data &B10000011

Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111

خوب دوباره برنامه را اجرا میکنیم، البته این بار با جدول گلایف جدید. به نظر میرسد که دیگر مشکلی وجود ندارد و ما توانستیم آن غول بی شاخ و دم که پشت سر متن اصلی حرکت می‌کرد را از بین ببریم. اما هنوز یک ایراد کوچک در تابلو باقی مانده آنهم این است که هنگام نمایش حرکت به سمت چپ کاراکتر A یکدفعه بصورت کامل ظاهر می‌شود و سپس به تدریج از سمت چپ تابلو روان خارج میشود. در حالیکه بهتر این هست که کمی برای خود کلاس بگذارد و به تدریج از سمت راست تابلو روان ظاهر شود و از سوی دیگر خارج.

برای انجام این کار بهترین کار قرار دادن یک فضای خالی در ابتدای کاراکتر در جدول گلایف است که ابعاد این فضا به اندازه ابعاد ماتریس LED تابلو روان میباشد. که در تابلوی ما این مقدار به اندازه یک کاراکتر است. پس جدول گلایف به شکل زیر تغییر میکند.

Gelayof:
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111

Data &B10000011
Data &B11110101
Data &B11110110
Data &B11110101
Data &B10000011

Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111

 البته عجله نکنید چون اگر همین الان برنامه را اجرا کنید خواهید دید که کاراکتر A به آرامی از سمت راست وارد میشود( همانطور که انتظار داشتیم ) ولی به محض اینکه بصورت کامل وارد شد یکدفعه مخفی شده و دوباره این حرکت را تکرار میکند. خوب علت این قضیه این هست که ما هنوز به برنامه جاروب این تغییر در ابعاد جدول گلایف را اطلاع ندادیم. بله باید در حلقه For-Next اول مقدار نهایی متغییر S را از 4 به 9 افزایش دهیم ( به اندازه طول اضافه شده به جدول گلایف ). و دستورات مربوط به جاروب به شکل زیر در خواهند آمد.

For S = 0 To 9
        For Refresh = 1 To 10
            Scan = &B00000001
            For Col = 0 To 4
                Index = S + Col
                Portb = Lookup(Index , Gelayof)
                Portd = Scan
                Waitus 250
                Rotate Scan , Left
                Portd = &H00
            Next Col
        Next Refresh
    Next S

 متن کامل برنامه حرکت به سمت چپ در تابلو روان با جاروب ستونی :

'*********************************************
'* This Program Writing By : Hossein Lachini                    *
'* Scroll to Left on the LED Signe Board                           *
'* For to get more details visit :                                       *
'*                
www.HLachini.com                           *
'* Contact to me by :
eLachini@Gmail.com      *
'*********************************************

$regfile = "m8def.dat"
$crystal = 8000000

Config Portb = Output
Config Portd = Output

Dim Col As Byte
Dim Scan As Byte
Dim Refresh As Byte
Dim Index As Byte
Dim S As Byte

Do
    For S = 0 To 9
        For Refresh = 1 To 10
            Scan = &B00000001
            For Col = 0 To 4
                Index = S + Col
                Portb = Lookup(Index , Gelayof)
                Portd = Scan
                Waitus 250
                Rotate Scan , Left
                Portd = &H00
            Next Col
        Next Refresh
    Next S
Loop
End 'end program

Gelayof:
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111

Data &B10000011
Data &B11110101
Data &B11110110
Data &B11110101
Data &B10000011

Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111






منبع این مقاله : سايت مهندس لاچيني | پروژه ها و آموزش الكترونيك و تابلوروان
http://www.HLachini.elewiz.com

آدرس این مطلب :
http://www.HLachini.elewiz.com/modules.php?name=News&file=article&sid=19