السلام عليكم ورحمه الله ..
الحمد لله لقد تم الإنتهاء من كتاية برنامج العداد ..
اليك صورة للمشروع
هذا العداد هو عداد تصاعدى أو تنازلى حسب اختيارك للعداد ..
يوجد مفاتيح مكتوب أمام كل مفتاح الوظيفة المخصصة لة ..
مثال أو شرح للعداد ..
من خلال مفتاحان ""
أختار العدد "" يمكنك أختيار رقم ما بين
( 1 ) أو ( 99 ) وبعد ذالك أضغط على مفتاح ""
تصاعدى "" وتلاحظ أن العداد قد تم تصفير الشاشات وبدأ فى العد التصاعدى وأيضااا يوجد
لدات للدالة على حالة العداد لاحظ الصورة .. وعند وصول العداد الى الرقم اللذى تم ادخالة تلاحظ وقوف العداد وأضاء ليد : أنتهى الوقت .. وللعد مرة أخرى بنفس الأرقام المدخلة أضغط على مفتاح ""
تضاعدى " ليبدأ العد من جديد ..
وهناك مفتاح "
تصفير العداد " لكى تبدل حالة العداد من تصاعدى الى تنازاى أضغط على "
تصفير " العداد .. ولأختيار عداد تنازلى يبدأ من رقم
( 99 ) الى ( 00 ) أضغط على "
تنازلى " ولاحظ عندما يصل العداد الى
( 00 ) يضئ ليد أنتهى الوقت ..
واليك كود البرنامج ..
كود:
// ENG ABDALLA HYGAZY //
// TEMR ++ 7SEGMENT //
// DATDA / 2016 / 11 / 20 //
#define LED_OF PORTD.F0=0;
unsigned short mask(unsigned short num);
unsigned int SEGMENT1=0,SEGMENT2=0,SEGMENT3=0,SEGMENT4=0,X=0;
unsigned int SEGcopy1=0,SEGcopy2=0;
void interrupt(){
porta=1;
portb=mask(SEGMENT1);
delay_ms(2);
porta=2;
portb=mask(SEGMENT2);
delay_ms(2);
INTCON=0b00100000;
TMR0=0;
}
//-------------------------------------------------------------//
void SEGMENT_up() {
SEGMENT1=0; SEGMENT2=0; LED_OF PORTD.F3=0;
while(X==0){
if( PORTC.F2==1 ) { delay_ms(100); X=1; }
PORTD.F4=1; PORTD.F1=1;
delay_ms(100);
SEGMENT2++;
if( SEGMENT2==10){SEGMENT2=0;SEGMENT1++; }
if( SEGMENT1==10){SEGMENT1=0; }
if( SEGMENT1&&SEGMENT2==10)
{ SEGMENT1=0; SEGMENT2=0; }
if(SEGMENT2==SEGcopy2&&SEGMENT1==SEGcopy1){PORTD.F0=1; X=1; }
}
}
//-------------------------------------------------------------------//
void SEGMENT_dwen() {
SEGMENT2=9; SEGMENT1=9; X=0; LED_OF PORTD.F3=0;
while(X==0){
if( PORTC.F2==1 ) { delay_ms(100); X=1; }
PORTD.F4=1; PORTD.F2=1;
delay_ms(100);
SEGMENT2--;
if( SEGMENT2<1){SEGMENT2=9;SEGMENT1--; }
if( SEGMENT1<1){SEGMENT1=9; }
if( SEGMENT1==9&&SEGMENT2==9)
{ SEGMENT1=9; SEGMENT2=9; PORTD.F0=1; X=1; }
}
}
//------------------------------------------------------//
void main() {
OPTION_REG=0b10000101;
INTCON=0b10100000;
TMR0=217;
TRISB=0; PORTB=0; TRISD=0; PORTD=0;
TRISC=255; PORTC=0; TRISA=0; PORTA=0;
while(1){
PORTD.F4=0; PORTD.F3=1; PORTD.F1=0; PORTD.F2=0;
if( PORTC.F3==1 ) { delay_ms(100); SEGMENT_up(); X=0; }
if( PORTC.F4==1 ) { delay_ms(100); SEGMENT_dwen();X=0; }
if(PORTC.F0==1){SEGMENT2++; delay_ms(100);
if( SEGMENT2==10){SEGMENT2=0;SEGMENT1++; }
if( SEGMENT1==10){SEGMENT1=0; }
if( SEGMENT1&&SEGMENT2==10)
{ SEGMENT1=0; SEGMENT2=0; }
SEGcopy1=SEGMENT1; SEGcopy2=SEGMENT2;
}
//****************************************//
if(PORTC.F1==1){
delay_ms(100);
SEGMENT2--;
if( SEGMENT2<1){SEGMENT2=9;SEGMENT1--; }
if( SEGMENT1<1){SEGMENT1=9; }
if( SEGMENT1&&SEGMENT2==0)
{ SEGMENT1=9; SEGMENT2=9; }
SEGcopy1=SEGMENT1; SEGcopy2=SEGMENT2;
}
//*******************************************//
if(PORTC.F5==1){SEGcopy1=SEGMENT1=0; SEGcopy2=SEGMENT2=0; X=0; LED_OF }
}
}
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;
}
}
وايضااا المشروع كامل للتحميل ..
رابط التحميل ..
https://drive.google.com/open?id=0Bx...3hZUHBpSzlWS28
تحياتى لك ..
لو محتاج أى توضيح لا تتردد ..
بالتوفيق