قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

wisama
:: مهندس متواجد ::
تاريخ التسجيل: Sep 2007
المشاركات: 58
نشاط [ wisama ]
قوة السمعة:0
قديم 05-07-2017, 02:13 PM المشاركة 1   
افتراضي عداد بواسطة seven segment Twitter FaceBook Google+



ارجو من أهل الخبرة أن يرشدوني على دائرة وبرنامج micro c لعداد يستخدم pic16F877A مع seven segment بحيث عن طريق أزرار اختار كم أريده أن يعد ويتوقف ويتكون من ثلاث seven segment ، ولكم جزيل الشكر والتقدير .

اعلانات

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 06-07-2017, 05:49 AM المشاركة 2   
افتراضي اللهم انفعنا بما علمتنا وعلمنا ما ينفعنا وزدنا علما


ارجو من أهل الخبرة أن يرشدوني على دائرة وبرنامج micro c لعداد يستخدم pic16F877A مع seven segment بحيث عن طريق أزرار اختار كم أريده أن يعد ويتوقف ويتكون من ثلاث seven segment ، ولكم جزيل الشكر والتقدير .
السلام عليكم ورحمه الله ..

أخي الكريم لقد صممت لك هذة الدائرة مع البرنامج .. وهو عداد تصاعدي و مشروط بمعني مسبوق الضبط يتم اختيار رقم علي الشاشات وعند الوصول الي هذا الرقم يتوقف العداد علي الرقم اللذي تم ادخاله ..

اليك الدائرة ..




كود البرنامج لغه السي مع المترجم .. بالميكرو سي برو ..


كود:
        
            // ENG _ ABDALLA HYGAZY  //
      
           // DATA _ 2017 / 7 / 6  //
      
     // Counter program using  7SEGMENT  //
    
    //  Save all data in  eeprom memory //
      
      unsigned short mask(unsigned short num);
      unsigned int SEGMENT1=0,SEGMENT2=0,SEGMENT3=0,SEGMENT4=0,SEGMENT5=0,X=0,START=0,OUT_LOOP=0,CONTER=0;
      unsigned int COPY_SEGMENT1=0,COPY_SEGMENT2=0,COPY_SEGMENT3=0,COPY_SEGMENT4=0,X1=0,X2=0,X3=0;
     
    #define  BUZZER  PORTD.F7=1; delay_ms(40); PORTD.F7=0; delay_ms(30); PORTD.F7=1; delay_ms(40); PORTD.F7=0;
    #define  button  PORTD.F7=1; delay_ms(20); PORTD.F7=0; delay_ms(10); PORTD.F7=1; delay_ms(20); PORTD.F7=0;
    #define TEMER2        delay_ms(30);
    #define TEMER_conter  delay_ms(30);
    #define TEMER3        delay_ms(300);
    //.......................................................................
    #define LED_SEGMENT1  PORTC.F0=1;  PORTC.F1=0; PORTC.F2=0; PORTC.F3=0;
    #define LED_SEGMENT2  PORTC.F1=1;  PORTC.F0=0; PORTC.F2=0; PORTC.F3=0;
    #define LED_SEGMENT3  PORTC.F2=1;  PORTC.F0=0; PORTC.F1=0; PORTC.F3=0;
    #define LED_SEGMENT4  PORTC.F3=1;  PORTC.F0=0; PORTC.F1=0; PORTC.F2=0;
    #define SEGMENTS_OFF  SEGMENT1=0;  SEGMENT2=0; SEGMENT3=0; SEGMENT4=0;
    #define LED_OFF       PORTC.F0=0;  PORTC.F1=0; PORTC.F2=0; PORTC.F3=0;
    #define COPY_SEGMENT_delete     COPY_SEGMENT1=0;  COPY_SEGMENT2=0; COPY_SEGMENT3=0;  COPY_SEGMENT4=0;
    //.......................................................................
    #define Test_the_values_of_screens   if(SEGMENT1==COPY_SEGMENT1&&SEGMENT2==COPY_SEGMENT2&&SEGMENT3==COPY_SEGMENT3&&SEGMENT4==COPY_SEGMENT4){ BUZZER BUZZER  X2=1; START=0; OUT_LOOP=1;}
   //........................................................................
    #define  Clear_the_screens   if(PORTD.F3==1){ button   delay_ms(200);if(PORTD.F3==0){goto loop;} button if(PORTD.F3==1){ delay_ms(150); if(PORTD.F3==1){ eeprom_DATA_Clear(); X2=0; PORTC.F4=0; COPY_SEGMENT_delete  SEGMENTS_OFF button button button  }   }}
      void interrupt(){
      
     PORTA=1;  PORTB=mask(SEGMENT1); delay_ms(2);
     PORTA=2;  PORTB=mask(SEGMENT2); delay_ms(2);
     PORTA=4;  PORTB=mask(SEGMENT3); delay_ms(2);
     PORTA=8;  PORTB=mask(SEGMENT4); delay_ms(2);
     PORTA=16; PORTB=mask(SEGMENT5); delay_ms(2);
     //....................................
     if(SEGMENT1>10){SEGMENT1=0;}
     if(SEGMENT2>10){SEGMENT2=0;}
     if(SEGMENT3>10){SEGMENT3=0;}
     if(SEGMENT4>10){SEGMENT4=0;}
    //....................................
     if(COPY_SEGMENT1>10){COPY_SEGMENT1=0;}
     if(COPY_SEGMENT2>10){COPY_SEGMENT2=0;}
     if(COPY_SEGMENT3>10){COPY_SEGMENT3=0;}
     if(COPY_SEGMENT4>10){COPY_SEGMENT4=0;}
    //....................................
    



     
    INTCON=0b00100000;
    TMR0=0;
 }
     
      void eeprom_DATA_Clear() {
     eeprom_write(0,0);
     eeprom_write(1,0);
     eeprom_write(2,0);
     eeprom_write(3,0);
    }



      void main() {
      TRISB=0; PORTB=0; TRISD=15; PORTD=0;
      TRISC=0; PORTC=0; TRISA=0; PORTA=0;
      adcon1=0x06;
      OPTION_REG=0x81;  INTCON=0b10100000;
      TMR0=217;
     //*******************************************//
      COPY_SEGMENT1 = eeprom_read(0);delay_ms(5);
      COPY_SEGMENT2 = eeprom_read(1);delay_ms(5);
      COPY_SEGMENT3 = eeprom_read(2);delay_ms(5);
      COPY_SEGMENT4 = eeprom_read(3);delay_ms(5);  //eeprom_read DATA  read && write
      SEGMENT1  = COPY_SEGMENT1 ;
      SEGMENT2  = COPY_SEGMENT2 ;
      SEGMENT3  = COPY_SEGMENT3 ;
      SEGMENT4  = COPY_SEGMENT4 ;
     //*****************************************//
      //........................................................................................................
         BUZZER
        while(1){
        loop:
        if( PORTD.F2==1     ){button START=1; X2=0; LED_OFF    TEMER2}
        if( PORTD.F1==1     ){ X++;                           TEMER2}
        if(X==1&&PORTD.F0==1){ SEGMENT1++; COPY_SEGMENT1++; eeprom_write(0,COPY_SEGMENT1);     TEMER2 } // Select the numbers and display them on (7SEGMENT1 )
        if(X==2&&PORTD.F0==1){ SEGMENT2++; COPY_SEGMENT2++; eeprom_write(1,COPY_SEGMENT2); TEMER2 } // Select the numbers and display them on (7SEGMENT2 )
        if(X==3&&PORTD.F0==1){ SEGMENT3++; COPY_SEGMENT3++; eeprom_write(2,COPY_SEGMENT3); TEMER2 } // Select the numbers and display them on (7SEGMENT3 )
        if(X==4&&PORTD.F0==1){ SEGMENT4++; COPY_SEGMENT4++; eeprom_write(3,COPY_SEGMENT4); TEMER2 } // Select the numbers and display them on (7SEGMENT4 )
       //......................................................................
        if(X==1){ LED_SEGMENT1 } // To select a screen LED (1)
        if(X==2){ LED_SEGMENT2 } // To select a screen LED (2)
        if(X==3){ LED_SEGMENT3 } // To select a screen LED (3)
        if(X==4){ LED_SEGMENT4 } // To select a screen LED (4)
        if(X>4 ){X=0; LED_OFF }
        OUT_LOOP=0;
      //......................................................................
        PORTC.F5=1;
        if( X2==1){X3++;delay_ms(1); }
        if( X3==30){ PORTC.F4=1; }
        if( X3==60){ PORTC.F4=0; }
        if( X3>60){ X3=0; }
      //......................................................................
      //===================
       Clear_the_screens // Clear_the_screens
      //===================




        if(START==1)  // Start the counter
        
        {  SEGMENTS_OFF  PORTC.F5=0;
        
           while(OUT_LOOP==0)
           {
           
           if(CONTER==0){ TEMER_conter SEGMENT4++;}
          //....................................
           if( SEGMENT4>9 ){SEGMENT3++; SEGMENT4=0;   }
           if( SEGMENT3>9 ){SEGMENT2++; SEGMENT3=0;   }
           if( SEGMENT2>9 ){SEGMENT1++; SEGMENT2=0;   }
          //....................................
          
           if(PORTD.F2==1){ button   OUT_LOOP=1;}
           
           //....................................
            Test_the_values_of_screens  // Test the screen numbers and exit the program
           //....................................
        
          }
        
        }





   }
}
 unsigned short mask(unsigned short num){
               switch (num){
 case 0 : return 0xC0;
 case 1 : return 0xF9;
 case 2 : return 0xA4;
 case 3 : return 0xB0;
 case 4 : return 0x99;
 case 5 : return 0x92;
 case 6 : return 0x82;
 case 7 : return 0xD8;
 case 8 : return 0x80;
 case 9 : return 0x90;
 case 10 : return 0x90;
}
}



المشروع كامل للتحميل .. من هنا https://drive.google.com/file/d/0Bxg...ew?usp=sharing


لو هناك حاجه لشرح أو استفسار تفضل وأطلب ..

تحياتي لك ..

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

wisama
:: مهندس متواجد ::
تاريخ التسجيل: Sep 2007
المشاركات: 58
نشاط [ wisama ]
قوة السمعة:0
قديم 06-07-2017, 06:19 PM المشاركة 3   
افتراضي


يعجز لساني عن الشكر لك أخي ولا أملك إلا الدعوة لك بظهر الغيب .

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب عبدالله حجازى ( أعجبته المشاركة )
إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 01:43 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025