دوست عزیز، به سایت علمی نخبگان جوان خوش آمدید

مشاهده این پیام به این معنی است که شما در سایت عضو نیستید، لطفا در صورت تمایل جهت عضویت در سایت علمی نخبگان جوان اینجا کلیک کنید.

توجه داشته باشید، در صورتی که عضو سایت نباشید نمی توانید از تمامی امکانات و خدمات سایت استفاده کنید.
نمایش نتایج: از شماره 1 تا 1 , از مجموع 1

موضوع: تابلوروان: تابلوروان توسط کیبورد و lcd با میکروکنترولر

  1. #1
    کـــــــاربر فــــعال
    رشته تحصیلی
    computer
    نوشته ها
    8,619
    ارسال تشکر
    6,947
    دریافت تشکر: 11,496
    قدرت امتیاز دهی
    155
    Array

    پیش فرض تابلوروان: تابلوروان توسط کیبورد و lcd با میکروکنترولر

    در اینجا قصد تا شما را با مدار متفاوتی نسبت به سایر مدارات آشنا کنم، در این مدار با استفاده از 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
    
    ConfigLcd= 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 AsString* 20
    Dim I AsByte
    Dim L AsByte
    
    $serialinput= Kbdinput
    $serialinput2lcd
    
    Text ="This is a Test!"
    L =Len(text)
    CursorOff
    Cls
    Print Text
    Wait 1
    For I = 1 To 16
    ShiftlcdRight
    Wait 1
    Next I
    
    For I = 1 To L
    ShiftlcdLeft
    Wait 1
    Next I
    
    Do
    
    Cls
    CursorBlink
    CursorOn
    Print"Enter Text :"
    Locate 2 , 1
    Input Text
    L =Len(text)
    CursorNoblink
    CursorOff
    Cls
    Print Text
    For I = 1 To 16
    ShiftlcdRight
    'Wait 1
    Next I
    Wait 1
    L = L + 16
    For I = 1 To L
    ShiftlcdLeft
    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
    
    $endAsm
    
    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 را به مدار خود اضافه کنید. ادامه برنامه از دستورات ساده ای تشکیل شده که من از توضیح آنها خودداری میکنم و به شما میسپارم.
    برای دریافت فایل برنامه به همراه نقشه مدار و تصاویر دیگر در ارتباط با همین مدار از لینک زیر استفاده کنید :
    پسورد فایل : www.hlachini.com
    ویرایش توسط hengameh : 17th April 2010 در ساعت 07:26 PM


  2. 2 کاربر از پست مفید moji5 سپاس کرده اند .


اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. آموزشی: تمیز کردن کیبورد کامپیوتر
    توسط آبجی در انجمن آموزش سخت افزار
    پاسخ ها: 2
    آخرين نوشته: 3rd April 2010, 05:45 PM
  2. شرح فرآيند واحد الفين پتروشيمي مارون
    توسط *مینا* در انجمن مقالات و جزوات مهندسی شیمی
    پاسخ ها: 2
    آخرين نوشته: 2nd March 2010, 12:19 AM
  3. آموزشی: آموزش کامل ورد Word
    توسط ریپورتر در انجمن آموزش نرم افزار
    پاسخ ها: 0
    آخرين نوشته: 30th March 2009, 04:58 PM
  4. آموزشی: تولید و چرخه سوخت هسته ای
    توسط مسعود عاطف در انجمن شیمی عمومی
    پاسخ ها: 0
    آخرين نوشته: 16th December 2008, 11:14 AM

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •