تابلوروان توسط کیبورد و LCD
تاریخ : پنجشنبه، 8 اسفند ماه ، 1387 موضوع : تابلوروان - تابلو روان
در اینجا قصد تا شما را با مدار متفاوتی نسبت به سایر مدارات آشنا کنم، در این مدار با استفاده از LCD متنی و کیبورد کامپیوتر تابلو روان ساده اما جالبی ساخته شده. در این مدار شما با نحوه ارتباط صفحه کلید استاندارد با میکروکنترولر آشنا میشوید و خواهید دید که چگونه برای دستور Input و Print در محیط بسکام که بطور عادی ورودی را از پورت سریال دریافت میکنند و نتیجه را بر روی پورت سریال ارسال میکنند. ورودی را کیبورد تعریف کنیم و خروجی را LCD کنیم.
به عبارت دیگر شما با تایپ توسط کیبورد نتیجه تایپ را بر روی LCD مشاهده میکنید.
ابتدا نگاهی به سورس بسکام داشته باشیم :
'********************************************* '* This Program Writing By : Hossein Lachini * '* The LCD Sign Board * '* For to get more details visit : * '* www.HLachini.com * '* Contact to me by : eLachini@Gmail.com * '* Mobile/SMS : +98 912 381 2060 * '********************************************* $regfile = "m32def.dat" $crystal = 4000000
Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 ,
Db7 = Porta.5 , Rs = Porta.0 , E = Porta.1 Config Keyboard = Pind.2 , Data = Pind.4 , Keydata = Keydata
Dim Text As String * 20 Dim I As Byte Dim L As Byte
$serialinput = Kbdinput $serialinput2lcd
Text = "This is a Test!" L = Len(text) Cursor Off Cls Print Text Wait 1 For I = 1 To 16 Shiftlcd Right Wait 1 Next I
For I = 1 To L Shiftlcd Left Wait 1 Next I
Do
Cls Cursor Blink Cursor On Print "Enter Text :" Locate 2 , 1 Input Text L = Len(text) Cursor Noblink Cursor Off Cls Print Text For I = 1 To 16 Shiftlcd Right 'Wait 1 Next I Wait 1 L = L + 16 For I = 1 To L Shiftlcd Left Wait 1 Next I Loop
End
Kbdinput:
$asm
push r16 ; save used register
push r25
push r26
push r27
Kbdinput1:
rCall _getatkbd ; call the function
tst r24 ; check for zero
breq Kbdinput1 ; yes so try again
pop r27 ; we got a valid key so restore registers
pop r26
pop r25
pop r16
$end Asm
Return
I = Getatkbd()
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
جهت اتصال میکرو به کیبورد در محیط بسکام از نمونه برنامه و مداری که شرکت Atmel پیشنهاد کرده باید استفاده نمود و بسکام نیز بر اساس همین توصیه توابع کیبورد را عملی ساخته. در مدار پیشنهادی Atmel خواسته شده که پین Clock کیبورد را به یکی از پایه های وقفه های خارجی INT0 یا INT1 متصل نمود و پین Data را به یکی دیگر از پایه های ورودی میکرو متصل شود. البته در بسکام فقط مجاز به اتصال پین دیتا کیبورد به یکی از پینهای پورت D هستید و سپس توسط دستور Config پایه های مربوطه را در برنامه تعریف میکنید.
همانطور که میدانید زمانی که کلیدی از صفحه کلید فشار داده میشود کدی از سوی کیبورد ارسال میشود و این کد به اسکن کد معروف است و البته این کد هیچ ارتباطی با عمل کلید زده شده و یا کد اسکی کاراکتر تایپ شده ندارد. لذا باید ما توسط یک جدول کد دریافتی از سوی میکرو را به کد اسکی تبدیل کنیم و یا در مورد کلید های کنترلی، تابع کلید را تشخیص دهیم. به این نکته هم توجه داشته باشید که زمانی که کلیدی فشار داده میشود یک کد ارسال میشود و در زمان رها کردن هم کد دیگری ارسال میگردد که 128 واحد از کد فشردن کلید بزرگتر است. مثلا اگر کد فشردن کلیدی 3 باشد کد رها کردن آن 131=3+128 خواهد بود.
از طرفی برخلاف تصور عامه فرقی بین کلید ها در هنگام نگه داشتن دکمه Shift و یا فعال کردن Caps Lock نیست و کامپیوتر و یا میکرو خود با توجه به کدهای ارسالی ، تعابیر مختلفی از یک کلید با توجه به کدهای ارسالی قبلی دارند.
اما در این برنامه برای راحتی هر چه بیشتر ما دستورات Input و Print را که بصورت استاندارد برای کار بر روی پورت سریال استفاده میشوند را به LCD بعنوان خروجی و کیبورد به عنوان ورودی ارتباط داده ایم. برای اینکه بتوان چنین کاری انجام داد باید حتما روالی را که به صورت پیش فرض برای این دستورات اجرا میشود را تغییر داده و خودمان بنویسیم که من در این برنامه از همان روال پیشنهادی بسکام استفاده کردم که متن روال به زبان اسمبلی در انتهای برنامه آمده است.
از طرفی هم برای تعریف این روالها به کمپایلر بسکام حتما باید دستور serialinput = Kbdinput$ برای تعریف روال کیبورد بعنوان ورودی بکار برد. البته نام روال کاملا اختباری است. و همچنین برای اینکه خروجی این دستورات بر روی LCD باشد باید دستور serialinput2lcd$ را بکار برد.
بله با هیمن چند ترفند ساده بدون نیاز به برنامه نویسی پیچیده شما میتوانید کیبورد و LCD را به مدار خود اضافه کنید. ادامه برنامه از دستورات ساده ای تشکیل شده که من از توضیح آنها خودداری میکنم و به شما میسپارم.
برای دریافت فایل برنامه به همراه نقشه مدار و تصاویر دیگر در ارتباط با همین مدار از لینک زیر استفاده کنید :
http://www.hlachini.com/download-file-17.html
پسورد فایل : www.hlachini.com
|