سلام
این برنامه باید جمع یک رقمی رو انجام بده .برنامه صفحه کلید و lcd ساده با همین الگوریتم جواب میده ولی برای ماشین حساب نمیدونم چرا کار نمیکنه.اگه کسی میتونه لطفا دریغ نکنه و ببینه مشکلش چیه.پیشاپیش ممنونم

این برنامه باید جمع یک رقمی رو انجام بده .برنامه صفحه کلید و lcd ساده با همین الگوریتم جواب میده ولی برای ماشین حساب نمیدونم چرا کار نمیکنه.اگه کسی میتونه لطفا دریغ نکنه و ببینه مشکلش چیه.پیشاپیش ممنونم
کد:
#include <mega16.h>
#include <delay.h>
#include <stdlib.h>
#include <lcd.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
flash unsigned char keytbl[16]={0xee, 0xed, 0xeb, 0xe7, 0xde, 0xdd, 0xdb, 0xd7, 0xbe, 0xbd, 0xbb, 0xb7, 0x7e, 0x7d, 0x7b, 0x77};
flash unsigned char realkey[16]={0x07, 0x08, 0x09, '/', 0x04, 0x05, 0x06, '*', 0x01, 0x02, 0x03, '-','o', 0x00,'=','+'};
void main(void)
{
char buffer[20],key,butnum,num1,num2,sum,result;
lcd_init(16);
lcd_clear();
while(1)
{
first:
DDRC=0x0f;
PORTC=0xf0;
delay_ms(5);
key=(PINC&0xf0);
PORTC=0x0f;
DDRC=0xf0;
delay_ms(5);
key=key|(PINC&0x0f);
for(butnum=0; butnum<16; butnum++)
if(keytbl[butnum]==key)
num1=realkey[butnum];
if(butnum=16)
goto first;
// num1=realkey[butnum];
//////////////
lcd_clear();
itoa( num1,buffer);
lcd_puts(buffer);
delay_ms(20);
//////////////
first2:
DDRC=0x0f;
PORTC=0xf0;
delay_ms(5);
key=(PINC&0xf0);
PORTC=0x0f;
DDRC=0xf0;
delay_ms(5);
key=key|(PINC&0x0f);
for(butnum=0; butnum<16; butnum++)
if(keytbl[butnum]==key)
sum=realkey[butnum];
if(butnum=16)
goto first2;
//sum=realkey[butnum];
//////////////
//lcd_clear();
itoa(sum,buffer);
lcd_puts(buffer);
delay_ms(20);
//////////////
first3:
DDRC=0x0f;
PORTC=0xf0;
delay_ms(5);
key=(PINC&0xf0);
PORTC=0x0f;
DDRC=0xf0;
delay_ms(5);
key=key|(PINC&0x0f);
for(butnum=0; butnum<16; butnum++)
if(keytbl[butnum]==key)
num2=realkey[butnum];
if(butnum=16)
goto first3;
// num2=realkey[butnum];
//////////////
// lcd_clear();
itoa( num2,buffer);
lcd_puts(buffer);
delay_ms(20);
//////////////
result=num1+num2;
lcd_putsf("=");
itoa(result,buffer);
lcd_puts(buffer);
delay_ms(20);
}
}




دیدگاه