اطلاعیه

Collapse
No announcement yet.

درخواست تغییر کوچک در کد زیر

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

    درخواست تغییر کوچک در کد زیر

    سلام خدمت همگی
    من یه در خواست کوچیک داشتم
    می خوام مدار کنترل با خط تلفنو ببندم
    ولی این کد وقتی کلید هارو تشخیص میده شماره کلید رو روی LCD نشون میده می خوام یکی از پرت ها رو 1 کنه که بهش رله وصل کنم یعنی چهار تا خروجی داریم A B C D چهار تا رله بذارم هر کدومو تشخیص داد یه رلرو وصل کنه
    ممنون میشم

    کد:
    #include <mega16.h>
    
    // Alphanumeric LCD Module functions
    #asm
      .equ __lcd_port=0x18
    #endasm
    #include <lcd.h> 
    #include <delay.h>  
    
    #define soundp PORTA.5
    #define cd PORTA.4
    #define ringing PINA.6
    #define TLED PORTD.7
    
    int i;    
    
    // External Interrupt 0 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {    
    	i=0;    
    	lcd_gotoxy(6,1);
    	switch(PINA & 0x0F)
    	{    
    	case 10:
    		lcd_putchar('0');
    		break;   
    	case 11:
    		lcd_putchar('*'); 
    		TLED=1;
    		break;
    	case 12:
    		lcd_putchar('#'); 
    		TLED=0;
    		break;
    	case 13:
    		lcd_putchar('A');
    		break; 
    	case 14:
    		lcd_putchar('B');
    		break; 
    	case 15:
    		lcd_putchar('C');
    		break; 
    	case 0:
    		lcd_putchar('D');
    		break;
    	default:
    		lcd_putchar('0' + (PINA & 0x0F));  
    	}   
    } 
    
    void beep()
    {
    	int n=0;
    	
    	while(n<7000)
    	{      
    		soundp = !soundp;
    		delay_us(400);
    		n++;   
    	}
    }     
    
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port A initialization
    // Func0=In Func1=In Func2=In Func3=In Func4=Out Func5=Out Func6=In Func7=In 
    // State0=T State1=T State2=T State3=T State4=0 State5=0 State6=T State7=T 
    PORTA=0x00;
    DDRA=0x30;
    
    // Port B initialization
    // Func0=In Func1=In Func2=In Func3=Out Func4=In Func5=In Func6=In Func7=In 
    // State0=T State1=T State2=T State3=1 State4=T State5=T State6=T State7=T 
    PORTB=0x08;
    DDRB=0x08;
    
    // Port C initialization
    // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In 
    // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T 
    PORTC=0x00;
    DDRC=0x00;
    
    // Port D initialization
    // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=Out
    // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=0
    PORTD=0x00;
    DDRD=0x80;
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    
    // External Interrupt(s) initialization
    // INT0: On
    // INT0 Mode: Rising Edge
    // INT1: Off
    // INT2: Off
    GICR|=0x40;
    MCUCR=0x03;
    MCUCSR=0x00;
    GIFR=0x40;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    // Analog Comparator Output: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // LCD module initialization
    lcd_init(16);
    
    // Global enable interrupts
    #asm("sei")
     lcd_clear();
    lcd_putsf("MT8870 Project");
    delay_ms(1000);
      lcd_clear();
    lcd_putsf("Ready");
    delay_ms(300);
    
    while (1)
    {
    	if(ringing)
    	{    
    		lcd_clear();
    		lcd_putsf("Ringing...");
    		delay_ms(1000);  
    		i=0;
    		cd=1; 
    		beep();
    	}
    	if(cd==1)
    	{
    		lcd_clear();
    		lcd_putsf("Connected"); 
    		lcd_gotoxy(0,1);
    		lcd_putsf("DTMF: ");
    		while(i<10)
    		{
    			i++;
    			delay_ms(1000);
    		}   
    		cd=0;     
    		lcd_clear();
    		lcd_putsf("Ready");
    	}	
    };
    }
    
    // END OF PROGRAM
    اینم شماتیک مدار


    #2
    پاسخ : درخواست تغییر کوچک در کد زیر

    توی روتین وقفه 0 یه دستور Switch Case هست. قبل از هر break اون پینی که می خوای 0یا1 کن.

    دیدگاه


      #3
      پاسخ : درخواست تغییر کوچک در کد زیر

      نوشته اصلی توسط Rohalamin
      توی روتین وقفه 0 یه دستور Switch Case هست. قبل از هر break اون پینی که می خوای 0یا1 کن.
      ممنون از توجهت دوست عزیز
      شرمنده میندازمت تو زحمت ولی من هیچی از c سر در نمیارم فقط بسکام بلدم اونم نه حرفه ای
      میشه خودت تغیرش بدی برام
      مثلا چهار تا رله به پورت C که چیزی بهش وصل نیست بزنی ؟

      ممنونت میشم

      دیدگاه


        #4
        پاسخ : درخواست تغییر کوچک در کد زیر

        براتون به صورت ساده عادی تغییر دادم که همه پین ها رو صفر کنه و فقط پین مورد نظر رو 1 کنه.
        کد:
        #include <mega16.h>
        
        // Alphanumeric LCD Module functions
        #asm
          .equ __lcd_port=0x18
        #endasm
        #include <lcd.h> 
        #include <delay.h>  
        
        #define soundp PORTA.5
        #define cd PORTA.4
        #define ringing PINA.6
        #define TLED PORTD.7
        
        int i;    
        
        // External Interrupt 0 service routine
        interrupt [EXT_INT0] void ext_int0_isr(void)
        {    
        	i=0;    
        	lcd_gotoxy(6,1);
        	switch(PINA & 0x0F)
        	{    
        	case 10:
        		lcd_putchar('0');
        		break;   
        	case 11:
        		lcd_putchar('*');
        		TLED=1;
        		break;
        	case 12:
        		lcd_putchar('#'); 
        		TLED=0;
        		break;
        	case 13:
        		lcd_putchar('A');
        		PORTC = 0x01;
        		break; 
        	case 14:
        		lcd_putchar('B');
        		PORTC = 0x02;
        		break; 
        	case 15:
        		lcd_putchar('C');
        		PORTC = 0x04;
        		break; 
        	case 0:
        		lcd_putchar('D');
        		PORTC = 0x08;
        		break;
        	default:
        		lcd_putchar('0' + (PINA & 0x0F));  
        	}   
        } 
        
        void beep()
        {
        	int n=0;
        	
        	while(n<7000)
        	{      
        		soundp = !soundp;
        		delay_us(400);
        		n++;   
        	}
        }     
        
        void main(void)
        {
        // Declare your local variables here
        
        // Input/Output Ports initialization
        // Port A initialization
        // Func0=In Func1=In Func2=In Func3=In Func4=Out Func5=Out Func6=In Func7=In 
        // State0=T State1=T State2=T State3=T State4=0 State5=0 State6=T State7=T 
        PORTA=0x00;
        DDRA=0x30;
        
        // Port B initialization
        // Func0=In Func1=In Func2=In Func3=Out Func4=In Func5=In Func6=In Func7=In 
        // State0=T State1=T State2=T State3=1 State4=T State5=T State6=T State7=T 
        PORTB=0x08;
        DDRB=0x08;
        
        // Port C initialization
        // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In 
        // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T 
        PORTC=0x00;
        DDRC=0x0F;
        
        // Port D initialization
        // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=Out
        // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=0
        PORTD=0x00;
        DDRD=0x80;
        
        // Timer/Counter 0 initialization
        // Clock source: System Clock
        // Clock value: Timer 0 Stopped
        // Mode: Normal top=FFh
        // OC0 output: Disconnected
        TCCR0=0x00;
        TCNT0=0x00;
        OCR0=0x00;
        
        // Timer/Counter 1 initialization
        // Clock source: System Clock
        // Clock value: Timer 1 Stopped
        // Mode: Normal top=FFFFh
        // OC1A output: Discon.
        // OC1B output: Discon.
        // Noise Canceler: Off
        // Input Capture on Falling Edge
        TCCR1A=0x00;
        TCCR1B=0x00;
        TCNT1H=0x00;
        TCNT1L=0x00;
        OCR1AH=0x00;
        OCR1AL=0x00;
        OCR1BH=0x00;
        OCR1BL=0x00;
        
        // Timer/Counter 2 initialization
        // Clock source: System Clock
        // Clock value: Timer 2 Stopped
        // Mode: Normal top=FFh
        // OC2 output: Disconnected
        ASSR=0x00;
        TCCR2=0x00;
        TCNT2=0x00;
        OCR2=0x00;
        
        // External Interrupt(s) initialization
        // INT0: On
        // INT0 Mode: Rising Edge
        // INT1: Off
        // INT2: Off
        GICR|=0x40;
        MCUCR=0x03;
        MCUCSR=0x00;
        GIFR=0x40;
        
        // Timer(s)/Counter(s) Interrupt(s) initialization
        TIMSK=0x00;
        
        // Analog Comparator initialization
        // Analog Comparator: Off
        // Analog Comparator Input Capture by Timer/Counter 1: Off
        // Analog Comparator Output: Off
        ACSR=0x80;
        SFIOR=0x00;
        
        // LCD module initialization
        lcd_init(16);
        
        // Global enable interrupts
        #asm("sei")
         lcd_clear();
        lcd_putsf("MT8870 Project");
        delay_ms(1000);
          lcd_clear();
        lcd_putsf("Ready");
        delay_ms(300);
        
        while (1)
        {
        	if(ringing)
        	{    
        		lcd_clear();
        		lcd_putsf("Ringing...");
        		delay_ms(1000);  
        		i=0;
        		cd=1; 
        		beep();
        	}
        	if(cd==1)
        	{
        		lcd_clear();
        		lcd_putsf("Connected"); 
        		lcd_gotoxy(0,1);
        		lcd_putsf("DTMF: ");
        		while(i<10)
        		{
        			i++;
        			delay_ms(1000);
        		}   
        		cd=0;     
        		lcd_clear();
        		lcd_putsf("Ready");
        	}	
        };
        }

        دیدگاه

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