mohsen.hex
یک شنبه 13 بهمن 1392, 23:38 عصر
سلام دوستان
من نیاز به یک تابع دارم که ارگومانهای ورودیش متغیر باشن یعنی یک بار 5 تا ارگومان براش بفرستم یک بار 10 تا!!
مثل دستور sprintf که براش تعریف نشده دقیقا چند ارگومان در ورودی میگیره!!
این هم کد که دارم روش کار میکنم
char menu(char linee,char locate,char *par1,char *par2,char *par3,char *par4,char *par5,char *par6,char *par7,char *par8)
{
char *mem[8][1]={{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}};
static char flag,flag2,i;
char delay=50,delay2=20;
UINT res,s1,s2;
//strcpy(*mem[0],par1);
*mem[0]=par1;
*mem[1]=par2;
*mem[2]=par3;
*mem[3]=par4;
*mem[4]=par5;
*mem[5]=par6;
*mem[6]=par7;
*mem[7]=par8;
flag=locate;
cont=0;
lcd_clear();
for(i=0;i<linee;i++){gotoxy(0,i);print_string(mem[i][0]);}
gotoxy(0,flag);print_string_h(mem[flag][0]);
press_key(key_set_pin,delay2);
//delay_ms(300);
while(key_set_port & key_set_pin);
do
{
key = key_read();//
if(key == down)
{
//while(FIO_ReadValue(0) & key_down_pin);
cont=0;
flag++;if(flag==linee) flag=0;
for(i=0;i<linee;i++){gotoxy(0,i);print_string(mem[flag>linee-1?(flag-linee-1+i):i][0]);}
gotoxy(0,(flag>linee-1)?linee-1:flag);print_string_h(mem[flag][0]);
press_key( key_down_pin , 10);
}
else if(key==up)
{
//while(FIO_ReadValue(0) & key_up_pin);
cont=0;
if(flag==0) flag=linee-1;
else flag--;
for(i=0;i<linee;i++){gotoxy(0,i);print_string(mem[flag>linee-1?(flag-linee-1+i):i][0]);}
gotoxy(0,(flag>linee-1)?linee-1:flag);print_string_h(mem[flag][0]);
press_key( key_up_pin , 10);
}
else if(key==left)
{
while(key_left_port & key_left_pin);
lcd_clear();
return 9+locate;
}
else if(key==set || key==right )
{
while((key_set_port & key_set_pin));
while((key_right_port & key_right_pin));
return flag+1;
for(i=0;i<linee;i++){gotoxy(0,i);print_string(mem[flag>linee-1?(flag-linee-1+i):i][0]);}
gotoxy(0,(flag>linee-1)?linee-1:flag);print_string_h(mem[flag][0]);
}
else if(key==left)
{
press_key( key_left_pin , delay2);
lcd_clear();break;
}
}while(cont<4);
lcd_clear();
return 0 ;
}
تعجب نکنید
این برای کامپیوتر نیست برای میکرو کنترلر هست!!
من نیاز به یک تابع دارم که ارگومانهای ورودیش متغیر باشن یعنی یک بار 5 تا ارگومان براش بفرستم یک بار 10 تا!!
مثل دستور sprintf که براش تعریف نشده دقیقا چند ارگومان در ورودی میگیره!!
این هم کد که دارم روش کار میکنم
char menu(char linee,char locate,char *par1,char *par2,char *par3,char *par4,char *par5,char *par6,char *par7,char *par8)
{
char *mem[8][1]={{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}};
static char flag,flag2,i;
char delay=50,delay2=20;
UINT res,s1,s2;
//strcpy(*mem[0],par1);
*mem[0]=par1;
*mem[1]=par2;
*mem[2]=par3;
*mem[3]=par4;
*mem[4]=par5;
*mem[5]=par6;
*mem[6]=par7;
*mem[7]=par8;
flag=locate;
cont=0;
lcd_clear();
for(i=0;i<linee;i++){gotoxy(0,i);print_string(mem[i][0]);}
gotoxy(0,flag);print_string_h(mem[flag][0]);
press_key(key_set_pin,delay2);
//delay_ms(300);
while(key_set_port & key_set_pin);
do
{
key = key_read();//
if(key == down)
{
//while(FIO_ReadValue(0) & key_down_pin);
cont=0;
flag++;if(flag==linee) flag=0;
for(i=0;i<linee;i++){gotoxy(0,i);print_string(mem[flag>linee-1?(flag-linee-1+i):i][0]);}
gotoxy(0,(flag>linee-1)?linee-1:flag);print_string_h(mem[flag][0]);
press_key( key_down_pin , 10);
}
else if(key==up)
{
//while(FIO_ReadValue(0) & key_up_pin);
cont=0;
if(flag==0) flag=linee-1;
else flag--;
for(i=0;i<linee;i++){gotoxy(0,i);print_string(mem[flag>linee-1?(flag-linee-1+i):i][0]);}
gotoxy(0,(flag>linee-1)?linee-1:flag);print_string_h(mem[flag][0]);
press_key( key_up_pin , 10);
}
else if(key==left)
{
while(key_left_port & key_left_pin);
lcd_clear();
return 9+locate;
}
else if(key==set || key==right )
{
while((key_set_port & key_set_pin));
while((key_right_port & key_right_pin));
return flag+1;
for(i=0;i<linee;i++){gotoxy(0,i);print_string(mem[flag>linee-1?(flag-linee-1+i):i][0]);}
gotoxy(0,(flag>linee-1)?linee-1:flag);print_string_h(mem[flag][0]);
}
else if(key==left)
{
press_key( key_left_pin , delay2);
lcd_clear();break;
}
}while(cont<4);
lcd_clear();
return 0 ;
}
تعجب نکنید
این برای کامپیوتر نیست برای میکرو کنترلر هست!!