تابلوروان توسط کیبورد و LCD تاریخ : پنجشنبه، 8 اسفند ماه ، 1387
موضوع : تابلوروان - تابلو روان


در اینجا قصد تا شما را با مدار متفاوتی نسبت به سایر مدارات آشنا کنم، در این مدار با استفاده از LCD متنی و کیبورد کامپیوتر تابلو روان ساده اما جالبی ساخته شده. در این مدار شما با نحوه ارتباط صفحه کلید استاندارد با میکروکنترولر آشنا میشوید و خواهید دید که چگونه برای دستور Input و Print در محیط بسکام که بطور عادی ورودی را از پورت سریال دریافت میکنند و نتیجه را بر روی پورت سریال ارسال میکنند. ورودی را کیبورد تعریف کنیم و خروجی را LCD کنیم.

به عبارت دیگر شما با تایپ توسط کیبورد نتیجه تایپ را بر روی 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., Db5 = Porta., Db6 = Porta.,

 Db7 = Porta., Rs = Porta., E = Porta.1
Config Keyboard = Pind., Data = Pind., Keydata = Keydata

Dim Text As String * 20
Dim I As Byte
Dim L As Byte

$serialinput = Kbdinput
$serialinput2lcd

Text = "This is a Test!"
= 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
= Len(text)
Cursor Noblink
Cursor Off
Cls
Print Text
For I = 1 To 16
 Shiftlcd Right
 'Wait 1
Next I
Wait 1
= 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

= 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






منبع این مقاله : سايت مهندس لاچيني | پروژه ها و آموزش الكترونيك و تابلوروان
http://www.HLachini.elewiz.com

آدرس این مطلب :
http://www.HLachini.elewiz.com/modules.php?name=News&file=article&sid=35