۳۰-بهمن-۱۳۸۸, ۱۹:۵۷:۵۳
سلام به همگی
چند وقتیه روی برنامه ی شبیه سازی تایپ(فقط حروف انگلیسی) با کیپد 4×4 روی ATMGA32 کار می کنم.
روش کار هم اینه:
{
کلید های 1 تا 9 در کیپد مثل کیپد نوکیا حروف را دربر دارند با این تفاوت که الفبای انگلیسی + فاصله به طور همگن بین 9 کلید کیپد تقسیم بندی شده اند و با فشردن (مثلا) کلید 1 در خط دوم ال سی دی (باید!) حروف a-b-c نمایش داده شوند تا کاربر با انتخاب حرف مورد نظر بوسیله ی فشردن کلید های 1 تا 3 آنرا در خط اول ال سی دی تایپ کند(locate 1,1)}
اما نمی دونم اشکال کار کجاست که وقتی دکمه ای از کیپد رو می زنم به جای نمایش 3 تا حرف یک سطر نشون میده. اگه به برنامه و عکس نگاه کنید متوجه می شین.
[img]
[/img]
چند وقتیه روی برنامه ی شبیه سازی تایپ(فقط حروف انگلیسی) با کیپد 4×4 روی ATMGA32 کار می کنم.
روش کار هم اینه:
{
کلید های 1 تا 9 در کیپد مثل کیپد نوکیا حروف را دربر دارند با این تفاوت که الفبای انگلیسی + فاصله به طور همگن بین 9 کلید کیپد تقسیم بندی شده اند و با فشردن (مثلا) کلید 1 در خط دوم ال سی دی (باید!) حروف a-b-c نمایش داده شوند تا کاربر با انتخاب حرف مورد نظر بوسیله ی فشردن کلید های 1 تا 3 آنرا در خط اول ال سی دی تایپ کند(locate 1,1)}
اما نمی دونم اشکال کار کجاست که وقتی دکمه ای از کیپد رو می زنم به جای نمایش 3 تا حرف یک سطر نشون میده. اگه به برنامه و عکس نگاه کنید متوجه می شین.
[img]
![[تصویر: th.d1c09bde1c.jpg]](http://www.freeimagehosting.net/uploads/th.d1c09bde1c.jpg)
کد php:
$regfile = "m32def.dat"
Declare Function Getkey(byval Value As Integer )as Integer
$crystal = 16000000
Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6
Config Lcd = 16 * 2
Config Kbd = Portc , Debounce = 50 , Delay = 10
Dim Key As Integer , Key_0 As Integer , Modd As Boolean , S_key As Integer , T1 As Integer , T2 As Integer , T3 As Integer , Tmpp As Integer
Dim A_b As String * 27
Dim Ab(27) As String * 1
A_b = "AbcDefGhiJklMnoPqrStuVwxYz "
Main:
For Tmpp = 1 To 27
Ab(tmpp -1) = Mid(a_b , Tmpp , 1)
Next Tmpp
Do
Waitms 15
If Modd = 0 Then
S_key = Getkbd()
If S_key <> 16 Then
Modd = 1
Key_0 = Getkey(s_key)
Locate 2 , 1
T1 = Key_0 - 1
T2 = T1 * 3
T3 = T2 + 2
For Tmpp = T2 To T3
Lcd Ab(tmpp) ; "-"
Next Tmpp
End If
Else
S_key = Getkbd()
If S_key <> 16 Then
Modd = 0
Key = Getkey(s_key)
Locate 2 , 1
Lcd " "
Locate 1 , 1
T1 = Key_0 - 1
T2 = T1 * 3
T3 = T2 + Key
Lcd Ab(t3)
End If
End If
Loop
End
Function Getkey(byval Value As Integer )as Integer
Local Rtn As Byte
If Value < 3 And 0 <= Value Then
Rtn = Value + 1
End If
If Value > 3 And Value < 7 Then
Rtn = Value
End If
If Value > 7 And Value < 11 Then
Rtn = Value - 1
End If
Select Case Value
Case 3
Rtn = 255
Case 7
Rtn = 254
Case 11
Rtn = 253
Case 15
Rtn = 252
Case 12
Rtn = 200
Case 13
Rtn = 0
Case 14
Rtn = 199
End Select
If Value = 16 Then
Rtn = 111
End If
Getkey = Rtn
End Function