سلام
این برنامه باید جمع یک رقمی رو انجام بده .برنامه صفحه کلید و 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); } }

دیدگاه