سه شنبه ۲۹ آبان ۱۳۹۷
سلام مهمان گرامی !
ورود
ثبت نام

آمار سایت

افراد آنلاین : 3 نفر
اعضای آنلاین : 0 نفر
بازدید امروز : 236 بازدید
بازدید دیروز : 681 بازدید
بازدید این هفته : 2038 بازدید
بازدید هفته قبل : 3220 بازدید
امروز : سه شنبه ۲۹ آبان ۱۳۹۷



Google



در این قسمت ما می خواهیم اتصال صفحه کلید به میکرو کنترلرهای 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 را وصل کردیم و در برنامه سطر ها را به عنوان خروجی تعریف کردیم (یعنی نیبل بالا) و ستون ها را به عنوان ورودی (یعنی نیبل پایین) و برنامه را به شکل زیر نوشتیم:

راه اندازی کیبورد 4 در 4 در کدویژن
#include  // معرفي ميکرو 
#include  // فراخواني تابع تاخيري 
#include  // فراخواني توابع ال سي دي 

#include  // فراخواني دستورات استاندار ورودي و خروجي 
#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.PCENTER.IR**********/ 
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.PCENTER.IR**********/ 
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.PCENTER.IR**********/ 
void main(void){ 
char buffer[16]; 
lcd_init(16); 
DDRC=0X0F; //سطرها خروجي و ستون ها ورودي 
PORTC=0XFF; //مقدار اوليه پورت 1 باشد 
lcd_clear(); 
lcd_putsf("WWW.PCENTER.IR"); 
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 برگشت داده می شود.

راه اندازی کیبورد 4 در 4 در کدویژن

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

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

از لینک زیر هم می توانید فایل های مربوط به این برنامه را دانلود نمائید. این برنامه با کدویژن نسخه 2.03 و پروتیوس نسخه 7.6SP0 نوشته شده است
منبع: picpars.com

اگر این مطلب برای شما مفید بوده برروی کلید G+1 کلیک کنید !

دانلود فایل های پروژه :

خرید پروژه
کلیه فایل های ضمیمه این پروزه به صورت رایگان قرار داده شده است.
اگر این مطلب برای شما مفید بوده میتوانید با درج لینک سایت ما در سایت یا وبلاگ خود ویا معرفی سایت ما به دوستان خود و یا با روش های پیشنهادی ما از پی سنتر حمایت کنید.
راهنمای پروژه
رمز فایل
www.pcenter.ir
نوشته شده در چهارشنبه ۰۴ فروردین ۱۳۹۵ | ۱۷:۳۱   توسط Admin   بازدید : 5094
نظر شما :
نام :
ایمیل :
(ایمیل نمایش داده نمیشود)
پیام شما :
شکلک ها :
:) :( ;) :D ;)) :X :? :P :* =(( :O @};- :B /:) :S
:Pa :*q :Ow :Be :Sr :?x

کد امنیتی :
برای تعویض عکس کلیک کنید


RSS Feed Site map