شیفت رجیستر 74595 دارای 16 پایه است(تصویر 2). این قطعه از دو بخش
تشکیل شده است، بخش ورودی شامل یک شیفت رجیستر معمولی است که اطلاعات را بصورت
سریال از پایه 14 دریافت کرده و بصورت 8 خط موازی به قسمت بعدی منتقل میکند. بخش
اول دارای دو ورودی و یک خروجی دیگر نیز میباشد. پایه شماره 11 پایه ورودی کلاک است
و پایه 10 پایه ریست است. همچنین پایه 9 خروجی سریال شیفت رجیستر است که برای اتصال
به شیفترجیستر بعدی مورد نیاز خواهد بود.(تصویر 3)
تصوبر 3

بخش دوم این آی سی ، در واقع یک لچ 8 بیتی است. که خطوط ورودی
آن از طبقه قبل(شیفت رجیستر) می آیند، این طبقه به خروجی شیفت رجیستر نیز متصل است
که 8 خط خروجی 74595 از طریق لچ آن تهیه میشود. قاعدتا یک لچ باید پایه ای جهت عمل
لچ کردن داشته باشد که این پایه ورودی شماره 12 است و تا زمانی که بر روی این پایه
لبه پایین رونده ای اعمال نشود لچ اطلاعات را در خود ذخیره (لچ) نمیکند. از طرفی به
جهت اینکه بتوان خروجی را نیز کنترل نمود و در صورت لزوم خروجی قطع و یا وصل نمود
پایه شماره 13 که به لچ متصل است در نظر گرفته شده است.(تصویر 4)
تصویر4

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

برنامه و نقشه طوری طراحی شده اند که شما براحتی بتوانید نقشه
را گسترش داده و یا حتی کوچکتر کنید و برنامه نیز با تغییر پارامترهایی که شامل
Total_frame تعداد فریمها و Width
طول تابلو و Height ارتفاع تابلو است در ابتدای برنامه خود
بخود پیکربندی شده و نیازی به تغییرات دیگری از سوی شما نیست!
برنامه از دو سابروتین تشکیل شده و یک روتین وقفه. در روتین
وقفه هر بار یکی دسته از ستونها در ماتریس ها فعال میشود و اطلاعات همان ستون نیز
در شیفت رجیستر ها قرار میگیرد. مثلا در یک لحظه ستون اول تمامی ماتریس ها و بعد
ستون 2 و در اجرای بعدی ستون 3 و ... اطلاعات هر فریم توسط سابروتین
Readframe خوانده میشود و درون آرایه Buf
قرار میگیرد. این سابروتین با گرفتن شماره فریم مورد نظر شما، اطلاعات را از جدول
Ani خوانده و در آرایه Buf ذخیره
میکند و اطلاعات این آرایه توسط روتین وقفه تایمر یک Refresh
که وظیفه رفرش کردن ماتریس ها را برعهده دارد خوانده میشود. به عبارت دیگر هر چیزی
که در Buf قرار گیرد برروی تابلو نمایش داده میشود.
از طرفی برای هر فریم باید مقداری تاخیر نیز تا نمایش فریم بعدی
ایجاد کرد. و از آنجایی که مقدار تاخیر فوق در انیمشن GIF
تعریف شده است این اطلاعات در جدول Dly قرار داده شده است و
واحد آن میلی ثانیه است و وظیفه تابع framedelay نیز خواندن
این تاخیر و ایجاد آن میباشد. که شما با دادن شماره فریم به آن ، تاخیر مورد نیاز
همان فریم را خواهید داشت.
سورس برنامه :
$regfile = "m32def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 32
$framesize = 24
'---- this section from Gif Properties
Const Total_frame = 2
Const Width = 24
Const Height = 24
'---- end of Gif Properties
Const Number_of_matrix_in_row = Width / 8
Const Byte_in_col = Height / 8
Const Frame_size = Width * Byte_in_col
Const Number_of_byte_in_8_col = Byte_in_col * 8
Declare Sub Readframe(byval Frame_number As Word)
Declare Sub Framedelay(byval Frame_number As Word)
' Port A for COL refresh
Config Porta = Output
' Port D for 74595 register
Config Portd = Output
'Clock value: 15.625 kHz
Config Timer0 = Timer , Prescale = 64
On Ovf0 Refresh
Enable Timer0 ' enable the timer interrupt
Enable Interrupts
Sh_cp Alias Portd.3
Ds Alias Portd.4
St_cp Alias Portd.5
Mr Alias Portd.6
Oe Alias Portd.7
Col_port Alias Porta
Dim Col As Byte
Dim Buf(frame_size) As Byte
Dim I As Byte
Dim Matrix_counter As Word
Dim Buf_idx As Word
Dim Col_number_in_buf As Byte
Dim Frame_count As Word
Reset Mr
Set Mr
Reset Oe
Do
For Frame_count = 1 To Total_frame
Readframe Frame_count
Framedelay Frame_count
Next Frame_count
Loop
End 'end program
Sub Readframe(byval Frame_number As Word)
Local Idx As Word
Local Lookup_idx As Word
Disable Timer0
Decr Frame_number
'Start of Frame in lookup table
Lookup_idx = Frame_number * Frame_size
For Idx = 0 To Frame_size
Buf(idx) = Lookup(lookup_idx , Ani )
Incr Lookup_idx
Next Idx
Enable Timer0
End Sub
Sub Framedelay(byval Frame_number As Word)
Local D As Word
D = Lookup(frame_number , Dly )
Waitms D
End Sub
Refresh:
Reset Mr
Set Mr
Col_port = &H00
Set Oe
Col_port = 2 ^ Col
For Matrix_counter = 1 To Number_of_matrix_in_row
Col_number_in_buf = Number_of_matrix_in_row -
Matrix_counter
Col_number_in_buf = Col_number_in_buf *
Number_of_byte_in_8_col
Buf_idx = Col * Byte_in_col
Buf_idx = Buf_idx + Col_number_in_buf
For I = 1 To Byte_in_col
Shiftout Ds , Sh_cp , Buf(buf_idx) , 1 , 8
Incr Buf_idx
Next I
Next Matrix_counter
Reset St_cp
Set St_cp
Reset Oe
If Col < 7 Then
Incr Col
Else
Col = 0
End If
Return
- HERE INSERT DATA
برنامه فوق جهت کامل شدن نیاز به اطلاعات یک تصویر انیمیشن دارد
که برای این مثال من همان فایل پیش فرض
برنامه آنلاین تبدیل
انیمیشن GIF
به کد تابلوروان را انتخاب کردم. که تمامی جداول لازم
را به همراه پارامترهای لازم محاسبه و تولید میکند. این برنامه طول و عرض تصویر و
تعداد فریمها را مشخص کرده و شما میتوانید آن را در برنامه خود وارد کنید و سپس دو
جدول ساخته شده که یکی برای اطلاعات تصویر هر فریم و دیگر تاخیر بین هر فریم است را
تولید میکند که کافی است در برنامه کپی کنید.
نمونه کد تولید شده برای تصویر گربه شیطون(تصویر 6) را در زیر
آوردم که شما با مراجعه به آدرس
http://www.hlachini.com/gifanimation2hex.wiz هر تصویر دیگر و
یا نمونه های موجود در برنامه را در تابلوی خود استفاده کنید.
تصویر 6

کدهای برنامه :
'****************************************************
'* This Code Generate By : Hossein Lachini *
'* The GIF Animation to Hex Code for LED Sign Board *
'* For to get more details visit : *
'* www.HLachini.com *
'* Contact to me by : eLachini@Gmail.com *
'* Mobile/SMS : +98 912 381 2060 *
'****************************************************
' Width : 24
' Height : 24
' Toltal Frame : 2
Ani:
' Frame 1
' Delay : 500ms
Data &H00, &H00, &H00 '........................
Data &H03, &H80, &H00 '......###...............
Data &H05, &H00, &H00 '.....#.#................
Data &H0A, &H00, &H00 '....#.#.................
Data &H12, &H00, &H00 '...#..#.................
Data &H13, &H9F, &H80 '...#..###..######.......
Data &H20, &HE0, &H60 '..#.....###......##.....
Data &H20, &H00, &H18 '..#................##...
Data &H20, &H00, &H04 '..#..................#..
Data &H40, &H41, &H08 '.#.......#.....#....#...
Data &H43, &H40, &H10 '.#....##.#.........#....
Data &H42, &H48, &H20 '.#....#..#..#.....#.....
Data &H43, &H90, &H20 '.#....###..#......#.....
Data &H40, &H10, &H20 '.#.........#......#.....
Data &H40, &H08, &H20 '.#..........#.....#.....
Data &H40, &H10, &H20 '.#.........#......#.....
Data &H40, &H10, &H20 '.#.........#......#.....
Data &H20, &H08, &H10 '..#.........#......#....
Data &H20, &H00, &H08 '..#.................#...
Data &H10, &H01, &H04 '...#...........#.....#..
Data &H0B, &H40, &H18 '....#.##.#.........##...
Data &H06, &H60, &H60 '.....##..##......##.....
Data &H03, &H9F, &H80 '......###..######.......
Data &H00, &H00, &H00 '........................
' Frame 2
' Delay : 500ms
Data &H00, &H00, &H00 '........................
Data &H1C, &H00, &H00 '...###..................
Data &H0A, &H00, &H00 '....#.#.................
Data &H05, &H00, &H00 '.....#.#................
Data &H09, &H00, &H00 '....#..#................
Data &H09, &HCF, &HC0 '....#..###..######......
Data &H10, &H70, &H30 '...#.....###......##....
Data &H10, &H00, &H0C '...#................##..
Data &H10, &H00, &H02 '...#..................#.
Data &H20, &H20, &H84 '..#.......#.....#....#..
Data &H21, &HA0, &H08 '..#....##.#.........#...
Data &H21, &H22, &H10 '..#....#..#...#....#....
Data &H21, &HCC, &H10 '..#....###..##.....#....
Data &H20, &H14, &H10 '..#........#.#.....#....
Data &H20, &H12, &H10 '..#........#..#....#....
Data &H20, &H14, &H10 '..#........#.#.....#....
Data &H20, &H0C, &H10 '..#.........##.....#....
Data &H10, &H02, &H08 '...#..........#.....#...
Data &H10, &H00, &H04 '...#.................#..
Data &H08, &H00, &H82 '....#...........#.....#.
Data &H05, &HA0, &H0C '.....#.##.#.........##..
Data &H03, &H30, &H30 '......##..##......##....
Data &H01, &HCF, &HC0 '.......###..######......
Data &H00, &H00, &H00 '........................
Dly:
Data 500%, 500%
امیدوارم این آموزش توانسه باشد به شما کمک کرده باشد تا بهتر
بتوانید از این ابزار مفید که سایت بسکام نیز آنرا در اپلیکیشن نوت 204(AN
#204) خود معرفی کرده و به آدرس زیر در سایت خود معرفی و نصب کرده
است:
http://tools.mcselec.com/GIFdecode/index.php
ما را با نظرات خود در توسعه و قرار دادن مباحث و نرم افزارهای
مفید راهنمایی نمائید.