با عرض سلام و خسته نباشید خدمت شما.من میخوام که با میکروی atmega32 و صفحه کلید 4*4 و lcd کاراکتری 2*16 برنامه ای بنویسم که یک عدد 2 یا 3 رقمی را از صفحه کلید بگیره و در سطر اول نمایش بدهد که اگر این عدد زوج بود جلو آن( در سطر اول ) کلمه زوج ( به انگلیسی ) نمایش داده بشه و نصف آن عدد در سطر دوم نشان داده بشه و اگر این عدد فرد بود جلو آن ( در سطر اول ) کلمه فرد ( به انگلیسی ) نمایش داده بشه و باقیمانده و خارج قسمت تقسیم بر 2 آن عدد در سطر دوم نشان داده بشه.من اینجا مشکل دارم که چه جوری باید تو برنامه ( بسکام )
معلوم کنم که فقط 2 یا 3 رقم را از صفحه کلید بگیره و مثلا با زدن دکمه OK جواب را نمایش بدهد.تو برنامه میتونم با دستور getkbd کار کنم ولی همینجا مشکل دارم که چه جوری برنامه را محدود کنم که فقط 2 یا 3 عدد را از صفحه کلید بگیره.امیدوارم که فهمیده باشید.من این سوال رو قبلا هم پرسیده بودم و آقای حیاتی خیلی خوب واسم توضیح دادند و مثال زیر رو برای من زدند.
$regfile "m32def.dat"
$crystal = 8000000 '\
Config Lcd = 16 * 2
Config Kbd = Porta , Debounce = 150 , Delay = 150
Config Lcdpin = Pin , Db4 = Pinc.5 , Db5 = Pinc.4 , Db6 = Pinc.3 , Db7 = Pinc.2 , _
E = Pinc.6 , Rs = Pinc.7
Dim Scankey As Byte
Dim A As Byte
Dim Count As Byte
Dim B As Byte
Dim C As Byte
Count = 0
A = 0
main:
Do
Scankey = Getkbd()
Scankey = Lookup(scankey , Key)
Select Case Scankey
Case Is < 10:
A = A * 10
A = A + Scankey
Locate 1 , 1
Lcd A
Incr Count
If Count = 2 Then Goto L1
End Select
Loop
L1:
B = A Mod 2
Locate 1 , 8
If B = 0 Then
Lcd "Zovje"
C = A / 2
Locate 2 , 1
Lcd C
End If
If B <> 0 Then
Lcd "Fard"
C = A / 2
B = A Mod 2
Locate 2 , 1
Lcd C ; " " ; B
End If
Count = 0
A = 0
Goto Main
End
Key:
Data 1 , 2 , 3 , 10 , 4 , 5 , 6 , 11 , 7 , 8 , 9 , 12 , 13 , 0 , 14 , 15 , 16
ولی من اگه بخوام که هم یک عدد 2 رقمی و هم یک عدد 3 رقمی رو از صفحه کلید بگیرم باید چیکار کنم.یعنی برنامه رو محدود کنم به اینکه یا یک عدد 2 رقمی و یا یک عدد 3 رقمی رو از صفحه کلید بگیره.حالا طرف میتونه اگه دلش بخواد 2 رقمی و یا اگه دلش بخواد 3 رقمی رو بزند.مثال بالا که آقای حیاتی زده بودند فقط میتونه یک عدد 2 رقمی رو از صفحه کلید بگیره.لطفا کمکم کنید.
معلوم کنم که فقط 2 یا 3 رقم را از صفحه کلید بگیره و مثلا با زدن دکمه OK جواب را نمایش بدهد.تو برنامه میتونم با دستور getkbd کار کنم ولی همینجا مشکل دارم که چه جوری برنامه را محدود کنم که فقط 2 یا 3 عدد را از صفحه کلید بگیره.امیدوارم که فهمیده باشید.من این سوال رو قبلا هم پرسیده بودم و آقای حیاتی خیلی خوب واسم توضیح دادند و مثال زیر رو برای من زدند.
$regfile "m32def.dat"
$crystal = 8000000 '\
Config Lcd = 16 * 2
Config Kbd = Porta , Debounce = 150 , Delay = 150
Config Lcdpin = Pin , Db4 = Pinc.5 , Db5 = Pinc.4 , Db6 = Pinc.3 , Db7 = Pinc.2 , _
E = Pinc.6 , Rs = Pinc.7
Dim Scankey As Byte
Dim A As Byte
Dim Count As Byte
Dim B As Byte
Dim C As Byte
Count = 0
A = 0
main:
Do
Scankey = Getkbd()
Scankey = Lookup(scankey , Key)
Select Case Scankey
Case Is < 10:
A = A * 10
A = A + Scankey
Locate 1 , 1
Lcd A
Incr Count
If Count = 2 Then Goto L1
End Select
Loop
L1:
B = A Mod 2
Locate 1 , 8
If B = 0 Then
Lcd "Zovje"
C = A / 2
Locate 2 , 1
Lcd C
End If
If B <> 0 Then
Lcd "Fard"
C = A / 2
B = A Mod 2
Locate 2 , 1
Lcd C ; " " ; B
End If
Count = 0
A = 0
Goto Main
End
Key:
Data 1 , 2 , 3 , 10 , 4 , 5 , 6 , 11 , 7 , 8 , 9 , 12 , 13 , 0 , 14 , 15 , 16
ولی من اگه بخوام که هم یک عدد 2 رقمی و هم یک عدد 3 رقمی رو از صفحه کلید بگیرم باید چیکار کنم.یعنی برنامه رو محدود کنم به اینکه یا یک عدد 2 رقمی و یا یک عدد 3 رقمی رو از صفحه کلید بگیره.حالا طرف میتونه اگه دلش بخواد 2 رقمی و یا اگه دلش بخواد 3 رقمی رو بزند.مثال بالا که آقای حیاتی زده بودند فقط میتونه یک عدد 2 رقمی رو از صفحه کلید بگیره.لطفا کمکم کنید.




دیدگاه