PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : کی برد ماتریسی 4*4دربیسکام



faraso
13th May 2010, 06:08 PM
سلام
برنامه میخرام بنویسم در محیط بیسکام :
یک قفل الکترونیکی با کی بردماتریسی 4*4به طوریکه کی برد ازنوع ماشین حساب باشه:
1-یک رمزثابت با250 وجودداشته باشه
2-اگرکلیدفشاربدم آخرین رقم پاک شود.
3-کلیدشماره 15 کارenter و 13 کار start روانجام بده.
البته من در برمانه صفحه کلیدمشکل دارم .صفحه کلیدرو بدون استفاده از debounceو delay,lcd f بنویسم.ازمیکروatmega32 استفاده می کنم.لطفا فایل پروتیوس آن را هم بذارید.خیلی فوری نیازدارم.باتشکرازتمامی دوستان

hengameh
13th May 2010, 07:49 PM
http://www.alt.ir/img/keyboard0.jpg

این شماتیکی که تو پروتیوسه

hengameh
13th May 2010, 07:52 PM
برنامه اسکن صفحه کليد 4*4 و نمايش روي ال سي دي

#include <mega16.h>
#include <delay.h>
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>

#include<stdio.h>
#define maxkeys 17
// char i;
char lcd[20];
unsigned char key, butnum,key_code,key1,i;

//key pad scan table
flash unsigned char keytbl[17]={0xee, 0xed, 0xeb, 0xe7, 0xde, 0xdd, 0xdb, 0xd7, 0xbe, 0xbd, 0xbb, 0xb7, 0x7e, 0x7d, 0x7b, 0x77,0XFF};

unsigned char get_key(void)
{
//DDRB = 0xff;
//PORTB = 0xff;

//endless loop to read keyboard
//while(1)

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


DDRA = 0xf0;
PORTA = 0x0f;
delay_us(5);
key = key | PINA;
// switch(key_code)
//{
//case 238:
//key=1;
//break;
//case 237:
//key=2;
//break;
//case 235:
//key=3;
//break;
//case 222:
//key=4;
//break;
///case 221:
//key=5;
//break;
//case 219:
//key=6;
//break;
//case 190:
//key=7;
//break;
//case 189:
//key=8;
//break;
//case 187:
//key=9;
//break;
//case 125:
//key=0;
//break;
//case 231:
//key=11;
//break;
//case 215:
//key=12;
//break;
//case 183:
//key=13;
//break;
//case 119:
//key=14;
//break;
//case 123:
//key=15;
//break;
//case 126:
//key=16;
//break;
//}
//PORTB=~key;
//return key;


//}
if (key != 0xff)
{
for (butnum=0; butnum<maxkeys; butnum++)
{
if (keytbl[butnum]==key) break;
}
//if (butnum==maxkeys) butnum=0;
//else butnum++; //to make range 1-16
}
//else butnum=0;

PORTB = ~ butnum ;

return butnum;
}

void main(void)
{
lcd_init(16);

i=butnum;

if(i<=16)
while(1){ sprintf(lcd,"num=%02d",get_key());
lcd_puts(lcd);
delay_ms(10);
lcd_gotoxy(0,0);}



}



این برنامه به دو صورت است.

faraso
14th May 2010, 08:33 AM
تشکر
ولی همون طوریکه گفتم میخوام برنامه به زبان بیسیک باشه(بیسکام)و بدون استفاده از delay, lcd,debounce درادامه میخوام بااستفاده ازاین کی برد قفل الکترونیکی هم بنویسم .اگرمیونید حتما راهنمایی کنید.ممنون

faraso
16th May 2010, 06:25 PM
پس دوستان کجائید؟
خواهشا کمک کنید..........................

hengameh
16th May 2010, 08:03 PM
خب دوست عزیز شما یه دو خط از برنامه رو بذار بعد بگو کجا گیر کردی

کلن نوشتنه برنامه قفل الکترونیکی چن تا لوپه که اگه عدد وارد شده با عددی که شما وارد کردی یکی باشه که بره سراغه مرحله بعدی
در غیر اینصورتم که بره تو یه لوپ حالا می خوای آژیر بده یا کاره دیگه ای بکنه؟

hengameh
16th May 2010, 08:10 PM
ببخشیدا ولی منظورت از کلیدای 15 و 13 چین؟

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد