AVRSTM32کدویژن

اسکن صفحه کلید ماتریسی 4*4 با AVR و STM32

آموزش راه اندازی کیپد 4X4

4.9/5 - (124 امتیاز)

در کنار lcd های کاراکتری ، صفحه کلید ماتریسی یکی از پرکاربردترین لوازمی است که کاربران از آنها  در مدارات میکروکنترلری استفاده می کنند و توسط آنها می توانند از دنیای بیرون به میکروکنترلر دیتا ارسال کرده و آن را پردازش کنند.

صفحه کلید ماتریسی متشکل از تعداد زیادی کلید است ، که بصورت ماتریسی روی هم قرار گرفته اند و ماتریسی بودن کلید ها به ما این امکان را می دهد تا علاوه بر بهرمندی از تعداد زیادی کلید ،  تعداد کمی از پایه های میکروکنترلرها را اشغال کنیم .

صفحه کلید ماتریسی در ابعاد و اندازه های مختلفی در بازار وجود دارند. که از پرکاربردترین آنها می توان صفحه کلید ماتریسی ۴*۴ یا شانزده کلید و صفحه کلید ماتریسی ۴*۳ یا دوازده کلید را نام برد .

در پایان آموزش برنامه نوشته شده برای اسکن صفحه کلید ماتریسی ۴*۴ را به یک کتابخانه تبدیل می کنیم تا کاربران براحتی بتوانند تنها با بکاربردن چند دستور ساده عمل کلید خوانی را انجام دهند .

صفحه کلید ماتریسی 4*4
صفحه کلید ماتریسی ۴*۴

آموزش اسکن صفحه کلید ماتریسی 4*4 با avr

برای اسکن صفحه کلید ماتریسی 4*4 از الگوریتمی بسیار ساده استفاده شده است . به این صورت که صفحه کلید ماتریسی 4X4 به یک جدول جمع اعداد تشبیه شده است .

اعدادی در سطرها و ستون های صفحه کلید ماتریسی 4×4 قرار داده شده است . که از حاصل جمع آنها موقعیت کلید فشرده شده بدست می آید .

در این روش مقدار کلید فشرده شده طی دو مرحله بدست می آید که در ادامه به آن خواهیم پرداخت . شکل زیر نحوه اتصال یک صفحه کلید ماتریسی 4X4 به یکی از پورتهای میکرو کنترلر avr را نشان می دهد .

صفحه کلید ماتریسی 4*4
صفحه کلید ماتریسی ۴*۴

مرحله اول اسکن صفحه کلید ماتریسی 4X4

در مرحله اول اسکن صفحه کلید ماتریسی 4X4 پایه هایی را که به ستون های صفحه کلید ماتریسی 4×4 وصل کرده ایم به عنوان پایه های خروجی و پایه هایی را که به سطر های  صفحه کلید ماتریسی 4*4 وصل کرده ایم به عنوان پایه های ورودی تعریف می کنیم .

سپس مقدار صفر منطقی را روی پایه های خروجی قرار می دهیم و در نهایت شروع به اسکن پایه هایی که به عنوان ورودی تعریف شده اند می کنیم . اگر مقدار پایه ای صفر باشد به منزله این است که کلیدی در آن سطر فشرده شده و مقدار متناظر با آن سطر را از جدول جمعی که تشکیل داده بودیم در یک متغییر ذخیره می کنیم .

اسکن صفحه کلید ماتریسی 4*4
اسکن صفحه کلید ماتریسی ۴*۴

مرحله دوم اسکن صفحه کلید ماتریسی 4X4

در مرحله دوم برعکس مرحله اول عمل می کنیم پایه هایی را که به ستون های صفحه کلید ماتریسی ۴*۴ وصل کرده ایم به عنوان پایه های ورودی تعریف می کنیم و پایه هایی را که به سطرهای صفحه کلید ماتریسی ۴*۴ وصل کرده ایم به عنوان پایه های خروجی تعریف می کنیم .

سپس مقدار صفر منطقی را روی پایه های خروجی قرار می دهیم و در نهایت شروع به اسکن پایه هایی که به عنوان ورودی تعریف شده اند می کنیم و اگر مقدار پایه ای صفر باشد به منزله این است که کلیدی در آن ستون فشرده شده و مقدار متناظر با آن ستون را از جدول جمعی که تشکیل داده بودیم در یک متغییر دیگر ذخیره می کنیم .

صفحه کلید ماتریسی 4*4
صفحه کلید ماتریسی ۴*۴

بعد از مراحل اسکن صفحه کلید ماتریسی 4X4 ، برای مشخص کردن موقعیت کلید فشرده شده ، کافیست تا اعدادی را که از دو مرحله قبل در متغییرهای row , column ذخیره کردیم با یکدیگر جمع کنیم . در پایان نیز با تعریف یک آرایه شانزده رقمی و قرار دادن مقادیر asci اعداد در آن می توان کاراکتر متناظر با صفحه کلید را از درون این آرایه جهت نمایش روی  lcd کاراکتری  استخراج کرد .

برای درک بهتر مسئله به ذکر یک مثال می پردازیم :
فرض می کنیم کلید شماره ۹ از روی صفحه کلید ماتریسی ۴*۴ را فشرده ایم طبق مرحله اول اسکن صفحه کلید ، P.1  از پایه های پورت ما برابر با مقدار صفر می شود و با توجه به دستور   if(PINx.1==0)  row=8  مقدار ۸ در متغییر row  جا می گیرد .

در مرحله دوم اسکن صفحه کلید ،  P.6  از پایه های پورت ما برابر با مقدار صفر می شود و با توجه به دستور  if(PINx.6==0)  column =1  مقدار ۱ در متغییر column  جا می گیرد و در نهایت با جمع دو متغییر row+column عدد ۹ بدست می آید که همان مقدار کلید فشرده شده است .

معرفی توابع کتابخانه اسکن صفحه کلید ماتریسی ۴*۴ با نرم افزار codevision

اسکن صفحه کلید ماتریسی 4*4
اسکن صفحه کلید ماتریسی ۴*۴

تابع kbd_init

الگوی این تابع به شکل زیر می باشد :

این تابع جهت initializes  یا مقدار دهی اولیه پورت می باشد .

تابع  debounce

الگوی این تابع به شکل زیر می باشد :

این تابع دارای یک پارامتر با نام Debouncing_time است که مقدار آن از ۰ تا  ۲۰۰ بر حسب میلی ثانیه می باشد  و  یک تاخیر  از ۰ تا ۲۰۰  میلی ثانیه بعد از فشرده شدن هر کلید بوجود می آورد تا لرزشی که در هنگام فشرده شدن کلید پدید می آید از بین برود و این لرزش به منزله فشرده شدن کلید طلقی نگردد .

اگر مقداری بیشتر از ۲۰۰ به آرگومان این تابع بدهیم حداکثر تاخیر یعنی همان ۲۰۰ میلی ثانیه منظور می گردد ، مناسب ترین مقدار برای جلوگیری از لرزش کلیدمقدار ۱۰۰ میلی ثانیه می باشد . مقدار Debouncing_time بصورت پیش فرض ۱۰۰ قرار داده شده .

گرفتن لرزش کلید
گرفتن لرزش کلید

تابع waitkey 

الگوی این تابع به شکل زیر می باشد :

این تابع منتظر فشرده شدن کلید می ماند .

تابع waitnokey

الگوی این تابع به شکل زیر می باشد :

این تابع منتظر می ماند تا کلید فشرده شده رها شود یا به عبارتی فشرده نشدن کلیدها را چک می کند .

تابع readkey

الگوی این تابع به شکل زیر می باشد :

این تابع صفحه کلید را اسکن می کند و اگر کلیدی فشرده شده باشد مقدار آن را می خواند .

تابع getkey

الگوی این تابع به شکل زیر می باشد :

این تابع اصلی ترین تابع می باشد که ما برای اسکن صفحه کلید ماتریسی ۴*۴ از آن استفاده می کنیم ، این تابع  ترکیبی از توابعی است که قبلا ذکر شد .

این تابع منتظر فشرده شدن کلید می ماند و پس از فشرده شدن کلید عمل debounce گیری را انجام می دهد سپس صفحه کلید را اسکن کرده و مقدار کلید فشرده شده را می خواند و درنهایت منتظر می ماند تا کلید فشرده شده رها شود .

تابع getnum

الگوی این تابع به شکل زیر می باشد :

عملکرد این تابع شبیه عملکرد تابع getkey   می باشد با این تفاوت که فقط مقادیر کاراکتر های ۰ تا ۹ را برمی گرداند .

اگر مقادیر خوانده شده از صفحه کلید ، متناظر با کلید فشرده شده توسط شما نبود . فایل کتابخانه ای keypad.lib  را توسط محیط کدویژن باز نموده و با جابجایی کاراکترها در جدول kbd_lib   این مشکل را برطرف نمایید .

کلیدخوانی با codevision
کلیدخوانی با codevision

اسکن صفحه کلید ماتریسی ۴*۴ و نمایش بر روی lcd 2*16

ابتدا از پوشه library که پیوست این مقاله می باشد فایل هدر keypad.h را در پوشه inc   و فایل کتابخانه ای  keypad.lib   را در پوشه lib   در مسیری که نرم افزار کدویژن را نصب کرده اید کوپی کنید .

سپس  نرم افزار کدویژن را اجرا کرده و توسط کدویزارد از زبانه   Chip  آی سی  مورد  نظر  و  از  قسمت  Alphanumeric   LCD پیکربندی LCD را انجام داده و در ادامه با ذخیره فایل تولید شده توسط codewizard بستری را برای برنامه نویسی خود فراهم کنید.

سپس  با استفاده از دستور پیش پردازنده <include <keypad.h# فایل هدر keypad  را به برنامه خود اضافه کنید . حال نوبت به معرفی پورتی که قرار است کیپد ۴*۴ را به آن متصل کنیم می رسد .

برای سادگی و قابل فهم بودن  پیکربندی keypad روی پورت مورد نظر ، از الگوی پیکربندی lcd   کاراکتری  که در ورژن های قدیمیتر کدویژن و به زبان اسمبلی استفاده می شد بکار گرفته شده است ، برای انجام پیکربندی ابتدا باید آدرس پورتهای خروجی میکروکنترلر AVR را بدانیم.

کی پد 4*4
کی پد ۴*۴

الگوی پیکربندی lcd   کاراکتری به شکل زیر می باشد  :

الگوی پیکربندی ۴*۴ keypad به شکل زیر می باشد  :

 

 

نمایش کلید فشرده شده بر روی lcd کاراکتری

اسکن صفحه کلید 4*4
اسکن صفحه کلید ۴*۴

در مثال ذکر شده اسکن صفحه کلید ماتریسی ۴*۴ به روش polling  یا سرکشی صورت می پذیرد ، یعنی میکروکنترلر باید دائما به پورتی که کیپد به آن متصل شده سرکشی کند تا فشرده شدن کلیدی را متوجه شود .

این عمل باعث اشغال شدن cpu  می شود و از کارایی میکروکنترلر avr کاسته می شود ، برای رفع این مشکل از روشی به نام wake up در اسکن صفحه کلید ۴*۴ استفاده می کنیم .

در این روش با استفاده از چهار عدد دیود 1N4148 سطرهای  کیپد ( P.0 تا  P.3) را به یکی از وقفه های خارجی میکروکنترلر متصل می کنیم و با فعال سازی وقفه خارجی ، هنگامی که کلیدی فشرده شود زیر برنامه وقفه خارجی اتفاق می افتد و با نوشتن دستورات مربوط به کلید خوانی در زیر برنامه وقفه ، مقدار کلید فشرده شده را بدون نیاز به سرکشی دائم و اشغال شدن cpu   میکروکنترلر  بدست می آورد .

کلیدخوانی کیپد 4*4 با کدویژن
کلیدخوانی کیپد ۴*۴ با کدویژن

مثال :
ابتدا با استفاده از چهار عدد دیود 1N4148  پینهای صفر تا سه از پورتی که کیپد به آن متصل شده را مطابق شکل به پایه INT0 میکروکنترلر وصل کنید . سپس PIND.2  که ورودی وقفه خارجی صفر است را به عنوان ورودی و مقاومت poll up  آن را فعال نموده و وقفه خارجی صفر را در مد low level  قرار دهید . در این مثال lcd  روی PORTB پیکربندی شده .

برای کاربرانی که از میکروکنترلر stm32 استفاده می کنند یک کتابخانه کاملا استاندارد برای کیپدهای 4*4 و 4*3 آماده کرده ایم که به راحتی می توانید در پروژه های خود از آن استفاده نمایید .

همچنین توسط کتابخانه کیپد پروژه قفل رمز دیجیتال انجام شده با آنالیز سورس کد این پروژه شما با بخشهای مختلف میکروکنترلر stm32 و استفاده در کنار هم آشنا خواهید شد .

قابلیت های کتابخانه صفحه کلید 4*4 و 4*3 برای STM32

اتصال پایه های صفحه کلید به پایه های دلخواه از میکروکنترلر
پیکربندی پایه ها در محیط نرم افزار stm32cubemx ، بدون نیاز تغییر در کتابخانه
قابل استفاده در keil و  stm32cubeide
نوشته شده توسط توابع HAL
به همراه کتابخانه LCD کاراکتری ، مثال و راهنمای استفاده

پروژه قفل رمزدار دیجیتال توسط STM32

قابلیت نمایش رمز تایپ شده تا 8 رقم بر روی LCD کاراکتری
قابلیت پاک کردن رمز و کاراکترهای تایپ شده بر روی LCD
قفل شدن اتوماتیک ، در صورت عدم تایپ بعد از 15 ثانیه
قابلیت تغییر رمز عبور و ذخیره در حافظه EEPROM Emulation میکروکنترلر STM32
قابلیت بازنشانی رمز عبور به رمز پیشفرض با نگهداشتن کلید مخفی به مدت 6 ثانیه
به همراه کتابخانه کیپد و LCD کاراکتری برای STM32

نویسنده : حسین غیاثوند
خرید و دانلود در لحظه :

مشترک شدن
اطلاع رسانی کن
guest
29 دیدگاه
قدیمی ترین
جدیدترین محبوب ترین
بازخورد داخلی
مشاهده همه نظرات