SoS
مدیر سایت
وضعيت: آفلاين 11 شهريور ماه ، 1387 تعداد ارسالها: 569 امتياز: 371 تشکر کرده: 15 تشکر شده 334 بار در 201 پست
|
ارسال شده در: جمعه، 19 تير ماه ، 1388 00:31:08 موضوع مطلب: اتصال کیبورد به میکرو |
|
|
دوست عزیز همانطور که گفته شد شما باید مشخص کنید که آیا میخواهید اصول کار کیبرد را بدانید و بعد از آن به طراحی مدار خود بپردازید؟ یا اینکه فقط ساخت مدار برایتان مهم است و دانستن زیر و بم کیبورد چندان اهمیتی ندارد؟
در حالت اول منبع چ در اینترنت و چه در کتاب زیاد است. به عنوان مثال کتاب مدارهای واسط آقای مزیدی اطلاعات خوبی داده و همچنین میتوانید در خود سایت اتمل مراجعه کنید و یا CD های آنرا تهیه کنید که در آن به کارکرد کیبورد بصورت کامل پرداخته و یک نمونه برنامه به زبان C هم قرار داده که در واقع بسکام هم از آن الگو گرفته است و به نظر من نوشتن در رابطه با چیزی که قبلا در مورد ان اطلاعات جامعی وجود دارد فقط تکرار مکررات است و باید ما به دنبال ایجاد فکر و ایده تازه باشیم.
اما اگر فقط به دنبال ساخت آن هستید که در بسکام همه جیز را را آماده کرده و بقیه کار همان برنامه نویسی هست. حالا شما میخواهید با زدن یک کلید از کیبورد شرط حاصی احرا شود خوب اول کلید را با استفاده توابع بسکام بخوانید و بعد و از انکه کلید مورد نظر زده شد شرط خود را احرا کنید.
شما پرسیدید که کدام جدول کد اسکی کلید هست؟ خوب این نشون میده که واقعا راهنمای بسکام رو در مورد دستور GETATKBD نخودید. برید مراجعه کنید و ببیند ، کد زیر را برای مثال قرار داده :
:كد |
'-----------------------------------------------------------------------------------------
'name : getatkbd.bas
'copyright : (c) 1995-2005, MCS Electronics
'purpose : PC AT-KEYBOARD Sample
'micro : Mega48
'suited for demo : yes
'commercial addon needed : no
'-----------------------------------------------------------------------------------------
$regfile = "8535def.dat" ' specify the used micro
$crystal = 4000000 ' used crystal frequency
$baud = 19200 ' use baud rate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
'For this example :
'connect PC AT keyboard clock to PIND.2 on the 8535
'connect PC AT keyboard data to PIND.4 on the 8535
'The GetATKBD() function does not use an interrupt.
'But it waits until a key was pressed!
'configure the pins to use for the clock and data
'can be any pin that can serve as an input
'Keydata is the label of the key translation table
Config Keyboard = Pind.2 , Data = Pind.4 , Keydata = Keydata
'Dim some used variables
Dim S As String * 12
Dim B As Byte
'In this example we use SERIAL(COM) INPUT redirection
$serialinput = Kbdinput
'Show the program is running
Print "hello"
Do
'The following code is remarked but show how to use the GetATKBD() function
' B = Getatkbd() 'get a byte and store it into byte variable
'When no real key is pressed the result is 0
'So test if the result was > 0
' If B > 0 Then
' Print B ; Chr(b)
' End If
'The purpose of this sample was how to use a PC AT keyboard
'The input that normally comes from the serial port is redirected to the
'external keyboard so you use it to type
Input "Name " , S
'and show the result
Print S
'now wait for the F1 key , we defined the number 200 for F1 in the table
Do
B = Getatkbd()
Loop Until B <> 200
Print B
Loop
End
'Since we do a redirection we call the routine from the redirection routine
'
Kbdinput:
'we come here when input is required from the COM port
'So we pass the key into R24 with the GetATkbd function
' We need some ASM code to save the registers used by the function
$asm
push r16 ; save used register
push r25
push r26
push r27
Kbdinput1:
rCall _getatkbd ; call the function
tst r24 ; check for zero
breq Kbdinput1 ; yes so try again
pop r27 ; we got a valid key so restore registers
pop r26
pop r25
pop r16
$end Asm
'just return
Return
'The tricky part is that you MUST include a normal call to the routine
'otherwise you get an error
'This is no clean solution and will be changed
B = Getatkbd()
'This is the key translation table
Keydata:
'normal keys lower case
Data 0 , 0 , 0 , 0 , 0 , 200 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H5E , 0
Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0
Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32 , 118 , 102 , 116 , 114 , 53 , 0
Data 0 , 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0
Data 0 , 44 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 45 , 108 , 48 , 112 , 43 , 0
Data 0 , 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0
Data 0 , 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
'shifted keys UPPER case
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 0
Data 0 , 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
Data 0 , 78 , 66 , 72 , 71 , 89 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 40 , 0
Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 63 , 0
Data 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0
Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
|
در این دو جدول توضیحاتی نوشته در اولی normal keys lower case یعنی حالت معمولی کلید که حروف کوچک تایپ میشوند.
در دومی نوشته : shifted keys UPPER case کلید با شیفت که حروف بزرگ تایپ میشوند. هر دو جدول کدهای اسکی هستند. و همانطور که در راهنما گفته شما برای گذاشتن شرط برای کلید F1 اول به جدول اسکن کد تولید شده برای هر کلید مراجعه کنید. در این جدول برای F1 نوشته که کد 5 تولید میشود حالا شما در خانه 5+1 در جدول عددی مثل 200 بنویسید که خودش هم این کار رو کرده و حالا در برنامه شرط ی قرار میدهید که تا زمانیکه این کلید زده نشده منتظر بماند. که در برنامه با حلقه Do-Loop اینکار رو انجام داده.
امیدورام که این مطلب تونسته باشه تا حدی مسئله رو برای شما روشن کرده باشه و همچنین به راهنمای موجود در نرم افزار های این برادران خارجی هم توجه بکنیم که واقعا زحمت زیادی براش کشیدن و خیلی از مولفان ما هم فقط مترجم هستند نه مولف. |
|
SoS
مدیر سایت
وضعيت: آفلاين 11 شهريور ماه ، 1387 تعداد ارسالها: 569 امتياز: 371 تشکر کرده: 15 تشکر شده 334 بار در 201 پست
|
ارسال شده در: شنبه، 3 مرداد ماه ، 1388 11:50:48 موضوع مطلب: اتصال کیبورد به تابلوروان |
|
|
برنامه شما این بود :
:كد |
$regfile = "m16def.dat"
$crystal = 8000000
Config Portb = Output
Config Porta = 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 20
Prog: ' nomayesh A
For Refresh = 1 To 10
Scan = &B00000001
For Col = 0 To 4
Index = S + Col
Portb = Lookup(index , Gelayof)
Porta = Scan
Waitms 1
Rotate Scan , Left
Porta = &H00
Next Col
Next Refresh
Prog1: ' 2 ta sotoon faseleh
For Refresh = 1 To 10
Scan = &B00000001
For Col = 0 To 4
Index = S + Col
Portb = Lookup(index , Gelayof1)
Porta = Scan
Waitms 1
Rotate Scan , Left
Porta = &H00
Next Col
Next Refresh
Prog2: ' nomayeshe A
For Refresh = 1 To 10
Scan = &B00000001
For Col = 0 To 4
Index = S + Col
If Index > 1 Then Index = 0
Portb = Lookup(index , Gelayof2)
Porta = Scan
Waitms 1
Rotate Scan , Left
Porta = &H00
Next Col
Next Refresh
Prog3: '
For Refresh = 1 To 10
Scan = &B00000001
For Col = 0 To 4
Index = S + Col
Portb = Lookup(index , Gelayof3)
Porta = Scan
Waitms 1
Rotate Scan , Left
Porta = &H00
Next Col
Next Refresh
Prog4: '
For Refresh = 1 To 10
Scan = &B00000001
For Col = 0 To 4
Index = S + Col
Portb = Lookup(index , Gelayof4)
Porta = Scan
Waitms 1
Rotate Scan , Left
Porta = &H00
Next Col
Next Refresh
Next S
Loop
End 'end program
Gelayof:
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111
Gelayof1:
Data &B10000011
Data &B11110101
Data &B11110110
Data &B11110101
Data &B10000011
Data &B11111111
Data &B11111111
Gelayof2:
Data &B11111111
Data &B11111111
Gelayof3:
Data &B10000011
Data &B11110101
Data &B11110110
Data &B11110101
Data &B10000011
Data &B11111111
Data &B11111111
Gelayof4:
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111
Data &B11111111
|
مشکل شما در عدم برنامه نویسی صحیح است. لزومی به استفاده از چندین قطعه برنامه و چندین جدول گلایف نیست. شما براحتی میتوانید دو حرف A را با فاصله در یک جدول استفاده کنید. من توصیه میکنم مطالب توضیح داده شده در مورد تابلو روان را یکبار دیگر مطالعه کنید. همچنین برای درک بهتر چنین برنامه ای میتوانید از نرم افزار تولید سورس بسکام تابلوروان 8 در 128 استفاده کنید. من در زیر کد تولید شده توسط این برنامه که دو حرف A با فاصله از هم حرکت میکنند را در یک ماتریس 8 در 8 آوردم :
:كد |
'*********************************************
'* This Program Writing By : Hossein Lachini *
'* The Persian 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 *
'*********************************************
$regfile = "m16def.dat"
$crystal = 1000000
Config Porta = Output
Config Portb = Output
Config Portc = Output
Config Portd = Output
Dim Scan As Byte
Dim I As Word
Dim Refresh As Byte
Dim T As Byte
Dim B As Byte
Dim D As Word
Dim U As Word
Dim S As Word
Dim M As Word
Dim E As Word
Dim A As Word
Do
' _ _ _ _ _ _ _ _ _ _____ _____ _ _ _ __ _ _ _____ _____ _ _
'| | | || | | || | | | | | | || | / _ \ / _ \ | | | || || \ | || | / _ \ / _ \ | \ / |
'| |/\| || |/\| || |/\| | | |_| || | | |_| | | | |_| | |_| || || \| || | | | |_| | | | | | \/ |
'| || || | | _ || | | _ | | | _ | _ || || || | | | _ | | | | | |
'| /\ || /\ || /\ | _ | | | || |___ | | | | | |_| | | | | || || |\ || | _ | |_| | | |_| | | |\/| |
'|_/ \_||_/ \_||_/ \_||_||_| |_||_____||_| |_| \_____/ |_| |_||_||_| \__||_||_| \_____/ \_____/ |_| |_|
' +---------------------------+
' | Scrolling Text00 to Right |
' +---------------------------+
For S = 0 To 32
M = 32 - S
E = M + 7
For Refresh = 1 To 5
Scan = &H01
For I = M To E
For B = 0 To 0
D = B * 8
D = D + I
Portd = Lookup(d , Text00)
Portb = 2 ^ B
Portb = 0
Next B
Porta = Scan
Rotate Scan , Left , 1
Waitms 2
Porta = 0
Next I
Next Refresh
Next S
Loop
End 'end program
Text00:
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
Data &H3F , &H44 , &H44 , &H44 , &H3F , &H00 , &H00 , &H00 'A
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 '
Data &H3F , &H44 , &H44 , &H44 , &H3F , &H00 , &H00 , &H00 'A
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
|
برای دانلود برنامه تولید سورس بسکام تابلو روان از لینک زیر استفاده کنید :
http://www.hlachini.com/download-file-9.html
در مورد اتصال کیبورد هم شما لازم به تعریف یک جدول به ازای هر کلید ندارید. بلکه در یک جدول تمامی کلیدهای مورد نیاز را باید تعریف کنید. برای راحتی شما هم به نظر من یکبار مدار تابلو روان قابل اتصال به کیبورد توسط LCD را بسازید و تست های خود را از آنجا شروع کنید چون شما هنوز با دو مسئله خواندن کیبورد و نمایش بر روی ماتریس مشکل دارید و حل همزمان این دو کار سختی هست. ولی در مدار LCD فقط به مسئله کیبورد میپردازید و مسائل آنرا برای خود حل میکنید. |
|