PDA

View Full Version : ماشین حساب



hosseinip
دوشنبه 28 اردیبهشت 1394, 22:06 عصر
سلام
من می خوام کی پد 4*4 را وصل کنم به میکرو و خروجی اش را روی lcd نمایش بدم
بعوان مثال وقتی کلید 1 زدم 1 نمایش داده شودو اگر پشت سرش 2 زدم بعد یک دو نمایش داده بشه یعنی 12 و...
وقتی c رو زدم عداد را یکی یکی پاک کند مثل ماشین حساب
میخوام عمل جمع ضرب هم انجام بدم
برنامه kypad بصورت زیر نوشتم ولی مشکلی که داره نمیدونم چطور یکبار 1 میزنمیم نمایش داده میشه دوباره 2 رو که میزنم یک پاک میشه دونمایش داده میشه
حتی میخوام جاروب kypad به صورت زیر با شد
پیشنهاد دوستان در این رابطه:
ساده ترین راه اش این باشه که عدد اول که زده شد، در متغیر a ذخیره بشه، عدددوم که زده شد، در متغیر b قرار بگیره و a*=10 بشه و a+=b بشه و رو lcd نمایش داده بشه.
با زدن دکمه ی بعدی باز در b قرار بگیرهه و a*=10 بشه و a+=b بشه و رو lcd نمایش داده بشه.
و ... به همین ترتیب برای ورودی های بعدی. درواقع اینطوری 10 گان و 100 گان و ... رو به ترتیب ایجاد می کنید و عددتون رو بزرگ می کنید.

درسته با دو متغیر a,b میشه این کارو کرد
ولی چطور تشخیص بدم عددی که زده شد عدد دوم.



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

unsigned char key;

void main(void)
{
while(1)
{
do{

DDRA = 0x0f;
PORTA = 0xf0;
delay_us(100);
key = PINA;


DDRA = 0xf0;
PORTA = 0x0f;
delay_us(100);
key = key | PINA;

}while(key==0xff);




switch(key)
{
case 0b11101110:
key=1;
break;
case 0b11011110:
key=2;
break;
case 0b10111110:
key=3;
break;
case 0b01111110:
key=4;
break;
case 0b11101101:
key=5;
break;
case 0b11011101:
key=6;
break;
case 0b10111101:
key=7;
break;
case 0b01111101:
key=8;
break;
case 0b11101011:
key=9;
break;
case 0b11011011:
key=10;
break;
case 0b10111011:
key=11;
break;
case 0b01111011:
key=12;
break;
case 0b11100111:
key=13;
break;
case 0b11010111:
key=14;
break;
case 0b10110111:
key=15;
break;
case 0b01110111:
key=16;

}
}
}

roo.row
پنج شنبه 21 خرداد 1394, 22:16 عصر
با سلام شما در کد بالا تو مقدار دهی دودویی اشتباه کردین
و در باره سوالتون اگر برنامه نویس خبره ای باشید که من نیستم از استادم یاد گرفتم می فهمید که با گرفتن داده نیازی نیست اصلا a و b تعریف کنید همون
a کافیه خیلی سادس داده ای که میگره رو از طریق خروجی منتقل کنه به lcd و دوباره برای گرفتن داده ی بعدی آماده بشه
برای اینم که پشت سر هم بیان a = a+(داده ورودی) اگه سخت شد ببخشید می تونید برای داده ورودی هم متغیر تعریف کنید فقط باید هر با خالی بشه
تا دوباره پرش کنیم

AliBahar
دوشنبه 05 مرداد 1394, 11:06 صبح
کتابی هست به اسم پروژههای عملی با میکرو کنترلرهای AVR نویسندهاش هم مهندس ملکی و مهندس نساجپور هستن ناشر هم موسسه فرهنگی یاوریان. تو صفحه 39 گفته که چطور میشه کی پد رو با میکرو خوند. شاید کمکتون کنه