ایده اینه که جهت ساخت صفحه کلید بجای اینکه چند پین رو ورودی و چند پین دیگه رو خروجی تعریف کنیم، همه پین ها رو ورودی تعریف کنیم، و از هر کلید سیم ها رو دقیقا به پین هایی وصل کنیم که معادل عدد باینری اون کاراکتر هستند. به عنوان مثال کد اسکی کاراکتر A در مبنای 2 هست: 01000001 بنابراین از کلید A دو سیم یکی به پین 0 و دیگری به پین 6 وصل میکنیم، همچنین یک سیم هم به INT0 وصل میکنیم تا هر وقت کلیدی فشرده شد یک وقفه ایجاد بشه. بدین ترتیب:
این مطلب رو هم عرض کنم که بنده در الکترونیک به هیچ عنوان صاحب نظر نیستم بنابراین این مدار ممکنه اشکالاتی داشته باشه.
در مورد مقادیر خازن ها و مقاومت ها و اینکه آیا با این روش دیبانسینگ به درستی انجام میشه هم مطمئن نیستم، اساتید اظهار نظر بفرمایند ممنون میشم
دانلود برنامه کدویژن و شماتیک پروتوس: http://hipfile.com/qhl1x4a4o18q/myKB.zip.html
کد:
شماتیک:
- [li]وقت پردازنده برای اسکن مداوم پورت تلف نمیشه و همچنین مجبور نیست مقدار پورت رو با آرایه کلید ها مقایسه کنه[/li]
[li]کد اسکن پورت از حلقه بی پایان برنامه حذف میشه بنابراین برنامه خوانا تر میشه[/li]
[li]نیاز نیست اتصالات پورت رو ترجمه کنیم تا بفهمیم کدام کلید (ها) فشرده شده[/li]
[li]برنامه ما کوتاهتر خواهد بود و حافظه کمتری نیاز خواهد داشت[/li]
[li]میتونیم 256 کلید رو با یک پورت ساپورت کنیم[/li]
این مطلب رو هم عرض کنم که بنده در الکترونیک به هیچ عنوان صاحب نظر نیستم بنابراین این مدار ممکنه اشکالاتی داشته باشه.
در مورد مقادیر خازن ها و مقاومت ها و اینکه آیا با این روش دیبانسینگ به درستی انجام میشه هم مطمئن نیستم، اساتید اظهار نظر بفرمایند ممنون میشم
دانلود برنامه کدویژن و شماتیک پروتوس: http://hipfile.com/qhl1x4a4o18q/myKB.zip.html
کد:
کد:
#include <mega32.h> #include <delay.h> #include <stdio.h> #include <alcd.h> char buffer[32]; interrupt [EXT_INT0] void ext_int0_isr(void){ sprintf(buffer,"Chr=%c",PINA); lcd_clear(); lcd_puts(buffer); } void main(void){ lcd_init(16); GICR|=(1<<INT0); MCUCR|=(1<<ISC01)|(1<<ISC00); GIFR=(1<<INTF0); #asm("sei") DDRA=0; while(1); }
شماتیک:

دیدگاه