ایجاد حرکت در تابلو روان - حرکت به بالا در تابلو روان با جاروب ستونی
 

در این مقاله با نحوه ایجاد یکی دیگر از مهم ترین افکتهای موجود بر روی تابلو روان آشنا خواهیم شد. افکت حرکت به سمت پایین در تابلو روان با جاروب ستونی.

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

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

 

'*********************************************
'* This Program Writing By : Hossein Lachini *
'* Scroll to Up 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

Dim R As Byte

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

Gelayof:
Data &B11110111
Data &B11111011
Data &B10000001
Data &B11111011
Data &B11110111

 

همانطور که مشاهده میکنید بعد از خواندن اطلاعات جدول گلایف و قرار گرفتن آن بر روی پورت B اطلاعات موجود در این پورت توسط دستور [Shift Portb , Right , S] به اندازه S بیت به سمت راست شیفت داده میشود که مقدار متغییر S در هر 10 بار جاروب کامل ماتریس به اندازه یک واحد افزایش می‌یابد.

به نظر میرسد که برنامه کامل شده و میتوانیم با خیال راحت آن را تست کنیم ، ولی پس از اجرای برنامه شاهد صحنه زیر خواهیم بود.

 

 

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

حالا که ایراد کار را پیدا کردیم باید این مشکل را برطرف نماییم. راه های مختلفی برای این کار وجود دارد که من از یک متغییر دیگر در برنامه کمک گرفتم. این متغییر Mask است که نام آن بی ارتباط با نقشش در برنامه نیست. من در ابتدای حلقه For-Next مربوط به متغییر S ابتدا تمامی بیت های متغییر Mask را یک کردم. سپس توسط یک دستور شیفت به چپ به میزانی بیت های این متغییر را به سمت چپ شیفت دادم که در نهایت به تعدادی در سمت چپ متغییر یک بماند که در دستور شیفت به راست مربوط به پورت B در این پورت صفر به سمت چپ وارد شده.

 

'*********************************************
'* This Program Writing By : Hossein Lachini *
'* Scroll to Up 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

Dim R As Byte
Dim Mask As Byte
Dim A As Byte

Do
    For S = 0 To 8
        A = 8 - S
        Mask = &HFF
        Shift Mask , Left , A
        For Refresh = 1 To 10
            Scan = &B00000001
            For Col = 0 To 4
                Index = S + Col
                Portb = Lookup(Index , Gelayof)
                Shift Portb , Right , S
                Portb = Portb Or Mask
                Portd = Scan
                Waitus 250
                Rotate Scan , Left
                Portd = &H00
            Next Col
        Next Refresh
    Next S
Loop
End 'end program

Gelayof:
Data &B11110111
Data &B11111011
Data &B10000001
Data &B11111011
Data &B11110111

 

بعنوان مثال فرض کنید که متغییر S  مقدارش برابر با 3 باشد در نتیجه مقدار متغییر A برابر با 5 خواهد بود ودر نتیجه متغییر Mask به اندازه 5 بیت به سمت چپ شیفت پیدا میکند و مقدار آن برابر با 11100000خواهد بود. از طرفی پورت B هم در هر بار اجرای حلقه در این حالت به اندازه 3 بیت به سمت راست شیفت پیدا میکند و مقدار آن بصورت 000xxxxx در خواهد آمد. حال اگر این دو متغییر با هم Or شوند سه بیت سمت چپ پورت B یک خواهند شد و بصورت 111xxxxx در خواهند آمد بدین ترتیب مشکل صفر بودن بیت های سمت چپ پورت بر طرف میشود. البته به این عمل که ما با استفاده از عملگر های منطقی بیت های خاصی از یک متغییر را تغییر میدهیم اصطلاحاً ماسک کردن میگویند. و دلیل اتخاب نام Mask نیز برای این متغییر هم همین موضوع است.

مجدداً بر نامه را بر روی مدار تابلو روان تست میزنیم که نتیجه آن در فیلم زیر قابل مشاهده است.

 

 

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

 

'*********************************************
'* This Program Writing By : Hossein Lachini *
'* Scroll to Up 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

Dim R As Byte
Dim Mask As Byte
Dim A As Byte

Do
    For S = 0 To 8
        A = 8 - S
        Mask = &HFF
        Shift Mask , Right , S
        For Refresh = 1 To 10
            Scan = &B00000001
            For Col = 0 To 4
                Index = S + Col
                Portb = Lookup(Index , Gelayof)
                Shift Portb , Left , A
                Portb = Portb Or Mask
                Portd = Scan
                Waitus 250
                Rotate Scan , Left
                Portd = &H00
            Next Col
        Next Refresh
    Next S

    For S = 0 To 8
        A = 8 - S
        Mask = &HFF
        Shift Mask , Left , A
        For Refresh = 1 To 10
            Scan = &B00000001
            For Col = 0 To 4
                Index = S + Col
                Portb = Lookup(Index , Gelayof)
                Shift Portb , Right , S
                Portb = Portb Or Mask
                Portd = Scan
                Waitus 250
                Rotate Scan , Left
                Portd = &H00
            Next Col
        Next Refresh
    Next S
Loop
End 'end program

Gelayof:
Data &B11110111
Data &B11111011
Data &B10000001
Data &B11111011
Data &B11110111

 

با اجرای کدهای بالا مشکل ظاهر شدن ناگهانی فلش بر روی تابلو برطرف شده است، که با اضافه کردن بخش انتهایی به برنامه این مسئله حل شده است. توضیح این بخش را بر عهده شما خواننده هوشمند سایت !.

در زیر فیلم تابلو روان پس از اجرای برنامه فوق مشاهده می‌کنید.

 

 

من جهت سهولت کار شما کدهای فوق به همراه فایل Hex برنامه را جهت دانلود در سایت قرار دادم.

 

Í

جهت دانلود فایلهای فوق اینجا کلیک کنید.

حجم فایل : 4.51 کیلو بایت

فرمت فایل Zip


در مقاله بعدی با هم به مطالعه روش ایجاد حرکت به سمت پایین در تابلو روان با جاروب ستونی خواهیم پرداخت. شما میتوانید سئوالات و نظرات خود را از طریق انجمن سایت به آدرس زیر با ما مطرح کنید:

http://www.hlachini.com/forum-1.html

 

جهت ادامه مطلب اینجا کلیک کنید.