سلام خدمت اساتید.
من برنامه ی ماشین حساب مهندسی رو که داخل کتاب مهندس الوندی هست عینا" توی کدویژن نوشتم.برنامه به این صورته که برنامه ی اسکن صفحه کلید به نام keypad.c به صورت فایل الحاقی به برنامه ی اصلی به نام calculator.c اضافه میشه و توی برنامه، keypad.h فراخوانی میشه
اما بعد از فراخوانی،وقتی کامپایل میکنم حدود 15 تا خطا دارم که بیشتر اینطوری هستن:
undifined PORTD
undifined PIND
undifined DDRDD
undifined PORTC
undifined PINC
undifined DDRC
و یکی دوتا خطای دیگه.توی نسخه های دیگه از کدویژن هم انجام دادم و خطا گرفتم.کد برنامه رو میذارم.لطفا اگر تونستید،کامپایلش کنید و مشکلو بهم بگید.مثل همیشه روی کمکتون حساب میکنم.ممنون
کد برنامه اصلی calculator.c:
کد keypad.h:
کد keypad.c:
من برنامه ی ماشین حساب مهندسی رو که داخل کتاب مهندس الوندی هست عینا" توی کدویژن نوشتم.برنامه به این صورته که برنامه ی اسکن صفحه کلید به نام keypad.c به صورت فایل الحاقی به برنامه ی اصلی به نام calculator.c اضافه میشه و توی برنامه، keypad.h فراخوانی میشه
اما بعد از فراخوانی،وقتی کامپایل میکنم حدود 15 تا خطا دارم که بیشتر اینطوری هستن:
undifined PORTD
undifined PIND
undifined DDRDD
undifined PORTC
undifined PINC
undifined DDRC
و یکی دوتا خطای دیگه.توی نسخه های دیگه از کدویژن هم انجام دادم و خطا گرفتم.کد برنامه رو میذارم.لطفا اگر تونستید،کامپایلش کنید و مشکلو بهم بگید.مثل همیشه روی کمکتون حساب میکنم.ممنون
کد برنامه اصلی calculator.c:
کد:
# define pp 3.14159327 # define SIN PINC.0 # define COS PINC.1 # define TAN PINC.2 # define LOG PINC.3 # define SHIFT PINC.4 #include <mega16a.h> #include <delay.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #asm .equ _lcd_port=0x1B #endasm #include <lcd.h> #include "keypad.h" float number1 =0; float number2 =0; float result=0.0; static char last_key; unsigned char mmz=0,count=0,num_dis=0; char *save_str=""; void display(){ char lcd_buf[32]; sprintf(lcd_buf,"%f",number1); lcd_clear(); lcd_gotoxy(0,0); lcd_puts(lcd_buf); delay_ms(500); } void config_number(float f_number){ static float division[]={1,10,100,1000,10000,100000,1000000}; f_number=(f_number/division[mmz]); result=f_number; } void sin_DRG(){ number1 = atof(save_str); *save_str=NULL; config_number(number1); number1=result; number1=(number1*pp)/180; number1=sin(number1); num_dis=1; count=0; mmz=0; last_key='+'; display(); while(SHIFT==1 && SIN==0) {}; } void arcsin_DRG(){ number1 = atof(save_str); *save_str=NULL; config_number(number1); number1=result; number1=asin(number1); number1=(number1*180)/pp; display(); num_dis=1; count=0; mmz=0; last_key='+'; while(SHIFT==0 && SIN==0) {}; } void cos_DRG(){ number1 = atof(save_str); *save_str=NULL; config_number(number1); number1=result; number1=(number1*pp)/180; number1=cos(number1); num_dis=1; count=0; mmz=0; last_key='+'; display(); while(SHIFT==1 && COS==0) {}; } void arccos_DRG(){ number1 = atof(save_str); *save_str=NULL; config_number(number1); number1=result; number1=acos(number1); number1=(number1*180)/pp; num_dis=1; count=0; mmz=0; last_key='+'; display(); while(SHIFT==0 && COS==0) {}; } // void tan_DRG(){ number1 = atof(save_str); *save_str=NULL; config_number(number1); number1=result; number1=(number1*pp)/180; number1=tan(number1); number1=number1+0.0001; num_dis=1; count=0; mmz=0; last_key='+'; display(); while(SHIFT==1 && TAN==0) {}; } // void arctan_DRG(){ number1 = atof(save_str); *save_str=NULL; config_number(number1); number1=result; number1=atan(number1); number1=(number1*180)/pp; number1=number1+0.0001; num_dis=1; count=0; mmz=0; last_key='+'; display(); while(SHIFT==1 && TAN==0) {}; } // void log_10(){ number1 = atof(save_str); *save_str=NULL; config_number(number1); number1=result; number1=log10(number1); num_dis=1; count=0; mmz=0; last_key='+'; display(); while(LOG==0) {}; } signed char test_key (char key){ if ((key == '.')|| ((key >= '0') && (key <= '9')))return 1; else return 0; } // void ack_opretion(char opretion){ signed char res = 0; switch (opretion){ case '+' : number1 += number2;break; case '-' : number1 -= number2;break; case '*' : number1 *= number2;break; case '%' : if (number2 != 0) number1 /= number2; else {res = 2;break;} }if (res == 0){ if ((number1>=-999999999)&&(number1<=999999999)) display(); else { lcd_gotoxy(0,0); lcd_putsf("error number"); delay_ms(1000); lcd_clear(); lcd_gotoxy(0,0); lcd_putchar('0'); lcd_gotoxy(0,0); } } if (res == 2){ lcd_clear(); lcd_putsf("*ERROR*"); } } // void calculator(){ unsigned char key=0; char *helper=""; signed char data_in; number1=0; number2=0; last_key=0; lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("0"); data_in=0; lcd_gotoxy(0,0); for (;;){ start: key = keypad(); if (test_key(key)){ if(num_dis==1){ lcd_clear(); num_dis=0; } if (data_in != 9){ data_in++; if((key=='.')&&(count!=1)){ count=1; data_in--; lcd_putchar(key); goto start; } if(key=='.'){ data_in--; goto start; } lcd_putchar(key); if(count==1) mmz++; helper=0; key&=0x0f; itoa(key,helper); strcat(save_str,helper); } } else{ if(data_in != 0){ if (last_key == 0){ number1=atof(save_str); *save_str=NULL; config_number(number1); number1=result; count=0; mmz=0; num_dis=1; } else{ number2=atof(save_str); *save_str=NULL; config_number(number2); number2=result; count=0; mmz=0; num_dis=1; } } data_in=0; if (last_key != 0) ack_opration(last_key); if (key != '=') last_key = key; else last_key = 0; } } } void main(){ setting(); calculator(); }
کد:
unsigned char keypad(); void setting();
کد:
#define c1 PIND.4 #define c2 PIND.5 #define c3 PIND.6 #define c4 PIND.7 #define SIN PINC.0 #define COS PINC.1 #define TAN PINC.2 #define LOG PINC.3 #define SHIFT PINC.4 flash char row[]={~1,~2,~4,~8}; flash char data_key[]={ '7','8','9','%', '4','5','6','*', '1','2','3','-', '.','0','=','+'}; unsigned char ac,table; unsigned int r; // unsigned char keypad(){ while (1){ for (r=0;r<4;r++){ ac=4; PORTD =row[r]; DDRD=0x0f; if (c1==0) ac=0; if (c2==0) ac=1; if (c3==0) ac=2; if (c4==0) ac=3; // if (LOG==0) log_10(); if (SHIFT==1 && SIN==0) sin_DRG(); if (SHIFT==1 && COS==0) cos_DRG(); if (SHIFT==1 && TAN==0) tan_DRG(); if (SHIFT==0 && SIN==0) arcsin_DRG(); if (SHIFT==0 && COS==0) arccos_DRG(); if (SHIFT==0 && TAN==0) arctan_DRG(); if (!(ac==4)){ table=data_key[(r*4)+ac]; while (c1==0){} while (c2==0){} while (c3==0){} while (c4==0){} delay_ms(20); while (c1==0){} while (c2==0){} while (c3==0){} while (c4==0){} delay_ms(20); return table; } } }; } // void setting(){ PORTD=0xff; DDRD=0x0f; PORTC=0xFF; DDRC=0x00; lcd_init(16); }
دیدگاه