آیا میدانید اکثر زناني که طلاق مي گيرند هرگز از دست شوهرشان کتک نخورده اند
اغلب مردم نيمي از عمر را صرف بدبخت نمودن نيم ديگر مي نمايند. از شان فور
Logo

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

به نام خدا

در این قسمت ما می خواهیم اتصال صفحه کلید به میکرو کنترلرهای AVR را آموزش دهیم. همان گونه که می دانیم یک پورت میکرو 8 پین دارد و ما اگر بخواهیم به پایه ها کلید وصل کنیم قاعدتا 8 تا کلید می توانیم به آن وصل کنیم برای این که به همین پورت بتوانیم تعداد کلید های بیشتری وصل کنیم اگر کلید ها را به صورت ماتریسی ببندیم می توانیم 16 تا کلید داشته باشیم، برای اینکار کلید ها را به صورت 4 سطر و 4 ستون می بندیم که 4 تا سطر را به 4 تا از میکرو وصل میکنیم و آنها را به صورت خروجی تعریف می کنیم و 4 تا ستون را به 4 تا از پین های میکرو وصل میکنیم و آنها را به صورت ورودی تعریف می کنیم. که در ادامه به توضیح کامل آن می پردازیم:



شرح مدار و برنامه:

در اینجا ما از یک میکرو کنترلر ATMEGA32 استفاده کردیم و به پورت C کیبورد و به پورت A یک LCD وصل کردیم. هدف ما در این مثال این که از کیبورد یک عدد ورودی را دریافت کنیم و روی LCD آن عدد را نمایش دهیم. به پورت C.0 تا C.3 به ترتیب سطر های R1 تا R4 را وصل کردیم و به پورت C.4 تا C.7 به ترتیب ستونهای C1 تا C4 را وصل کردیم و در برنامه سطر ها را به عنوان خروجی تعریف کردیم (یعنی نیبل بالا) و ستون ها را به عنوان ورودی (یعنی نیبل پایین) و برنامه را به شکل زیر نوشتیم:

#include <mega32.h> // معرفي ميکرو 
#include <delay.h> // فراخواني تابع تاخيري 
#include <lcd.h> // فراخواني توابع ال سي دي 
#include <stdio.h> // فراخواني دستورات استاندار ورودي و خروجي 
#define c1 PINC.4 // تعريف سي1 به عنوان يک اسم براي اين پين 
#define c2 PINC.5 
#define c3 PINC.6 
#define c4 PINC.7 
#asm 
.equ __lcd_port=0x1B ;PORTA 
#endasm 
/*********www.picpars.com**********/ 
unsigned char scan[4]={0XFE,0XFD,0XFB,0XF7}; // اسکن صفحه کليد 
unsigned char arrkey[16]={ //کد هاي صفحه کليد 
7,8,9,20, 
4,5,6,30, 
1,2,3,40, 
70,0,60,50}; 
char key; 
/*********www.picpars.com**********/ 
unsigned char keypad(){ // تعريف يک تابع با مقدار برگشتي 
unsigned char r,b; 
while(1){ 
for (r=0; r<4; r++){ 
b=4; 
PORTC=scan[r]; 
if(c1==0) b=0; 
if(c2==0) b=1; 
if(c3==0) b=2; 
if(c4==0) b=3; 

if (!(b==4)){ 
key=arrkey[(r*4)+b]; 
while(c1==0); 
while(c2==0); 
while(c3==0); 
while(c4==0); 
delay_ms(50); 
return key; 
} 
} 
} 
} 
/*********www.picpars.com**********/ 
void main(void){ 
char buffer[16]; 
lcd_init(16); 
DDRC=0X0F; //سطرها خروجي و ستون ها ورودي 
PORTC=0XFF; //مقدار اوليه پورت 1 باشد 
lcd_clear(); 
lcd_putsf("WWW.PICPARS.COM BY SMGH"); 
delay_ms(6000); 
while(1){ 
key=keypad(); // فراخواني تابع براي اسکن صفحه کليد 
lcd_clear(); 
sprintf(buffer,"Key %d",key); 
lcd_puts(buffer); 
delay_ms(300); 
} 
}

شرح برنامه:

#define c1 PINC.4

این کد پین PINC.4 را به اسم جدید C1 تغییر نام می دهید به این دلیل از این دستور استفاده می کنیم که در هر جایی از برنامه بخوام از پین PINC.4 به عنوان ورودی استفاده کنیم و مقدار آن را بخوانیم دیگر لازم نیست بنویسیم PINC.4 بلکه کافی است فقط بجای آن بنویسیم C4 که ما در این برنامه 4 تا از پین ها را به این شکل تغییر نام دادیم.

 unsigned char scan[4]={0XFE,0XFD,0XFB,0XF7};

 این کد ها به ترتیب از سمت چپ به راست R1 و R2 و R3 و R4 را خاموش (0) می کند. به این صورت که وقتی میکرو زیر برنامه keypad را اجرا می کند CPU با سرعت بسیار بالایی این 4 تا پین را صفر می کند یعنی اینکه برای بار اول R1=0 و بقیه روشن و R2=0 و بقیه روشن و به همین ترتیب تا آخر... حالا فرض کنیم وقتی که R1=0 بوده ما کلید شماره 8 را فشار داده ایم که در این صورت فقط ستون C1 صفر می شود یعنی ستون کلید های شماره 8و5و2و0 و از آن جایی که R1=0 بوده میکرو متوجه می شود که R1=0 بوده و حالا C1=0 شده و تنها کلیدی که در سطر اول و ستون دوم است کلید شماره 8 بود و در نتیجه عدد 8 را به ما بر میگرداند.

از متغییر arrkey برای برگرداندن عدد متناظر با کلید فشار داده شده استفاده می شود.

و حالا تابع keypad: در این تابع دو متغییر به نام های r,b تعریف شده که از r برای کنترل سطر ها و از b برای کنترل ستون ها استفاده شده. و بعد یک حلقه بی نهایت تعریف شده و تا زمانی که یک کلید فشار داده نشود میکرو در این حلقه می ماند. درون حلقه بی نهایت یک حلقه for نوشته شده که دستورات داخل این حلقه کلا 4 مرتبه تکرار می شود و چون این حلقه for در یک حلقه بی نهایت قرار دارد پس حلقه for نیز بی نهایت اجرا می شود اما هر 4 بار یک بار اجرا می شود و در هر بار از 0 تا 3 می شمارد که در حلقه دستور PORTC=scan[r] هم اجرا می شود که شمارنده حلقه که متغیر r می باشد در آرایه scan قرار می گیرد و از آرایه یک کدی را بر میگرداند و روی پورت قرار می دهید. این کار همان جاروب کردن نیبل بالایی پورت می باشد که R1 تا R1 را یکی یکی صفر می کند و در بالا توضیح دادیم. و در مرحله بعدی گفتیم مقدار اولیه b=4 باشد و بعد از آن 4 شرط قرار دادیم و گفتیم برای فشار داده شدن هر ستون یک مقدار به متغییر b بده تا بعدا بتوانیم توسط آن از میان یک سطر و یک ستون کلید مربوطه را پیدا کنیم، در مرحله بعدی یک شرط نوشتیم و گفتیم اگر متغییر b مخالف با 4 می باشد (یعنی مطمئنا کلیدی فشار داده شده) حالا کلید مربوطه را پیدا کن که ابتدا متغییر r را در 4 ضرب می کند و سپس با عدد درون b جمع می کنیم و حاصل این عملیات اعدادی بین 0 تا 15 می باشد که توسط این اعداد عدد واقعی کلید را از آرایه arrkey برمیگرداند و درون متغییر key قرار می دهید و بعد از آن 4 حلقه بی نهایت برای 4 ستون نوشتیم و به این منظور می باشد که تا وقتی کاربر دستش را روی کلید برنداشته در این حلقه بماند و بعد هم یک تاخیر نوشتیم که این تاخیر هم به عنوان یک لرزه گیر استفاده شده و هم فاصله بین خواندن دو کلید می باشد. و در آخر هم مقدار کلید خوانده شده به تابع توسط دستور return برگشت داده می شود.

و در تابع main عدد کلید مربوطه که در متغییر key قرار دارد به صورت یک رشته آماده می شود و بعد هم برای LCD ارسال می شود.

امیدوارم که این توضیحات کامل بوده و این برنامه مورد رضایت شما واقع شده باشد. در صورتی که سوال یا نظری در مورد این برنامه دارید می توایند در قسمت نظرات همین صفحه برای ما مطرح کنید.

از لینک زیر هم می توانید فایل های مربوط به این برنامه را دانلود نمائید. [ این برنامه با کدویژن نسخه 2.03 و پروتیوس نسخه 7.6SP0 نوشته شده است و مطمئنا با نسخه های قدیمی تر کار نخواهند کرد] با تشکر

 

این مقاله توسط سایت برنامه نویسی میکروکنترولرها ارائه شده کپی برداری تنها با ذکر منبع مجاز می باشد.

  منبع: www.picpars.com

  لطفا مقالات، آموزش‌ها و پروژه های خود را به آدرس ایمیل نمائید تا آن را با نام خودتان در سایت منتشر کنیم.




فایل های ضمیمه ( ورود - عضويت )

فایل شماره 5 | حجم 38 کیلوبایت | دانلود 1684 بار

منبع www.picpars.com  نویسنده: سید محسن قاسمیان

منبع www.picpars.com  دانلود برنامه مدار صفحه کلید 4×4

منبع www.picpars.com  پسورد: www.picpars.com


لینک ثابت این صفحه:   


© کپی برداری از مطالب این سایت تنها با ذکر منبع مجاز می باشد

در صورت داشتن هر گونه سوال، نظر و پیشنهاد راجب این مطلب می‌توانید در قسمت نظرات همین صفحه مطرح نمائید. همچنین با شرکت در نظر سنجی های سایت، ما را در بهبود بخشیدن به مطالب یاری کنید.


آموزش ميكروكنترلر AVR آموزش سی آموزش C آموزش AVR به زبان سی C اتصال کیبورد 4×4 به میکروکنترلر AVR کی پد کیپد صفحه کلید راه اندازی کیبورد برنامه زبان سی نحوی متصل کردن کیبورد به میکرو درایور کیبورد اسکن صفحه کلید آموزش برنامه نویسی آموزش میکرو

ارسال شده در مورخه : پنجشنبه، 16 ارديبهشت ماه، 1389 توسط مدیریت بازدید [15833]   پرینت

مرتبط باموضوع :

 مقدمات و اصول و قوانین زبان سی C قسمت 1  [ چهارشنبه، 21 بهمن ماه، 1388 ] 2844 مشاهده
 استپ موتور چپگرد راستگرد step motor به زبان C و AVR  [ چهارشنبه، 13 مرداد ماه، 1389 ] 6536 مشاهده
 آموزش سریع میکروکنترلر AVR  [ پنجشنبه، 7 مرداد ماه، 1389 ] 3974 مشاهده
 شمارنده تک رقمی با سون سگمنت زبان C و AVR  [ چهارشنبه، 13 مرداد ماه، 1389 ] 5922 مشاهده
نام شما:
ایمیل شما:

در مورخه : دوشنبه، 20 ارديبهشت ماه، 1389توسط
(مشخصات کاربر homa | ارسال پیغام شخصی) (IP آدرس : )
به شما تبریک می گم سایت بسیار خوبی دارید به امید موفقیت همیشگی شما .
ارسال جوابیه ]

نام شما:
ایمیل شما:

در مورخه : دوشنبه، 10 خرداد ماه، 1389توسط
(مشخصات کاربر damavand | ارسال پیغام شخصی) (IP آدرس : )
از عضویت و منابع موجود در این سایت خوشم آمد و از زحمات بی منت شما دوست عزیز متشکرم
ارسال جوابیه ]

نام شما:
ایمیل شما:

در مورخه : چهارشنبه، 30 تير ماه، 1389توسط
(مشخصات کاربر sotode | ارسال پیغام شخصی) (IP آدرس : )
مطلب خوبی بود لطفا در مورد راه اندازی lcdگرافیکی در کدویژن توضیحاتی بدهید.
ارسال جوابیه ]

نام شما:
ایمیل شما:

در مورخه : چهارشنبه، 15 دي ماه، 1389توسط
(مشخصات کاربر hamidg | ارسال پیغام شخصی) http://hamidg (IP آدرس : )
سلام از اینکه این برنامه رو گذاشتید و در کل از زحماتتون متشکرم اگر ممکنه درباره اینکه چطور با استفاده از سطروستون ها تشخیص میدیم چه عددی فشرده شده بیشتر توضیح بدین متوجه نشدم چطور می شه تشخیص داد وقتی سطر و ستون 1 ،برابر 0 باشن پس باید شماره 7 نمایش داده بشه؟ یه سوال دیگه ! چطور میشه به جای اعداد کلیدهای حروف را گذاشت؟
ارسال جوابیه ]

نام شما: v
ایمیل شما: saleh_vsb@yahoo.com

در مورخه : پنجشنبه، 28 ارديبهشت ماه، 1391http://hamidg (IP آدرس : )

age mishe barname safhe kilid 3*4 ro bezarid ke ba feshar dadane adad adad ru lcd biyan va ba ba gereftane shihft va feshar dadane adad horufe engilisi ru lcd biyan(yani shift+1=ava 1saniye bad  ba gereftane shift va zasane1
 1=b,...)

1    2    3

4    5    6

7    8    9

shift 0   #

ارسال جوابیه ]

نام شما: nasrin
ایمیل شما: asrink_68@yahoo.com

در مورخه : يكشنبه، 22 آبان ماه، 1390http://hamidg (IP آدرس : )

سلام سایتتون خیلی خوبه تبریک میگم

من یه سوال دارم خواهش میکنم کمک کنید هیشکی نیست به من کمک کنه

پروژه من ارسال اطلاعات بین دو میکروکنترلر از طریق مادون قرمزه

یه چنتا کد برنامه براش پیدا کردم ولی درست نیستن اگه کسی بتونه کمکم کنه ممنون میشم این ایمیلمه

asrink_68@yahoo.com

ارسال جوابیه ]

نام شما: پروژه الکترونیک
ایمیل شما: mhsnrah@yahoo.com

در مورخه : جمعه، 25 فروردين ماه، 1391http://hamidg (IP آدرس : )
جالب بود مرسی
ارسال جوابیه ]

نام شما: mohsen
ایمیل شما: mohsenqadermazy@yahoo.com

در مورخه : پنجشنبه، 31 فروردين ماه، 1391http://hamidg (IP آدرس : )

با سلام به دوست عزیز 

اگه بخواهیم کنسول چت درست کنیم یعنی هر کلید بتواند هم عدد 1 و هم حروف را وارد کند مثل کیبورد موبایل

 

ارسال جوابیه ]

نام شما: arash
ایمیل شما: mo.hajabbasi@yahoo.com

در مورخه : شنبه، 16 ارديبهشت ماه، 1391http://hamidg (IP آدرس : )

sal ahsant.من با قسمت زیر مشکل دارم یعنی نمیدونم این ضربو و جمع برای چیه ؟

در ضمن کسی میتونه بگه من می خواهم تو این برنامه جای عدد حروف بنویسم چیکارکنم؟

key=arrkey[(r*4)+b];
جوابیه ها

نام شما: سید محسن قاسمیان
ایمیل شما:

در مورخه : شنبه، 16 ارديبهشت ماه، 1391توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی) http://www.picpars.com (IP آدرس : )

از متغیر r برای موقعیت سطرها و از b‌ هم برای ستون ها استفاده شده. با ضرب شماره سطر در 4 و جمع اون با مقدار ستون عددی بین 0 تا 15 بدست خواهد آمد که با استفاده از این عدد مقدار واقعی کلید را از آریه استخراج می کنیم.

برای کسانی که در این موضوع مشکل دارند تنها راه فهم 100٪ نمیشود آن این است که یکی دوتا از کلید ها را انتخاب کنند و روی کاغذ متغیر های r و b رو خودتون مقدار دهی کنید و پس با استفاده از فرمول key=arrkey[(r*4)+b] عدد مربوطه را حساب کنید و از متغیر آرایه ببینید چه عددی انتخاب می شود.خستگی

ارسال جوابیه ]

ارسال جوابیه ]

نام شما: ali
ایمیل شما: aligholidost@gmail.com

در مورخه : سه شنبه، 19 ارديبهشت ماه، 1391http://hamidg (IP آدرس : )

با عرض سلام - اولا باید تشکر کنم بابت سایت خیلی خوبتون و اقعا خیلی جامع هستش فقط یه سوال داشتم که اگه جوابمو بدین خیلی ممنون میشم اگه بخواهیم بجای نمایش تو lcd داخل سون سکمنت نمایش بدیم چه تغییراتی رو اعمال کنیم . با تشکر

جوابیه ها

نام شما: سید محسن قاسمیان
ایمیل شما:

در مورخه : سه شنبه، 19 ارديبهشت ماه، 1391توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی) http://www.picpars.com (IP آدرس : )

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

مثال آماده دریافت می باشد:

ارسال جوابیه ]

ارسال جوابیه ]

نام شما: هنگامه
ایمیل شما: ladybird1902@live.com

در مورخه : سه شنبه، 19 ارديبهشت ماه، 1391http://hamidg (IP آدرس : )

با سلام وخسته نباشيد وتشكر از وبتون كه واقعا پربار وبه دردبخوره 

استاد ما اين برنامه رو تو آزمايشگاه ميكرو ازمون خواسته بود كه انجام داديم اين جلسه ازمون خواسته با همين كيپد 4*4كنسول چت درست كنيم (تو كدويژن  يعني مثل موبايل اس ام اس درست كنيم تا توlcdنمايش بده به طور مثال عدد 2بايك بار فشار دادن حرف aبا دوبارفشار دادن حرف bباسه بار فشار دادن حرف c وكيلد 3   با يك بار فشار دادن حرف d و به همين ترتيب تا آخر ويكي از كليد 1يا0 به عنوان فاصله و واگه تا 1شنبه تحويل نديم حذفمون ميكنه ميشه كمكون كنيدترم آخريم بد بخت ميشيم 

جوابیه ها

نام شما: سید محسن قاسمیان
ایمیل شما:

در مورخه : سه شنبه، 19 ارديبهشت ماه، 1391توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی) http://www.picpars.com (IP آدرس : )

با سلام

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

http://www.picpars.com/order

ارسال جوابیه ]

ارسال جوابیه ]

نام شما: M
ایمیل شما: m_mastoori_69@yahoo.com

در مورخه : يكشنبه، 31 ارديبهشت ماه، 1391http://hamidg (IP آدرس : )

با سلام

من می خواهم برنامه ای بنویسم که اگر سوییچ روی پایه piinb.3 وصل بود صفحه کلید روی پورت D اسکن بشود و کاربر  بتواند عدد دو رقمی روی lcd روی پورت C بنویسد و این عدد دو رقمی روی lcd نمایش داده شود . تو رو خدا زود به من جواب بدهید .

جوابیه ها

نام شما: سید محسن قاسمیان
ایمیل شما:

در مورخه : يكشنبه، 31 ارديبهشت ماه، 1391توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی) http://www.picpars.com (IP آدرس : )

if(PINB.3==1) keypad();

با کمک شرط بالا به راحتی می توانید وضعیت پین را مورد برسی قرار دهید و هرگاه مثلا یک شد تابع کی پد فراخوانی شود.

ارسال جوابیه ]

ارسال جوابیه ]

 
نام شما: [ کاربر جدید ]

نام شما (ضروری): 
ایمیل شما : 
نظر:
کد امنیتی
کد امنیتی

  [ بازگشت ]
  • امتیاز بدهید
  • انتخاب ها
  • اشترک گذاری
آیا این مطالب مورد رضایت شما واقع گردید؟ لطفا با رای دادن به این مطلب ما را در بهبود بخشیدن به مطالب کمک کنید. با اینکار به سایر دوستان‌تان نیز کمک خواهید کرد.


 فایل پی دی اف فایل پی دی اف

 گرفتن پرينت از اين مطلب گرفتن پرينت از اين مطلب

 ارسال به دوستان ارسال به دوستان

 گزارش این پست به مدیر سایت گزارش این پست به مدیر سایت

پروژه های آماده
پروژه کنترل سروو موتور از 0 تا 180 درجه

کنترل زاویه ای 0 تا 180 درجه؛ قابلیت تعریف بیش 100 برنامه مجزا توسط کاربر؛ تعیین زاویه برای هر پله حرکت سروو موتور؛ تعیین سرعت حرکت سروو موتور؛ تعیین مدت زمان کارکرد در هر برنامه از 1 تا 255 دقیقه. منوی کاربری بسیار آسان برای تعریف برنامه ها. جزئیات...


عناوین مطالب
عناوین مطالب را در موضوعات مربوطه جستجو کنید!
یک موضوع انتخاب کنید:



لینک باکس مهم‌ترین‌ ها
  • پروژه‌ها
  • برترین‌ها
  • پر بازدید
  • بیشترین نظرات
cash10-H8

سالنامه فارسی
ش ی د س چ پ ج
  12345
6789101112
13141516171819
20212223242526
2728293031

دوشنبه

1

1 خرداد ماه، 1391
21/05/2012


رویداد ها:
روز بزرگداشت ملاصدرا - روز بهره وری و بهینه سازی مصرف

جستجو در تقویم ...
cash40-D1

آمار کاربران

نظرسنجی
نظر شما در مورد کیفیت سایت چیست؟

خیلی عالیه
میتونه بهتر باشه
جای کار داره
خوب نیست
نظری ندارم!



شما میتوانید در این مورد نظر مکتوب خود را بنویسید: مشاهد نتایج و ثبت نظر

نظرسنجی ها

تعداد آراء: 679    نظرات: 42

تبادل لینک
PicPars با تمامی وب سایتها و وبلاگها تبادل لینک میکند. ابتدا لینک ما در وب خود ثبت کنید و سپس لینک خود را از اینجا برای ما ارسال کنید. در اولین فرصت لینک شما در سایت ثبت می شود.

پیشنهاد ما

سفارش طراحی پروژه
مرورگر پیشنهادی ما
نرم افزار دانلود فایلها
برنامه فشرده سازی







امتیاز به سایت
امتیاز به این صفحه
با یک امتیاز مثبت از طریق Gmail تان از سایت حمایت کنید