اسکن صفحه کلید ماتریسی و نمایش روی سون سگمنت
با سلام
برنامه زیر صفحه کلید 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;
}
}
نقل قول: اسکن صفحه کلید ماتریسی و نمایش روی سون سگمنت
من از برنامتون خیلی سر در نیاوردم اما شما همه جا متغیر butnum رو 1 کردین که ظاهرا اشتباهه.
موفق باشید.
نقل قول: اسکن صفحه کلید ماتریسی و نمایش روی سون سگمنت
نقل قول:
نوشته شده توسط
amir_mhdi
من از برنامتون خیلی سر در نیاوردم اما شما همه جا متغیر butnum رو 1 کردین که ظاهرا اشتباهه.
موفق باشید.
بله
خودم در دقیقه نود فهمیدم اشکال کارم چیه
باید یه متغیر دیگه در نظر میگرفتم و اون رو در حلقه هایی که ایجاد کردم قرار میدادم و در اخر اون رو به پورت B میفرستادم
در حلقه ها هم با توجه به اینکه حلقه مال کدوم کلید بود مقدار اون کلید رو میفرستادم براش
البته بازم یه گاهی برای برخی کلیدها مقادیر رو اشتباه نشون میداد
نمیدونم چرا:متفکر:
نقل قول: اسکن صفحه کلید ماتریسی و نمایش روی سون سگمنت
به نظرم خیلی سخت نوشتید برنامتونو
راه های خیلی راحت تری هم برای پیمایش کی پد هست
من خودم از این روش اعداد رو سون سگمنت نمایش میدم
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];
}
}
نقل قول: اسکن صفحه کلید ماتریسی و نمایش روی سون سگمنت میشه لطفا همین برنام رو به زبان بیسیک د
نقل قول:
نوشته شده توسط
god of war
به نظرم خیلی سخت نوشتید برنامتونو
راه های خیلی راحت تری هم برای پیمایش کی پد هست
من خودم از این روش اعداد رو سون سگمنت نمایش میدم
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];
}
}
میشه لطفا همین برنامه اسکن کی پد روی سون سگمنت رو به زبان بیسیک بنویسید
نقل قول: اسکن صفحه کلید ماتریسی و نمایش روی سون سگمنت
سلام یه برنامه تو بسکام میخوام ماشین حساب با کی پد ۴*۴ با دریافت عدد دو رقمی