ايران ويج

نسخه‌ی کامل: اتصال کیبورد کامپیوتر به AVR تحت برنامه Bascom
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3 4
سلام خدمت همه ی دوستان الکترونیک مند ،
کسی از دوستان نیست که کیبورد کامپیوتر را به AVR نصب کرده باشه و بتونه مشکل من رو کنه ؟
info@etrmodern.tk
اگر کسی رو می شناسید که با AVR کار کرده باشه ، لطف کنید اون رو به Forum دعوت کنید.

برنامه ی که من نوشتم به این صورت عمل میکنه 8O : میاد سطر اول رو پاک میکنه و بعد که در Locate 1,1 قرار گرفت، از کیبورد یک کاراکتر دریافت میکنه و به Locate 1,2 میره و دوباره کلید رو دریافت میکنه ، خلاصه هر با یک شماره به ستون locate اضافه میشه و وقتی به Locate 1,16 رسید ، سطر دوم رو پاک میکنه و همون مراحل قبلی رو این بار در سطر دوم انجام میده :
کد:
Main:
Home Upper
Lcd "                 "
For A1 = 1 To 16
Locate 1 , A1
Call F16
Waitms 20
Next A1

Lowerline
Lcd "                 "
For A1 = 1 To 16
Locate 2 , A1
Call F16
Waitms 20
Next A1
jmp main
end
دستور Call F16 همون زیر برنامه گرفتن کلید است و به همون صورتی که علی کاهه نوشته منم نوشتم :
کد:
Sub F16
     K = Getatkbd()
     Select Case K:
            Case 50:
                 Lowerline
            Case 56:
                 Home
            Case 44:
                 Cls
                 Home
            Case 52:
                 Shiftcursor Left
            Case 54:
                 Shiftcursor Right
            Case 13:
                 Lowerline
            Case 9:
                 Shiftcursor Right , 4
            Case 8:
                 Shiftcursor Left
                 Lcd " ";
                 Shiftcursor Left
            Case Else Lcd String(1 , K)
      End Select
End Sub F16
:cry: حالا حروف ها رو چاپ میکنه حتی بعد از چاپ 16 کاراکتر به سطر پایین میاد اما مشکلی که برام پیش اومده اینه کلید های دیگه مثل del یا جهت های بالا و پایین و Bk Sp و ... یا کار نمی کنند و یا اشتباه عمل می کنند.
مثلاً کلید enter که می زنم میاد سطر پایین اما باز سریع برمیگرده به سطر بالا و یک کاراکتر جلوتر از جایی که بوده قرار می گیره.


این کیبورد ما رو فیلم کرده ...... :cry:
بهترين كار اينه كه از ديگه از بسكام استفاده نكني. توابع خوبي داره اما خيلي ضعيفه. به فكر يه زبون ديگه باش.
اینومی تونی توی خود سیمولاتورش شبیه سازی کنی و ببینی چی می شه یا اینکه بیای به جای فانکش ها یه چیز دیگه بنویسی مثلا به جای خط بعد بنویسی 1 حالا ببینی با زدن اینتر یک می نویسه یا نه یا مثلا چند تا می نویسه شاید 2 تا می گیره و بر می گرده بالا اگه باز هم درست بود می تونی هر کدوک از توابع رو هم جدا جدا امتحان کنی
[quote="arash_8998"]بهترين كار اينه كه از ديگه از بسكام استفاده نكني. توابع خوبي داره اما خيلي ضعيفه. به فكر يه زبون ديگه باش.[/quote



آره آقا آرش ، همینه که میگی
خودم هم یکمی رفته بودم تو فکرش اما ...

می تونی کمکم کنی با C بنویسمش ؟
ha_60 نوشته است:اینومی تونی توی خود سیمولاتورش شبیه سازی کنی و ببینی چی می شه یا اینکه بیای به جای فانکش ها یه چیز دیگه بنویسی مثلا به جای خط بعد بنویسی 1 حالا ببینی با زدن اینتر یک می نویسه یا نه یا مثلا چند تا می نویسه شاید 2 تا می گیره و بر می گرده بالا اگه باز هم درست بود می تونی هر کدوک از توابع رو هم جدا جدا امتحان کنی


مشکلی که من رو خیلی آزار میده همینه که سیمولاتور کیبورد کامپیوتر در بسکام نیست
و من باید با هر تغییر کوچکی در برنامه اون رو پروگرم کنم رو میکرو و مشاهده کنم.


من می خوام بدونم چرا وقتی از دستور locate استفاده نمیکنم برنامه کیبورد به نحو احسن جواب میده اما وقتی که براش تعریف میکنم بعد از 16 کاراکتر بره خط بعد دیگه کلید های عملیاتی جواب نمیدن ؟
یه کار دیگه می تونی بکنی کد هایی رو که از کی برد می گیری رو با مثلا پرت سریال بده به جای اینکه بیای از کیبرد بخونی از پرت سریال بخون (برای تست) بعد که دیدی درست کار می کنه بیا از کیبرد استفاده کن
باید برنامه رو یه جوری ساده تر کنی به ماژول های کوچکتر بشکنی تا بفهمی تا کجا درست کار می کنه و کدو دستوره که اشتباه کار می کنه و چرا
بلاخره بعد از 13 ساعت تلاش مداوم یک کتابخانه کامل از تمام کلیدهای کیبورد درست کردم که اون رو اینجا برای بچه های ET (Electronic Technology) میزارم.
با این کتابخانه همه ی کلید ها حتی F1 و ... و Esc ... کار می کنند.


'www.ETRmodern.Tk
$regfile = "m32def.dat"
$crystal = 8000000

Config Lcdpin = Pin , Db4 = Pinb.1 , Db5 = Pinb.2 , Db6 = Pinb.3 , Db7 = _
Pinb.4 , Rs = Pinb.6 , E = Pinb.5
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
یک راهنمایی می خوام

من می خوام از طریق کیبورد کامپیوتر بعد از تایپ 16 کاراکتر و زدن یک کلید (مثلاً F5 ) آنها یک جای حافظه ATMega32 ذخیره شوند و دوباره برگردد بقیه کاراکترها رو بگیرد و این روند با زدن کلید دیگری (مثل F6) خاتمه می یابد، و بعد از روشن و خاموش کردن AVR همچنان در حافظه بماند.

مشکل من اینه که نمی دونم چطور باید در حافظه ذخیره کنم و چیزهایی که در حافظه ذخیره شده رو روی LCD نمایش دهم ؟
اولا تلاش ت رو تبریک می گم :wink:
برای ذخیره کردن توی Codevision یه متغییر از نوع eeprom تعریف می کردیم هر چیزی که توی اون می ریختی یا از اون می خوندی توی eeprom ذخیره می شد و با خاموش روشن شدن پاک نمی شد (البته اگه زیاد بنویسی خراب می کنی eeprom رو یه متغیر کمکی هم براش تعریف کن)
البته توی bascom رو نمی دونم توی help ش اگه یه eeprom سرچ کنی حتما پیدا می شه فکر کنم توی مثال هاشم باشه
آقای ha_60 شرمندم ، اسم شما رو نمیدونم، از اینکه منو راهنمایی می کنید خیلی خیلی ممنونم
منم در عوضش، بعد از اینکه پروژم تمام شد، مطالب راجع به اونو میزارم اینجا برای دوستان ET
من از طریق دستور writeeeprom var,address متغیر var رو در حافظه EEPROM میکرو (Mega32) ذخیره میکنم
سوالم اینه که چه طوری میتونم متغیر بعدی رو در خانه بعدی حافظه از متغیر قبل ذخیره کنم.
یعنی می خوام با ریختن متغیر جدید، در ادامه قبلی ذخیره شود و قبلی رو پاک نکند.
در ضمن متغیر من یکی بیشتر نیست (مثلاً S).و از نوع String*16 هم می باشد.
صفحه‌ها: 1 2 3 4