کمک در مورد پروژه ماشین حساب با atmega 32
سلام دوستان
نمی دونم سوالم رو دارم جای درستی مطرح میکنم یانه . من تازه کار هستم و برنامه زیر رو با زبان c داخل برنامه code vision نوشتم و داخل نرم افزاز proteus اجرا کردم و درست انجام شده.
اما مدارش رو که روی برد برد بستم هر چی دکمه های صفحه کلید رو فشار می دم متاسفانه هیچ اتفاقی نمی افته . دیگه واقعا گیج شدم و نمی دونم مشکل از کجاست .
می خواستم خواهش کنم راهنماییم کنید .
در ضمن صفحه کلیدم اینجوریه :
[IMG]
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[/IMG]
اصلا استفاده ش داخل برد برد درسته یا نه و اینکه من مستقیم به میکرو وصلش کرد آیا نیاز به مقاومت داره ؟
با تشکر :n16:
برنامه :
کد:
#include <mega32.h>
#include <delay.h>
flash char codes[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
flash char select[8]={1,2,4,8,16,32,64,128};
flash char raw[4]={0XFE,0XFD,0XFB,0XF7};
flash char col[4]={0XE0,0XD0,0XB0,0X70};
flash char keycode[16]={1,2,3,'/',4,5,6,'*',7,8,9,'-','c',0,'=','+'};
char data [8];
void init (void)
{PORTA=0XFF;
DDRA=0XFF;
PORTB=0;
DDRB=0XFF;
PORTC=0XF0;
DDRC=0X0F;
}
void display (void)
{int i,j;
for (i=0;i<10;i++)
{for (j=0;j<4;j++)
{PORTA=codes[data[j]];
PORTB=select[j];
delay_ms(2);
PORTA=0XFF;
PORTB=0;}}}
char keybrd (void)
{int i,j;
for (i=0;i<4;i++)
{PORTC=raw[i];
delay_us(20);
if((PINC&0XF0)!=0XF0)
for (j=0;j<4;j++)
{if ((PINC&0XF0)==col[j])
return (keycode[i*4+j]);
}}return (20);}
void main (void)
{unsigned long int i=0,j,i1;
char op,h;
int k ;
init();
while(1)
{j=i;
for (k=0;k<4;k++)
{data[k]=j%10;
j=j/10;}
for(k=0;k<48;k++) display();
h=keybrd();
if(h<10) i=i*10+h;
if((h=='+') || (h=='-') || (h=='*') || (h=='/'))
{ i1=i; op=h;i=0;}
if(h=='=')
{
switch (op)
{case '+':i=i+i1;break;
case '-':i=i1-i; break;
case'*':i=i*i1;break;
case'/':i=i1/i;break;}}
if (h=='c')
{i=0;i1=0;op=0;}}}