اطلاعیه

Collapse
No announcement yet.

سوال درباره کار با آرایه ها و توابع + برنامه

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    سوال درباره کار با آرایه ها و توابع + برنامه

    سلام به همگی
    این برنامه رو ببینید:

    کد:
    #include <mega16.h>
    #include <stdio.h>
    #include <delay.h>
    #asm
      .equ __lcd_port=0x1B
    #endasm
    #include <lcd.h>
    
    unsigned char scan_key(void);
    unsigned char code[4][4]={{0,4,8,12},{1,5,9,13},{2,6,10,14},{3,7,11,15}};
    char buffer_lcd[10];
    void main(void)
    {  
    
    	unsigned char key;
    	PORTC=0x00;
    	DDRC=0xf0;	
     	lcd_init(16);
    	lcd_clear();        
    	while(1){
    		key=scan_key();
    	 	if(key!=0xff){ 
    	  	lcd_clear();
    		 	lcd_gotoxy(0,0);
    			sprintf(buffer_lcd,"key=%d",key);
    		 	lcd_puts(buffer_lcd);
    		}  
    	}
    }
    //---------------------------------------------
    unsigned char scan_key(void)	
    {              
    	unsigned char i,data,num_key,temp;
    	num_key=0xff;	
    	temp=0x70;
    	for(i=0;i<4;i++){
    		PORTC=temp;   			       
    		delay_ms(5); 
    		data=PINC & 0x0f;
    		if(data==0x07)		
    			num_key=code[0][i];
    		if(data==0x0B)
    			num_key=code[1][i];
    		if(data==0x0D)
    			num_key=code[2][i];	
    		if(data==0x0E)
    			num_key=code[3][i];		 	
    		temp= ((temp>>=1) | 0x80) & 0xF0 ;	
    		
    	}
    	return num_key;
    }
    این برنامه ای هست که برای اسکن کیپد 4 *4 بکار میرود. (( ترجیحا تو notepad کپی کنید تا بهتر مشاهده بشه )) .

    این برنامه کیپد رو اسکن میکنه و با استفاده از اون آرایه هایی که در ابتدای برنامه نوشته شده یه عدد رو روی LCD نشون میده و هیچ مشکلی هم نداره.




    اما من میخواستم این برنامه رو تغییر بدم . بدین صورت که بجای اینکه رو LCD یه عدد نشون بده کلا LCD حذف بشه و با فشردن هر دکمه این کیپد یک " تایع " اجرا بشه... ولی نمیدونم این تابع رو چطوری پیاده سازی کنم.

    بفرض که اسم توابع هم F1 تا F16 باشه آیا میشه (( آرایه ای از توابع )) تعریف کرد..؟؟ خودم فکر نمیکنم امکانش باشه...

    بمن بفرمایید چیکار باید بکنم تا با زدن هر دکمه یک تابع اجرا بشه.

    بینهایت ممنونم

    #2
    پاسخ : سوال درباره کار با آرایه ها و توابع + برنامه

    نوشته اصلی توسط roberty
    سلام به همگی
    این برنامه رو ببینید:


    این برنامه ای هست که برای اسکن کیپد 4 *4 بکار میرود. (( ترجیحا تو notepad کپی کنید تا بهتر مشاهده بشه ))
    سلام دوست عزیز.
    سوالتون چی هست؟ این برنامه فکر کنم مال کتاب پرتوی فر هست که جواب هم میده.مشکل چیه؟
    [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

    دیدگاه


      #3
      پاسخ : سوال درباره کار با آرایه ها و توابع + برنامه

      شما میتونید از switch و case استفاده کنید . یعنی بازدن کلید یه عدد بر میگرده . اون عدد را توی یه switch بذارین و با توجه به هر عدد case مورد نظر اجرا شود :nerd:
      چيزي را بگو که بتواني بنويسي
      چيزي را بنويس که بتواني امضا کني
      چيزي را امضا کن که بتواني به آن عمل کني (ناپلئون)

      دیدگاه


        #4
        پاسخ : سوال درباره کار با آرایه ها و توابع + برنامه

        نوشته اصلی توسط lordsoroosh
        شما میتونید از switch و case استفاده کنید . یعنی بازدن کلید یه عدد بر میگرده . اون عدد را توی یه switch بذارین و با توجه به هر عدد case مورد نظر اجرا شود :nerd:
        ممنون. ولی مشکل اینجاست که در برنامه یه حلقه for وجود داره که از یک تا 4 میشماره و یک متغیر temp که بعد از هر بار شمارش یک واحد شیفت به راست میکنه. اینها باعث میشه من نتونم از Switch case استفاده کنم.

        فقط یه راه میمونه و آنهم اینکه کلا بعد از این قسمتی که برای اسکن کیپد و نمایش عدد هست از Switch case استفاده کنم و بگم چه عددی باید نمایش داده بشه... مثلا متغیر داخل switch رو به اسم number نامگذاری کنم و بعد number رو با اعداد 1 تا 16 مقایسه کنم و به ازای هر عدد یک تابع رو اجرا کنم.

        البته این متغیر number همون num_key داخل برنامه هست.

        آره... فکر کنم منظور شما هم همین بود.. ایده هوشمندانه ای هست... آفرین..!! :nice: همین کار رو میکنم.

        دیدگاه

        لطفا صبر کنید...
        X