ايران ويج

نسخه‌ی کامل: مشکل در برنامه ی تایپ با کیپد 4×4
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام به همگی
چند وقتیه روی برنامه ی شبیه سازی تایپ(فقط حروف انگلیسی) با کیپد 4×4 روی ATMGA32 کار می کنم.
روش کار هم اینه:
{
کلید های 1 تا 9 در کیپد مثل کیپد نوکیا حروف را دربر دارند با این تفاوت که الفبای انگلیسی + فاصله به طور همگن بین 9 کلید کیپد تقسیم بندی شده اند و با فشردن (مثلا) کلید 1 در خط دوم ال سی دی (باید!) حروف a-b-c نمایش داده شوند تا کاربر با انتخاب حرف مورد نظر بوسیله ی فشردن کلید های 1 تا 3 آنرا در خط اول ال سی دی تایپ کند(locate 1,1)}
اما نمی دونم اشکال کار کجاست که وقتی دکمه ای از کیپد رو می زنم به جای نمایش 3 تا حرف یک سطر نشون میده. اگه به برنامه و عکس نگاه کنید متوجه می شین.

[img][تصویر:  th.d1c09bde1c.jpg][/img]

کد 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 
مهندس میشه بگی تو برنامه چی کار کردی و روش کارت به چی صورت بوده !

آخه از برنامت فقط خودت سر در میاری !!!
(۰۱-اسفند-۱۳۸۸, ۰۱:۴۰:۲۳)t3r!p3000 نوشته است: [ -> ]مهندس میشه بگی تو برنامه چی کار کردی و روش کارت به چی صورت بوده !

آخه از برنامت فقط خودت سر در میاری !!!

ببخشید.
من به طور تجربی برنامه نویسی رو یاد گرفتم (با چند تا کتاب) ....
اما یه خبر خوش => تونستم درستش کنم .
اینم کد برنامه (گفتم شاید به درد بعضی ها بخوره)

کد 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 S 
As String * 13
Dim Key 
As Integer , Key_0 As Integer , Tmp As String * 16 , Modd As Boolean , S_key As Integer , T_ab As String * 1 , T_ab1 As String * 1 , Lng As Integer
Dim T1 
As Integer , T2 As Integer , T3 As Integer

Dim A_b 
As String * 27
Dim Ab
(27) As String * 1
Dim Tmpp 
As Integer

A_b 
= "AbcDefGhiJklMnoPqrStuVwxYz "

Main:
Locate 1 , 1
For Tmpp = 1 To 10

 Ab
(tmpp -1) = Mid(a_b , Tmpp , 1)
 
Lcd Ab(tmpp -1)
Next Tmpp



Goto Main

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 
اشکال برنامه توی تبدیل نوع داده ها بود.
سلام؟

میشه یه برنامه با زبان بیسیک بهم بگید تا بتونم یه موتور سروو را با 1کیبرد سروو راه اندازی کنم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟خواهش میکنم خیلی به این برنامه نیاز دارم؟؟؟؟؟؟یعنی وقتی به کیبرد زاویه 45 میدم موتور سروو زاویه 45 بهم نشون بده؟؟؟؟؟؟؟؟؟؟
لطفا شبیه سازی برنامتون در پرتئوس هم بذارید .. ممنون