PDA

View Full Version : اسکن صفحه کلید ماتریسی و نمایش روی سون سگمنت



asal71
شنبه 16 اسفند 1393, 19:45 عصر
با سلام
برنامه زیر صفحه کلید 4*4 همراه با سون سگمت هست که بخش هایی که به رنگ قرمز هست رو خودم به برنامه اضافه کردم البته طبق گفته های استاد برای کار کردن سون سگمنت برنامه
که البته کار هم نمیکنه
میشه اشکال برنامه رو بگیرید
ممنون از همکاریتون
#include<mega16.h>
#include<delay.h>
#define maxkeys 16
unsigned char key,butnum;
flash unsigned char keytb1[16]={0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7,0xbe,0xb d,0xbb,0xb7,0x7e,0x7d,0x7b,0x77};
void main(void)
{
DDRB=0xFF;
PORTB=0xFF;

while(1)
{
DDRC=0x0F;
PORTC=0xF0;
delay_us(5);
key=PINC;
DDRC=0xF0;
PORTC=0x0F;
delay_us(5);
key=key|PINC;

if(PINC.0==1&&PINC.4==1)
{
butnum=1;
}
if(PINC.0==1&&PINC.5==1)
{
butnum=1;
}
if(PINC.0==1&&PINC.6==1)
{
butnum=1;
}
if(PINC.0==1&&PINC.7==1)
{
butnum=1;
}
if(PINC.1==1&&PINC.4==1)
{
butnum=1;
}
if(PINC.1==1&&PINC.5==1)
{
butnum=1;
}
if(PINC.1==1&&PINC.6==1)
{
butnum=1;
}
if(PINC.1==1&&PINC.7==1)
{
butnum=1;
}
if(PINC.2==1&&PINC.4==1)
{
butnum=1;
}
if(PINC.2==1&&PINC.5==1)
{
butnum=1;
}
if(PINC.2==1&&PINC.6==1)
{
butnum=1;
}
if(PINC.2==1&&PINC.7==1)
{
butnum=1;
}
if(PINC.3==1&&PINC.4==1)
{
butnum=1;
}
if(PINC.3==1&&PINC.5==1)
{
butnum=1;
}
if(PINC.3==1&&PINC.6==1)
{
butnum=1;
}
if(PINC.3==1&&PINC.7==1)
{
butnum=1;
}

if(key|=0xFF)
{
for(butnum=0;butnum<maxkeys;butnum++)
{
if(keytb1[butnum]==key)

break;
}
if(butnum==maxkeys) butnum=0;
else butnum++;
}
else butnum=0;
PORTB=~butnum;

}
}

amir_mhdi
یک شنبه 17 اسفند 1393, 14:23 عصر
من از برنامتون خیلی سر در نیاوردم اما شما همه جا متغیر butnum رو 1 کردین که ظاهرا اشتباهه.

موفق باشید.

asal71
سه شنبه 19 اسفند 1393, 23:50 عصر
من از برنامتون خیلی سر در نیاوردم اما شما همه جا متغیر butnum رو 1 کردین که ظاهرا اشتباهه.

موفق باشید.

بله
خودم در دقیقه نود فهمیدم اشکال کارم چیه
باید یه متغیر دیگه در نظر میگرفتم و اون رو در حلقه هایی که ایجاد کردم قرار میدادم و در اخر اون رو به پورت B میفرستادم
در حلقه ها هم با توجه به اینکه حلقه مال کدوم کلید بود مقدار اون کلید رو میفرستادم براش

البته بازم یه گاهی برای برخی کلیدها مقادیر رو اشتباه نشون میداد
نمیدونم چرا:متفکر:

god of war
سه شنبه 05 خرداد 1394, 13:36 عصر
به نظرم خیلی سخت نوشتید برنامتونو
راه های خیلی راحت تری هم برای پیمایش کی پد هست
من خودم از این روش اعداد رو سون سگمنت نمایش میدم


k=4;
for(i=0;i<4;i++)
{
PORTB=row[i];
if(i==3)
{
if(PINB.4==0)
{
while(PINB.4==0)
{
}
count=1;
k=0;
}
else
{
while(PINB.5==0)
{
num=0;
k=0;
}
}
}
else
{
while(PINB.4==0)
{
k=1;
num=i*3+k;
PORTA=table[num];
}
while(PINB.5==0)
{
k=2;
num=i*3+k;
PORTA=table[num];
}
while(PINB.6==0)
{
k=3;
num=i*3+k;
PORTA=table[num];
}
}

فاطمه احم
یک شنبه 02 آذر 1399, 13:49 عصر
به نظرم خیلی سخت نوشتید برنامتونو
راه های خیلی راحت تری هم برای پیمایش کی پد هست
من خودم از این روش اعداد رو سون سگمنت نمایش میدم


k=4;
for(i=0;i<4;i++)
{
PORTB=row[i];
if(i==3)
{
if(PINB.4==0)
{
while(PINB.4==0)
{
}
count=1;
k=0;
}
else
{
while(PINB.5==0)
{
num=0;
k=0;
}
}
}
else
{
while(PINB.4==0)
{
k=1;
num=i*3+k;
PORTA=table[num];
}
while(PINB.5==0)
{
k=2;
num=i*3+k;
PORTA=table[num];
}
while(PINB.6==0)
{
k=3;
num=i*3+k;
PORTA=table[num];
}
}

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

فاطمه احم
یک شنبه 02 آذر 1399, 13:56 عصر
سلام یه برنامه تو بسکام میخوام ماشین حساب با کی پد ۴*۴ با دریافت عدد دو رقمی