اطلاعیه

Collapse
No announcement yet.

راه اندازی 7SEGMENT چهار رقمی

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

    راه اندازی 7SEGMENT چهار رقمی

    راه اندازی 7SEGMENT چهار رقمی با قابلیت تغییر مقدار هر رقم به صورت چشمک زن :

    برنامه رو با کامپایلر AVR GCC در محیط AVR STUDIO5 نوشتم ، توضیحات نحوه اتصال 7SEGMENT و پوش باتون ها رو به صورت کامند ارائه کردم .

    فایلهای برنامه : TATLI_AVR4

    برنامه :

    کد:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/pgmspace.h>
    
    #define DATA  PORTB
    #define SCAN  PORTD
    /*
    port for the 7SEGMENT DATA lines :PORTB  
    pin for a : PB0
    pin for b : PB1     
    pin for c : PB2 
    pin for d : PB3
    pin for e : PB4
    pin for f : PB5
    pin for g : PB6
    pin for dp : PB7
    and
    port for the 7SEGMENT scan lines :PORTD
    pin for C1 : PD0
    pin for C2 : PD1
    pin for C3 : PD2
    pin for C4 : PD3
    */
    /*
    pin for SELECT : PD7
    pin for DOWN : PD6
    pin for UP : PD4
    */
    unsigned char select,Cdgit[4]={0,1,2,3}; 
    const unsigned char nom[] PROGMEM=
        {
    /* 0   1   2   3   4   5   6   7   8   9    */
     0X3F , 0X06 , 0X5B , 0X4F , 0X66 , 0X6D , 0X7D , 0X07 , 0X7F , 0X6F ,
    /* 0.   1.  2.   3.   4.  5.   6.  7.   8.  9.   */ 
     0XBF , 0X86 , 0XDB , 0XCF , 0XE6 , 0XED , 0XFD , 0X87 , 0XFF , 0XEF  
          };
    		  
    		  
    void main (void){
       
    	 DDRD=0X0F;
       DDRB=0XFF;   
    	 
       PORTD|=(1<<PD4)|(1<<PD6)|(1<<PD7);
    	 
    /* Timer/Counter 0 initialization
    	 Clock source: System Clock
    	 Clock value: 125.000 kHz*/
       TCCR0B=(1<<CS00)|(1<<CS01);
       TCNT0=0x83;
    	  
       TIMSK0=(1<<TOIE0);  // Timer(s)/Counter(s) Interrupt(s) initialization
    	  
    /*External Interrupt(s) initialization
    	 INT5: On
       INT5 Mode: Falling Edge
       INT6: On
       INT6 Mode: Falling Edge
       INT7: On
       INT7 Mode: Falling Edge*/
       EICRA=(1<<ISC51)|(1<<ISC61)|(1<<ISC71);
       EIMSK=(1<<INT5)|(1<<INT6)|(1<<INT7);
    	 EIFR=(1<<INTF5)|(1<<INTF6)|(1<<INTF7);
    	 
       DATA=0XC0;
       SCAN=0X80;
       
    	 sei() ;
    	 
    while(1){
    	 
    };
    }   
    
    // Timer 0 overflow interrupt service routine    
    ISR(TIMER0_OVF_vect ){
    // Reinitialize Timer 0 value
        TCNT0=0x83;
    // Place your code here
        static unsigned char dg,i=0;
       
    	  SCAN = 0;    
        DATA = pgm_read_byte(&nom[Cdgit[dg]]);
        SCAN |= (1<<dg);
    	  
        if(dg==select&&++i<130)SCAN=0; 
        if(++dg>3)dg=0;   
    }
    
    // External Interrupt 0 service routine
    ISR(INT5_vect ){
        if(Cdgit[select]<19)Cdgit[select]++;
         }
    		 
    // External Interrupt 1 service routine
    ISR(INT6_vect ){
    	  if(Cdgit[select]>0)Cdgit[select]--;
         }
    		 
    // External Interrupt 1 service routine
    ISR(INT7_vect ){
    	  if(++select>4)select=0;
         }


    این هم یک عکس از نحوه اتصال سخت افزارهای جانبی با مگا 8 :


    #2
    پاسخ : راه اندازی 7SEGMENT چهار رقمی

    با سلام مجدد
    برنامه بالا رو در عمل تست کردم جند تا اشکال داشت برطرفشون کردم ، لینک فایل های برنامه و شماتیک رو در زیر گزاشتم .

    فایلهای برنامه و شماتیک : TATLI_AVR4_V2

    برنامه :

    کد:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/pgmspace.h>
    
    #define DATA  PORTB
    #define SCAN  PORTD
    /*
    port for the 7SEGMENT DATA lines :PORTB  
    pin for a : PB0
    pin for b : PB1     
    pin for c : PB2 
    pin for d : PB3
    pin for e : PB4
    pin for f : PB5
    pin for g : PB6
    pin for dp : PB7
    and
    port for the 7SEGMENT scan lines :PORTD
    pin for C1 : PD0
    pin for C2 : PD1
    pin for C3 : PD2
    pin for C4 : PD3
    */
    /*
    pin for SELECT : PD7
    pin for DOWN : PD6
    pin for UP : PD4
    */
    unsigned char select=4,Cdgit[4]={0,1,2,3,4}; 
     const prog_uint8_t nom[] =
        {
    /* 0   1   2   3   4   5   6   7   8   9    */
     0X3F , 0X06 , 0X5B , 0X4F , 0X66 , 0X6D , 0X7D , 0X07 , 0X7F , 0X6F ,
    /* 0.   1.  2.   3.   4.  5.   6.  7.   8.  9.   */ 
     0XBF , 0X86 , 0XDB , 0XCF , 0XE6 , 0XED , 0XFD , 0X87 , 0XFF , 0XEF  
          };
    		  
    		  
    void main (void){
       
    	 CLKPR=0x80;
    	 CLKPR=0x00;
    	 
    	 DDRD=0X0F;
       DDRB=0XFF;   
    	 
    	 
       PORTD=(1<<PD4)|(1<<PD6)|(1<<PD7);
    	 
    /* Timer/Counter 0 initialization
    	 Clock source: System Clock
    	 Clock value: 125.000 kHz*/
       TCCR0B=(1<<CS00)|(1<<CS01);
       TCNT0=0x83;
    	  
       TIMSK0=(1<<TOIE0);  // Timer(s)/Counter(s) Interrupt(s) initialization
    	  
    /*External Interrupt(s) initialization
    	 INT5: On
       INT5 Mode: Falling Edge
       INT6: On
       INT6 Mode: Falling Edge
       INT7: On
       INT7 Mode: Falling Edge*/
       EICRB=(1<<ISC51)|(1<<ISC61)|(1<<ISC71);
       EIMSK=(1<<INT5)|(1<<INT6)|(1<<INT7);
    	 EIFR=(1<<INTF5)|(1<<INTF6)|(1<<INTF7);
    	 
       DATA=0X3F;
       SCAN=0X00;
       
    	 sei();
    	 
    while(1);
    }   
    
    // Timer 0 overflow interrupt service routine    
    ISR(TIMER0_OVF_vect ){
    // Reinitialize Timer 0 value
        TCNT0=0x83;
    // Place your code here
        static unsigned char dg,i=0;
       
    	  SCAN = 0;    
        DATA = pgm_read_byte(&nom[Cdgit[dg]]);
        SCAN = (1<<dg);
    	  
        if(dg==select&&++i<130)SCAN=0; 
        if(++dg>3)dg=0;   
    }
    
    // External Interrupt 0 service routine
    ISR(INT5_vect ){	
        if(Cdgit[select]<19)Cdgit[select]++;
         }
    		 
    // External Interrupt 1 service routine
    ISR(INT6_vect ){
    	  if(Cdgit[select]>0)Cdgit[select]--;
         }
    		 
    // External Interrupt 1 service routine
    ISR(INT7_vect ){
    	  if(++select>4)select=0;
         }


    شماتیک :


    فقط یک چیز اینکه بجای پوش باتون SELECT میتونید از پوش باتون HWB موجود بر روی هدر بورد استفاده کنید.

    دیدگاه

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