mohsen.hex
دوشنبه 14 بهمن 1392, 00: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 ;
}
تعجب نکنید
این برای کامپیوتر نیست برای میکرو کنترلر هست!!