بارك الله فيك اخي ولدي طلب اذا أمكن أن تتكرم به علي أريد العداد يعد بالضغط على زر بحيث إذا ضغطت عليه يعد واحد واذا ضغطت مرة أخرى يعد اثنان وهكذا مع جزيل الشكر والتقدير .
|
السلام عليكم ورحمه الله ..
تحت أمرك أخي تفضل اليك التعديل ..
تم اضافه عدد 2 مفتاح ..
المفتاح k6 هو لتبديل حاله العداد "" يدوي "" أو "" اوتماتيك "" ويوجد عدد 2 ليد لتخبرك بحاله العداد قبل التشغيل أن كان عداد يدوي أو اتوماتيكي ..
أيضاا يوجد مفتاح وهو k5 هذا المفتاح كل ضغطه عليه يعد العداد بواحد ..
ملحوظه عند الضغط علي مفتاح k5 ينتظر العداد لرفع يدك من علي المفتاح لكي يبدأ بزياده الأرقام بواحد ..
لو تحب تعديل أخر اخبرني ..
اليك صورة للتعديل الجديد ..
[IMG]

[/IMG]
واليك كود البرنامج المعدل ..
كود:
// 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;
unsigned int COPY1=0,COPY2=0,COPY3=0,COPY4=0,X4=0,X5=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; COPY1=0; COPY2=0; COPY3=0; COPY4=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(130);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);
eeprom_write(4,0);
eeprom_write(5,0);
eeprom_write(6,0);
eeprom_write(7,0);
}
//*******************************************//
void main() {
TRISB=0; PORTB=0; TRISD=63; 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 ;
X4 = eeprom_read(8);delay_ms(5);
//*****************************************//
//........................................................................................................
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(PORTD.F5==1){ X4++; eeprom_write(8,X4); delay_ms(15); }
if(X4==1 ){ PORTC.F6=1; PORTC.F7=0; }
if(X4==0 ){ PORTC.F7=1; PORTC.F6=0; }
if(X4>1 ){ X4=0; }
if(START==1 ) // Start the counter
{ SEGMENTS_OFF PORTC.F5=0; SEGMENT4 = COPY1 = eeprom_read(4);delay_ms(5); SEGMENT3 = COPY2 = eeprom_read(5);delay_ms(5);
SEGMENT2 = COPY3 = eeprom_read(6);delay_ms(5); SEGMENT1 = COPY4 = eeprom_read(7);delay_ms(5);
while(OUT_LOOP==0)
{
SEGMENT4 = COPY1; SEGMENT3 = COPY2; SEGMENT2 = COPY3; SEGMENT1 = COPY4;
if(CONTER==0 && X4==0){ TEMER_conter COPY1++; eeprom_write(4,COPY1); delay_ms(2); }
//...............................................................................
if(PORTD.F4==1&&X4==1){ delay_ms(15);while(PORTD.F4==1){} COPY1++; eeprom_write(4,COPY1); delay_ms(2); }
//....................................
if( COPY1>9 ){COPY2++; eeprom_write(5,COPY2); delay_ms(2); COPY1=0; }
if( COPY2>9 ){COPY3++; eeprom_write(6,COPY3); delay_ms(2); COPY2=0; }
if( COPY3>9 ){COPY4++; eeprom_write(7,COPY4); delay_ms(2); COPY3=0; }
//....................................
if(PORTD.F2==1){ button delay_ms(15); OUT_LOOP=1; START=0; goto loop; }
//....................................
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
تحياتي وبالتوفيق أخي