اتصال كيپد به ميكروكنترلر
در اين آموزش يك كي پد و يك LCD به پورت هاي مختلف ميكرو متصل خواهند شد . بدين ترتيب با فشردن هر كليد از كي پد، عدد مربوطه بر روی LCD نمايش داده مي شود.
وسايل مورد نياز برای آموزش اتصال كيپد به ميكروكنترلر :
- میکروکنترلر ATmega32
- LCD 16×2
- Keypad 4×4
- منبع تغذیه ی 5 ولت
- پتانسیومتر 5K برای تنظیم کنتراست LCD
آشنايي با صفحه كليد
صفحه كليد 4*4 در حقيقت يك صفحه كليد ماتريسي است. در صفحه كليد هاي ماتريسي هر سطر و هر ستون داراي پايه هاي مجزا هستند . به عبارت ديگر يك صفحه كليد 4*4 داراي ٤ پايه مربوط به سطور و ٤ پايه مربوط به ستون ها (جمعا ٨ پايه) مي باشد. اساس كار صفحه كليدهاي ماتريسي بر مبناي اتصال دو پين مربوط به سطر و ستون يك كليد پس از فشرده شدن آن كليد است. اگر بخواهيد از ١٦ كليد در دستگاهي استفاده كنيد ، حداقل به ١٧ سيم نياز داريد. ولي در دستگاه ماتريسي اين مقدار حداقل نصف مي شود.
به اين ترتیب كه پس از فشردن هر كليد دو سيم به هم وصل مي شوند كه يكي مربوط به يك سطر و ديگري مربوط به يك ستون است.
Keypad to Binary Decoder
می توان برای راحتی کار با کی پد از یک آی سی Keypad to Binary Decoder استفاده کرد. (به طور مثال MC14419) که می تواند تواند ٨ خروجي يك صفحه كليد ماتريسي را به عنوان ورودي گرفته و ٤ بيت خروجي به صورت اعداد صفر تا ١٥ توليد نمايد .
اما ما در این آموزش از این IC استفاده نخواهیم کرد و به طور مستقیم کی پد را به میکروکنترلر وصل کرده و برنامه ی لازم برای خواندن کی پد در ادامه به طور کامل شرح داده می شود.
شماتیک مدار لازم برای راه اندازی کی پد:
برنامه ی اتصال كيپد به ميكروكنترلر
#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; }
سلام بازم مثل همیشه عالی .داداش دوتاسوال داشتم:
1_این که میگن مثلا(void … (void اینvoidآخری که توپرانتزمی نویسن یعنی چی یابعضی وقت ها یه چیزهای دیگه می نویسن.
2_این دستورreturnبرای چه کاری؟
بازم ممنون.
سلام
main در زبان C تابع اصلی هست و void نوع ورودی و خروجی رو تعیین می کنه که اگر void استفاده بشه یعنی تابع مقداری رو بر نمیگردونه و مقداری رو به عنوان ورودی نمیگیره
دستور return هم مقدار برگشتی از تابع رو مشخص میکنه
درست همین مقداربرگردوندن رونمی فهمم میشه یه مثال بزنی؟
می تونید به کتاب آموزش C جعفرنژاد قمی مراجعه کنید در اون به طور کامل آموزش داده شده می تونید کتاب رو از اینترنت هم دانلود کنید
سلام بازهم یه سوال داشتم درباره رشته مخابرات چقدراطلاعات داری؟
تقریبا هیچی من الکترونیک می خونم.