تبلیغات
مرجع تخصصی برق و الکترونیک - ایجاد حرکت در تابلو روان - حرکت به بالا در تابلو روان با جاروب ستونی
مرجع تخصصی برق و الکترونیک
Electronic And Power Community Reference

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

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

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

'*********************************************
'* 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


آرشیو مطالب
نظر سنجی
رشته ی شما چیست؟








صفحات جانبی
پیوند های روزانه





در صورتی که مایل به دریافت مطالب جدید در ایمیلتان هستید میتوانید با ثبت نام در فرم بالا از مقالات و پروژه های رایگان هر هفته بهرمند شوید. current.mihanblog.com