السلام عليكم ، عيدكم مبارك
أريد أعرف كيف أجعل 7segment تتوقف عن العد و لا تنطفئ عند الضغط على الزر الأعلى و حين الضغط على الزر السفلي تزيد بعدد واحد ، البرمجة ب mikroc

|
السلام عليكم ورحمه الله ..
أخى تم كتابة الكود حسب الوظائف التاليه ..
1__ عند تشغيل الدائرة تبدأفى العد التصاعدى وكلما وصلت الى رقم " 9 " تبدأ العد من جديد ..
2__ عند الضغط على المفتاح الأعى يتوقف العداد .. وعند الضغط مرة أخى على المفتاح الأعلى يزيد العد بواحد عند كل ضغطه ..
3__ المفتاح الأسفل عند الضغط عليه .. ينقص العداد .. بواحد عن كل ضغطه .. ولاكن المفتاح الأسفل لا يعمل عند بدايه تشغيل البرنامج .. يجب الضغط على المفتاح الأعلى ليتوقف العداد .. ويمكن وبعد يمكنك زيادة العداد أو النقصا بكلا المفتاحين الأعلى والأسفل ..
4__ أيضااا تم أضافة مفتاح ثالث .. لتفعيل العداد ليبدأ العد فى حال كان متوقف ..
والمفتاح الثالث تم ربطة مع البن رقم " 5 " فى البورت " D
"
والأن مع الكود ........
كود:
// ENG / ABDALLA HYGAZY //
unsigned short mask(unsigned short num);
unsigned int s1=0,loop=0,loop1=0;
void interrupt(){
INTCON=0b00100000;
TMR0=0;
//******************//
portb=mask(s1);
if( PORTD.F6==0){ loop=1; }
if( s1==10 ){ s1=0; }
if( s1==0 ){ s1=0; }
}
//************************************//
void main() {
adcon1=0x06;
OPTION_REG=0x81;
INTCON=0b10100000;
TMR0=217;
TRISB=0; PORTB=0;
TRISD=224; PORTD=0;
//**********************************//
loop:
loop1=0;
while(loop==0)
{
delay_ms(500);
s1++;
}
//**********************************//
loop1=1;
loop=0;
while(1)
{
if( PORTD.F7==0 ) { s1--; delay_ms(150); }
if( PORTD.F6==0 ) { s1++; delay_ms(150); }
if( PORTD.F5==0 ) { goto loop; delay_ms(150); }
}
}
//************************************//
unsigned short mask(unsigned short num){
switch (num){
case 0 : return 0x3F;
case 1 : return 0x06;
case 2 : return 0x5B;
case 3 : return 0x4F;
case 4 : return 0x66;
case 5 : return 0x6D;
case 6 : return 0x7D;
case 7 : return 0x27;
case 8 : return 0x7F;
case 9 : return 0x6F;
}
}
//*****************------- END ------********************//
تحياتى لك وبالتوفيق