آموزش میکروکنترلر AVRمیکروکنترلر

اتصال كي‌پد به ميكروكنترلر

در اين آموزش يك كي پد و يك LCD به پورت هاي مختلف ميكرو متصل خواهند شد . بدين ترتيب با فشردن هر كليد از كي پد، عدد مربوطه بر روی LCD نمايش داده مي شود.

وسايل مورد نياز برای آموزش اتصال كي‌پد به ميكروكنترلر :

  • میکروکنترلر ATmega32
  • LCD 16×2
  • Keypad 4×4
  • منبع تغذیه ی 5 ولت
  • پتانسیومتر 5K برای تنظیم کنتراست LCD

آشنايي با صفحه كليد

صفحه كليد 4*4 در حقيقت يك صفحه كليد ماتريسي است. در صفحه كليد هاي ماتريسي هر سطر و هر ستون داراي پايه هاي مجزا هستند . به عبارت ديگر يك صفحه كليد 4*4 داراي ٤ پايه مربوط به سطور و ٤ پايه مربوط به ستون ها (جمعا ٨ پايه) مي باشد. اساس كار صفحه كليدهاي ماتريسي بر مبناي اتصال دو پين مربوط به سطر و ستون يك كليد پس از فشرده شدن آن كليد است. اگر بخواهيد از ١٦ كليد در دستگاهي استفاده كنيد ، حداقل به ١٧ سيم نياز داريد. ولي در دستگاه ماتريسي اين مقدار حداقل نصف مي شود.

4*4 keypadبه اين ترتیب كه پس از فشردن هر كليد دو سيم به هم وصل مي شوند كه يكي مربوط به يك سطر و ديگري مربوط به يك ستون است.

keypad1

Keypad to Binary Decoder

می توان برای راحتی کار با کی پد از یک آی سی Keypad to Binary Decoder استفاده کرد. (به طور مثال MC14419) که می تواند تواند ٨ خروجي يك صفحه كليد ماتريسي را به عنوان ورودي گرفته و ٤ بيت خروجي به صورت اعداد صفر تا ١٥ توليد نمايد .

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

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

key-pad-electrolab.ir
برنامه ی اتصال كي‌پد به ميكروكنترلر

#include <mega32.h>
#include <delay.h>

#define KEYPAD_PORT PORTC
#define KEYPAD_PIN PINC
#define KEYPAD_DDR DDRC

#asm
   .equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>

unsigned char keypad_read();
void lcd_write(unsigned char chr);

void main(void)
{

  unsigned char key;
  lcd_init(16);
  while(1)
  {
    key=keypad_read();
    lcd_write(key);
    delay_ms(10);
  }

}

unsigned char keypad_read()
{
    unsigned char scanCode, butNum;

    KEYPAD_DDR = 0x0f;
    KEYPAD_PORT = 0xf0;
    delay_us(5);
    scanCode= KEYPAD_PIN;

    KEYPAD_DDR = 0xf0;
    KEYPAD_PORT = 0x0f;
    delay_us(5);
    scanCode= scanCode| KEYPAD_PIN;

         if(scanCode==0xff) return 0;

switch (scanCode)
    {
        case 0xee: butNum='1'; break;
        case 0xed: butNum='2'; break;
        case 0xeb: butNum='3'; break;
        case 0xe7: butNum=0; break;
        case 0xde: butNum='4'; break;
        case 0xdd: butNum='5'; break;
        case 0xdb: butNum='6'; break;
        case 0xd7: butNum=0; break;
        case 0xbe: butNum='7'; break;
        case 0xbd: butNum='8'; break;
        case 0xbb: butNum='9'; break;
        case 0xb7: butNum=0; break;
        case 0x7e: butNum='*'; break;
        case 0x7d: butNum='0'; break;
        case 0x7b: butNum='#'; break;
        case 0x77: butNum=0; break;
        default: butNum=0;
    };

  	return butNum;
}

void lcd_write(unsigned char chr)
{
    static unsigned char flag;

    if(chr!=0)
    {
        if(chr!='*')
        {
            if(flag==0)
            {
                lcd_putchar(chr);
                flag=1;
            }
        }
        else
            lcd_clear();
    }
    else
        flag=0;
}

علی عزتی

علی عزتی هستم. رشته ی مهندسی برق الکترونیک رو خوندم. علاقه ی من به یادگیری و به اشتراک گذاشتن چیز هایی که یاد گرفتم. باعث شد تا الکترولب ایجاد بشه. علاقه ی زیادی به الکترونیک دارم. و دوست دارم چیزهای جدید یادبگیرم و بسازم ... :))

نوشته های مشابه

6 دیدگاه

  1. سلام بازم مثل همیشه عالی .داداش دوتاسوال داشتم:
    1_این که میگن مثلا(void … (void اینvoidآخری که توپرانتزمی نویسن یعنی چی یابعضی وقت ها یه چیزهای دیگه می نویسن.
    2_این دستورreturnبرای چه کاری؟
    بازم ممنون.

    1. سلام
      main در زبان C تابع اصلی هست و void نوع ورودی و خروجی رو تعیین می کنه که اگر void استفاده بشه یعنی تابع مقداری رو بر نمیگردونه و مقداری رو به عنوان ورودی نمیگیره
      دستور return هم مقدار برگشتی از تابع رو مشخص میکنه

    1. می تونید به کتاب آموزش C جعفرنژاد قمی مراجعه کنید در اون به طور کامل آموزش داده شده می تونید کتاب رو از اینترنت هم دانلود کنید

پاسخ دادن به امیر لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

دکمه بازگشت به بالا