hosseinip
دوشنبه 28 اردیبهشت 1394, 23: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;
}
}
}
من می خوام کی پد 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;
}
}
}