الحمدلله
اظنني وجدت الحل
لقد قمت بنقل امر القراءة من الذاكرة الى داخل اللوب في الاخير
هذه صورة المشروع
الزر الواسط لتنقيص الرقم ، الزر على اليمني لزيادة الرقم ، الزر على الشمال لتشغيل الداره
يجب ان يكون الجمبر JP1 مغلق ON والجمبر JP2 مفتوح OFF حتى تشتغل الدائره
حيث كان الكود صاحب المشكلة هكذا
كود:
const unsigned short DIGIT[]={63,6,91,79,102,109,125,7,127,111};
void Display (int Number)
{
PORTA.F1 = 0;
PORTA.F0 = 1;
PORTB = DIGIT [Number%10] ; // لإظهار الآحاد
delay_ms (4) ;
PORTb = 0;
PORTA.F0 = 0 ;
PORTA.F1 = 1 ;
PORTB = DIGIT [Number/10] ; // لإظهار العشرات
delay_ms (4);
PORTb = 0;
}
void init(){
cmcon=0x07;
trisa.f0=0; trisa.f1=0;
porta.f0=0; porta.f1=0;
trisb = 0; portb = 0;
trisa.f2 =trisa.f3 =trisa.f4 =trisa.f5 =trisa.f6 =1;
trisa.f7=0; porta.f7=0;
}
void main ()
{
unsigned short N = 0 ;
int Number = 0 ,eep,read;
init();
eep=eeprom_read(0x2);
Number=eep;
loop:
{
Display (Number);
if(porta.f2==0){ while(porta.f2==0)Display (Number);
Number++; if(Number==100)Number=0;
eeprom_write(0x2,Number);
}
if(porta.f3==0){ while(porta.f3==0)Display (Number);
Number--; if(Number<0) Number=99;
eeprom_write(0x2,Number);
}
if(porta.f4==0&&porta.f5==1&&porta.f6==0){ while(porta.f4==0) Display (Number);
read=eeprom_read(0x2);
porta.f7=1;
Number=read;
while(Number>0){ Number--;
for(N=0;N<125;N++) {
Display (Number);
if(porta.f4==0){while(porta.f4==0){Display(Number);}
porta.f7=0;
Number=eeprom_read(0x2);
Display(Number);
goto loop;
}
}
}
porta.f7=0;
read=eeprom_read(0x2);
Number=read;
Display(Number);
}
} goto loop;
}
ثم اصبح هكذا بعد التحويل
كود:
const unsigned short DIGIT[]={63,6,91,79,102,109,125,7,127,111};
void Display (int Number)
{
PORTA.F1 = 0;
PORTA.F0 = 1;
PORTB = DIGIT [Number%10] ; // áÅÙåÇÑ ÇáÂÍÇÏ
delay_ms (4) ;
PORTb = 0;
PORTA.F0 = 0 ;
PORTA.F1 = 1 ;
PORTB = DIGIT [Number/10] ; // áÅÙåÇÑ ÇáÚÔÑÇÊ
delay_ms (4);
PORTb = 0;
}
void init(){
cmcon=0x07;
trisa.f0=0; trisa.f1=0;
porta.f0=0; porta.f1=0;
trisb = 0; portb = 0;
trisa.f2 =trisa.f3 =trisa.f4 =trisa.f5 =trisa.f6 =1;
trisa.f7=0; porta.f7=0;
}
void main ()
{
unsigned short N = 0 ;
int Number = 0 ,eep,read;
init();
loop:
{
Display (Number);
if(porta.f2==0){ while(porta.f2==0)Display (Number);
Number++; if(Number==100)Number=0;
eeprom_write(0x2,Number);
}
if(porta.f3==0){ while(porta.f3==0)Display (Number);
Number--; if(Number<0) Number=99;
eeprom_write(0x2,Number);
}
if(porta.f4==0&&porta.f5==1&&porta.f6==0){ while(porta.f4==0) Display (Number);
read=eeprom_read(0x2);
porta.f7=1;
Number=read;
while(Number>0){ Number--;
for(N=0;N<125;N++) {
Display (Number);
if(porta.f4==0){while(porta.f4==0){Display(Number);}
porta.f7=0;
Number=eeprom_read(0x2);
Display(Number);
goto loop;
}
}
}
porta.f7=0;
read=eeprom_read(0x2);
Number=read;
Display(Number);
}
eep=eeprom_read(0x2);
Number=eep;
} goto loop;
}
هذا الكود الاخير اشتغل معي على الواقع طبيعي
الحمدلله
الحمدلله
الحمدلله رب العالمين
يبقى مع الان ان اعمل له زر رابع لعمل سليب sleep للبرنامج للحفاظ على الطاقة (عمل اطفاء وتشغيل للداره)
واعتقد لابد من عمل مقاطعة فيها امر سليب . وهذا امر لا اعرفه
والله الموفق
ارجو المساعدة بشرح الامر سليب والمقاطعة (المقاطعة اعرفها قليلا)
وشكرا جزيلا لكل من ساعدني وشجعني حيث كان لهم الفضل بعد الله فيما وصلت اليه.