با سلام خدمت دوستان
من میخواستم کیبورد کامپیوتر را به avr متصل کنم. مداری ساده بستم تا کلید های فشار داده شده در کیبورد را در LCD نمایش بده که موفق هم شدم. در اینترنت گشتم دو نمونه کد را پیدا کردم که هر دوتا کد به خوبی کار نمیکند و مشکل دارد. کد اولی که اینجا میذارم کار میکنه فقط کلید های عددی سمت راست کیبورد با این کد کار نمیکنه. و برای تایپ اعداد حتما باید از کلید های اعداد بالای حروف ها استفاده شود. در حالی که من علاوه بر تایپ توسط اعداد بالای صفحه کلید میخوام از اعداد و کلید های اعداد سمت راست کیبورد هم استفاده کنم در حالی که با این کد فقط حروف و اعداد بالای حروف و کلید های ترکیبی و f ها قابل تشخیص است.
دوستان اگه ممکنه راهنمایی کنید کد های کلید های سمت راست اگر میدادنید اعلام کنید. کارم بدجور گیره. هرکاری میکنم صفحه کلید اعداد سمت راست راه نمی افته و در lcd چیزی نشان نمیده.
یک کد دیگه هم دارم که باز اعداد سمت راست صفحه کلید را فعال میکنه ولی کلید های ترکیبی را خراب میکنه و درست کار نمیکنه. مثلا علامت @ را درست نشان نمیده و ....
ولی کد اولی که گذاشتم کامل تره ولی فقط تنها مشکل اینه که اعداد صفحه کلید سمت راست کیبورد را فعال نمیکنه.
دوستان راهنمایی کنید ممنون میشم.

کد اولی :
$regfile = "m32def.dat"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , _
Db7 = Portb.7 , E = Portb.2 , Rs = Portb.0
Config Lcd = 16 * 2
Config Keyboard = Pind.2 , Data = Pind.3 , Keydata = Keydata
'clock=pind.2 , data=pind.3
Dim K As Byte
Waitms 100
Cls
Main:
K = Getatkbd()
Select Case K:
Case 44:
Cls
Home
Case 13:
Lowerline
Case 9:
Shiftcursor Right
Shiftcursor Right
Shiftcursor Right
Shiftcursor Right
Case 8:
Shiftcursor Left
Lcd " ";
Shiftcursor Left
Case 141:
Cls
Lcd " Press F1"
Case 142:
Cls
Lcd " Press F2"
Case 143:
Cls
Lcd " Press F3"
Case 144:
Cls
Lcd " Perss F4"
Case 152:
Cls
Lcd " Press F5"
Case 153:
Cls
Lcd " Press F6"
Case 154:
Cls
Lcd " Press F10"
Case 158:
Cls
Lcd " Press F8"
Case 159:
Cls
Lcd " Press F9"
Case 163:
Cls
Lcd " Press F11"
Case 164:
Cls
Lcd " Press F12"
Case 10:
Cls
Lcd " Press ESC"
Case 28:
Home
Case 30:
Upperline
Case 31:
Lowerline
Case 134 :
Shiftcursor Left
Case 135:
Shiftcursor Right
Case Else Lcd String(1 , K)
End Select
jmp main
End
'end program
Keydata: 'designed by ETRmodern
'normal keys lower case
Data 0 , 159 , 0 , 152 , 143 , 141 , 142 , 164 , 0 , 154 , 158 , 153 , 144 , 9 , 0 , 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 , 0 , 0 , 0 , 109 , 106 , 117 , 55 , 56 , 0
Data 0 , 0 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 47 , 108 , 59 , 112 , 45 , 0
Data 0 , 0 , 39 , 0 , 91 , 61 , 0 , 0 , 0 , 0 , 13 , 93 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 0 , 0 , 134 , 28 , 0 , 0 , 0
Data 0 , 44 , 31 , 0 , 135 , 30 , 10 , 0 , 163 , 0 , 0 , 0 , 0 , 0 , 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 , 64 , 0
Data 0 , 67 , 88 , 68 , 69 , 36 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
Data 0 , 78 , 66 , 72 , 71 , 89 , 94 , 0 , 0 , 0 , 77 , 74 , 85 , 38 , 42 , 0
Data 0 , 60 , 75 , 73 , 79 , 41 , 40 , 0 , 0 , 62 , 63 , 76 , 58 , 80 , 95 , 0
Data 0 , 0 , 34 , 0 , 123 , 43 , 0 , 0 , 0 , 0 , 13 , 125 , 0 , 166 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 44 , 0 , 0 , 0 , 0 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
کد دوم :
$regfile = "m32def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , _
Db7 = Portb.7 , E = Portb.2 , Rs = Portb.0
Config Keyboard = Pind.2 , Data = Pind.3 , Keydata = Key
Dim A As Byte
Do
A = Getatkbd()
If A <> 0 Then
Lcd String(1 , A)
End If
Loop
End
Key:
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
من میخواستم کیبورد کامپیوتر را به avr متصل کنم. مداری ساده بستم تا کلید های فشار داده شده در کیبورد را در LCD نمایش بده که موفق هم شدم. در اینترنت گشتم دو نمونه کد را پیدا کردم که هر دوتا کد به خوبی کار نمیکند و مشکل دارد. کد اولی که اینجا میذارم کار میکنه فقط کلید های عددی سمت راست کیبورد با این کد کار نمیکنه. و برای تایپ اعداد حتما باید از کلید های اعداد بالای حروف ها استفاده شود. در حالی که من علاوه بر تایپ توسط اعداد بالای صفحه کلید میخوام از اعداد و کلید های اعداد سمت راست کیبورد هم استفاده کنم در حالی که با این کد فقط حروف و اعداد بالای حروف و کلید های ترکیبی و f ها قابل تشخیص است.
دوستان اگه ممکنه راهنمایی کنید کد های کلید های سمت راست اگر میدادنید اعلام کنید. کارم بدجور گیره. هرکاری میکنم صفحه کلید اعداد سمت راست راه نمی افته و در lcd چیزی نشان نمیده.
یک کد دیگه هم دارم که باز اعداد سمت راست صفحه کلید را فعال میکنه ولی کلید های ترکیبی را خراب میکنه و درست کار نمیکنه. مثلا علامت @ را درست نشان نمیده و ....
ولی کد اولی که گذاشتم کامل تره ولی فقط تنها مشکل اینه که اعداد صفحه کلید سمت راست کیبورد را فعال نمیکنه.
دوستان راهنمایی کنید ممنون میشم.


کد اولی :
$regfile = "m32def.dat"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , _
Db7 = Portb.7 , E = Portb.2 , Rs = Portb.0
Config Lcd = 16 * 2
Config Keyboard = Pind.2 , Data = Pind.3 , Keydata = Keydata
'clock=pind.2 , data=pind.3
Dim K As Byte
Waitms 100
Cls
Main:
K = Getatkbd()
Select Case K:
Case 44:
Cls
Home
Case 13:
Lowerline
Case 9:
Shiftcursor Right
Shiftcursor Right
Shiftcursor Right
Shiftcursor Right
Case 8:
Shiftcursor Left
Lcd " ";
Shiftcursor Left
Case 141:
Cls
Lcd " Press F1"
Case 142:
Cls
Lcd " Press F2"
Case 143:
Cls
Lcd " Press F3"
Case 144:
Cls
Lcd " Perss F4"
Case 152:
Cls
Lcd " Press F5"
Case 153:
Cls
Lcd " Press F6"
Case 154:
Cls
Lcd " Press F10"
Case 158:
Cls
Lcd " Press F8"
Case 159:
Cls
Lcd " Press F9"
Case 163:
Cls
Lcd " Press F11"
Case 164:
Cls
Lcd " Press F12"
Case 10:
Cls
Lcd " Press ESC"
Case 28:
Home
Case 30:
Upperline
Case 31:
Lowerline
Case 134 :
Shiftcursor Left
Case 135:
Shiftcursor Right
Case Else Lcd String(1 , K)
End Select
jmp main
End
'end program
Keydata: 'designed by ETRmodern
'normal keys lower case
Data 0 , 159 , 0 , 152 , 143 , 141 , 142 , 164 , 0 , 154 , 158 , 153 , 144 , 9 , 0 , 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 , 0 , 0 , 0 , 109 , 106 , 117 , 55 , 56 , 0
Data 0 , 0 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 47 , 108 , 59 , 112 , 45 , 0
Data 0 , 0 , 39 , 0 , 91 , 61 , 0 , 0 , 0 , 0 , 13 , 93 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 0 , 0 , 134 , 28 , 0 , 0 , 0
Data 0 , 44 , 31 , 0 , 135 , 30 , 10 , 0 , 163 , 0 , 0 , 0 , 0 , 0 , 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 , 64 , 0
Data 0 , 67 , 88 , 68 , 69 , 36 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
Data 0 , 78 , 66 , 72 , 71 , 89 , 94 , 0 , 0 , 0 , 77 , 74 , 85 , 38 , 42 , 0
Data 0 , 60 , 75 , 73 , 79 , 41 , 40 , 0 , 0 , 62 , 63 , 76 , 58 , 80 , 95 , 0
Data 0 , 0 , 34 , 0 , 123 , 43 , 0 , 0 , 0 , 0 , 13 , 125 , 0 , 166 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 44 , 0 , 0 , 0 , 0 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
کد دوم :
$regfile = "m32def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , _
Db7 = Portb.7 , E = Portb.2 , Rs = Portb.0
Config Keyboard = Pind.2 , Data = Pind.3 , Keydata = Key
Dim A As Byte
Do
A = Getatkbd()
If A <> 0 Then
Lcd String(1 , A)
End If
Loop
End
Key:
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