بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته
اخى عبد الله حضرتك قلت ان الاجابة لم تنفع , هل السؤالين اجابتهم خطأ؟
مبدئيا اجابة السؤال الثانى سليمة و مجربة , و ممكن ترفع الكود لنراجعه مع بعض .
اما السؤال الاول ان شاء الله اجربه و ارفع لك الكود مع العلم انه ليس به اخطاء .
و ما توفيقى الا بالله
ربنا لا تجعلنا فتنة للقوم الظالمين و ارنا فيهم اية
|
اشكرك على اهتمامك اخى الكريم ..
بالنسبه للتجربه ... الإبروم ... انا فعلا حاولت حفظ قيمة المتغير فى ابروم ..
واستخدمة الحيلة ..
ان جعلت لكل شاشة مفتاح للذيادة الأرقام .. واستخدمة أمر شرط لكى لا تتعدى رقم الشاشة عن 10 .. بمعنى كل ما الشاشة توصل لرقم 10 امر الشرط يرجعها الى الصفر ... وهذا ليتم حفظها فى احدى ذاكرة الإبروم .... وايضاااا فعلت ذلك مع باقى الشاشات .. وهنا اصى رقم هتوصل لية أى شاشة من الأربعه .. هو ... 9 ... وهنا من السهل حفظهما فى ذاكرة الإبروم .... واستخدمة أوامر شرطيه لأختبار رقم الشاشات .. مثلا لو كانت الشاشة التابعة لخانة الألاف تساوى 5 .. ايذاااا امر الشرط يجعل قيمه متغير مربوت بحالة الشاشة الى 5000 الاف .. لكى يتم اشتخدامه فى حلقة for .... واليك جزئ من الكود للتوضيح ...
كود:
//----- TEMER ( 1 ) TEST ------//
if(a1==1){t4=1000;} if(m1==1){t3=100;} if(e1==1){t2=10;}
if(a1==2){t4=2000;} if(m1==2){t3=200;} if(e1==2){t2=20;}
if(a1==3){t4=3000;} if(m1==3){t3=300;} if(e1==3){t2=30;}
if(a1==4){t4=4000;} if(m1==4){t3=400;} if(e1==4){t2=40;}
if(a1==5){t4=5000;} if(m1==5){t3=500;} if(e1==5){t2=50;}
if(a1==6){t4=6000;} if(m1==6){t3=600;} if(e1==6){t2=60;}
if(a1==7){t4=7000;} if(m1==7){t3=700;} if(e1==7){t2=70;}
if(a1==8){t4=8000;} if(m1==8){t3=800;} if(e1==8){t2=80;}
if(a1==9){t4=9000;} if(m1==9){t3=900;} if(e1==9){t2=90;}
t1 = w1 ;
هنا جعلت اوامر الشرط تختبر قيمه الشاشة رقم اربعة .... لو المتغير ( a1 ) = واحد يبقى المتغير ( t4 ) = الف .... طبعااااا انا بستخدم هذة الحيلة لأن ذاكرة الإبروم اقصى رقم تتحمله ... هو 256 ... وهنا عند انقطاع التيار عن الدائرة سيتم قرائة قيمة المتغير a1 من اكرة الإبروم ... وهذا المتغير هو المسؤل عن الشاشة رقم 4 يعنى خانه الألاف لو كان رقم المتغير = مثلا 9 هنا أوامر الشرط الموجودة فى الكود اعلاة ستجعل قيمه المتغير t4 = تسعة الالاف .... وهكذا مع باقى المتغيرات ...
ولكن لو تم قرأة قيم الأربع متغيرات المسؤله عن الأربع شاشات ... وتم جمعهم مع بعض فى متغير واحد .. هيوفر على الكثير .. وهيكون الكود اسهل من هذة الطريقة التى اعمل بها الأن ..
كل الى انا محتاجه هو ..
عندى اربع متغيرات كل متغير مسؤل عن شاشة من الأربع شاشات .. وهنا يوجد شاشة للأحاد وشاشة للعشرات وشاشة للمئات وشاشة للألاف ..
ومثلا كانت قيم الأربع شاشات = 1234 هنا انا محتاج اجمع هذة القيم وانسبها لمتغير جديد ونكون قيمه هذا المتغير ... = 1234 ... أى بمعنى = الف و مئتان و اربعة وثلاثون ... وهذا مهم جداااا لأن هيتم استخدام هذة القيمه فى حلقة for >>
واليك الكود كامل ..
كود:
# include <built_in.h>
#define delay delay_ms(1);
//---------------------------------------------------------------//
unsigned short mask(unsigned short num);
unsigned int segment=1,a1=0,m1=0,e1=0,w1=0,x=0,out1=0,count=0;
unsigned int t1=0,t2=0,t3=0,t4=0,t5=0,start=1,start_redy=0;
unsigned int t6=0,t7=0,t8=0,t9=0,t10=0,t11=0,t12=0,t13=0,t14=0,t15=0;
unsigned int t16=0,t17=0,t18=0,t19=0,t20=0,t21=0,t22=0,t23=0,t24=0,t25,te1=0,te2=0,te3=0,te4=0,te5=0;
//--------------------------------------------------------------------------------------------------------------//
unsigned int te6=0,te7=0,te8=0,te9=0,te10=0,te11=0,te12=0,te13=0,te14=0,te15,te16=0,te17=0,te18=0,te19=0,te20=0;
unsigned int te21=0,te22=0,te23=0,te24=0,te25=0;
//---------------------------------------------------------------------------------------------------------------//
void interrupt(){
porta=1;
portb=mask(w1);
delay_ms(1);
porta=2;
portb=mask(e1);
delay_ms(1);
porta=4;
portb=mask(m1);
delay_ms(1);
porta=8;
portb=mask(a1);
delay_ms(1);
porta=32;
portb=mask(segment);
delay_ms(1);
//**********************************************************//
if( segment==6 ) { segment=1; }
if( w1==10 ) { w1=0; }
if( e1==10 ) { e1=0; }
if( m1==10 ) { m1=0; }
if( a1==10 ) { a1=0; w1=0; e1=0; m1=0; }
/*if( t1==10 ) { t1=0; t2++; }
if( t2==10 ) { t2=0; t3++; }
if( t3==10 ) { t3=0; t4++; }
if( t4==10 ) { t1=0; t2=0; t3=0; t4=0; }*/
//-----------------------------------------------------------//
INTCON=0b00100000;
TMR0=0;
}
//-------------------------------------------------------------------//
// ******************---------------------------******************//
void TEMR_1()
{
for(x=0;x<t1;x++) { delay_ms(1); }
for(x=0;x<t2;x++) { delay_ms(1); }
for(x=0;x<t3;x++) { delay_ms(1); }
for(x=0;x<t4;x++) { delay_ms(1); }
}
//*******************-------------------------**********************//
void TEMR_2()
{
for(x=0;x<t12;x++) { delay_ms(1); }
for(x=0;x<t11;x++) { delay_ms(1); }
for(x=0;x<t10;x++) { delay_ms(1); }
for(x=0;x<t9;x++) { delay_ms(1); }
}
//*******************-------------------------********************//
void TEMR_3()
{
for(x=0;x<16;x++) { delay_ms(1); }
for(x=0;x<15;x++) { delay_ms(1); }
for(x=0;x<14;x++) { delay_ms(1); }
for(x=0;x<13;x++) { delay_ms(1); }
}
//********************-------------------------*******************//
void TEMR_4()
{
for(x=0;x<728;x++) { delay_ms(1); }
for(x=0;x<55;x++) { delay_ms(1); }
for(x=0;x<22;x++) { delay_ms(1); }
for(x=0;x<33;x++) { delay_ms(1); }
}
//******************-------------------------*********************//
void TEMR_5()
{
for(x=0;x<1000;x++) { delay_ms(1); }
for(x=0;x<55;x++) { delay_ms(1); }
for(x=0;x<2;x++) { delay_ms(1); }
for(x=0;x<55;x++) { delay_ms(1); }
}
//********************---------END------------*********************//
//-----------------------------------------------------------------------------------------------------------------------------//
void eeprom_writ()
{
eeprom_write(1,0); delay eeprom_write(2,0 );delay eeprom_write(3,0 );delay eeprom_write(4,0); delay eeprom_write(5,0 );delay
eeprom_write(6,0); delay eeprom_write(7,0 );delay eeprom_write(8,0 );delay eeprom_write(9,0); delay eeprom_write(10,0);delay
eeprom_write(11,0);delay eeprom_write(12,0);delay eeprom_write(13,0);delay eeprom_write(14,0);delay eeprom_write(15,0);delay
eeprom_write(16,0);delay eeprom_write(17,0);delay eeprom_write(18,0);delay eeprom_write(19,0);delay eeprom_write(20,0);delay
eeprom_write(21,0);delay eeprom_write(22,0);delay eeprom_write(23,0);delay eeprom_write(24,0);delay eeprom_write(25,0);delay
eeprom_write(26,0); porte.f0=1;
}
//-----------------------------------------------------------------------------------------------------------------------------//
void intst()
{
OPTION_REG=0b10000101; INTCON=0b10100000;
TMR0=217; adcon1=0x06;
trisb=0; portb=0; trisd=0; portd=0;
trisc=255; portc=0; trisa=0; porta=0;
trise=0; porte=0;
//---------- TEMER ( 1 ) eeprom_read --------------//
w1 =eeprom_read(1 ); e1 =eeprom_read(2 );
m1 =eeprom_read(3 ); a1 =eeprom_read(4 );
//---------------------------------------------------//
//---------- TEMER ( 2 ) eeprom_read --------------//
t5 = eeprom_read(5 ); t6 = eeprom_read(6 );
t7 = eeprom_read(7 ); t8 = eeprom_read(8 );
//---------------------------------------------------//
//---------- TEMER ( 2 ) eeprom_read --------------//
t13 = eeprom_read(9 ); t14 = eeprom_read(10 );
t15 = eeprom_read(11 ); t16 = eeprom_read(12 );
//---------------------------------------------------//
//----- TEMER ( 1 ) TEST ------//
if(a1==1){t4=1000;} if(m1==1){t3=100;} if(e1==1){t2=10;}
if(a1==2){t4=2000;} if(m1==2){t3=200;} if(e1==2){t2=20;}
if(a1==3){t4=3000;} if(m1==3){t3=300;} if(e1==3){t2=30;}
if(a1==4){t4=4000;} if(m1==4){t3=400;} if(e1==4){t2=40;}
if(a1==5){t4=5000;} if(m1==5){t3=500;} if(e1==5){t2=50;}
if(a1==6){t4=6000;} if(m1==6){t3=600;} if(e1==6){t2=60;}
if(a1==7){t4=7000;} if(m1==7){t3=700;} if(e1==7){t2=70;}
if(a1==8){t4=8000;} if(m1==8){t3=800;} if(e1==8){t2=80;}
if(a1==9){t4=9000;} if(m1==9){t3=900;} if(e1==9){t2=90;}
t1 = w1 ;
//---------------------------------------------------------------//
//----- TEMER ( 2 ) TEST ------//
if(t8==1){t8=1000;} if(t7==1){t3=100;} if(t6==1){t2=10;}
if(t8==2){t4=2000;} if(t7==2){t3=200;} if(t6==2){t2=20;}
if(t8==3){t4=3000;} if(t7==3){t3=300;} if(t6==3){t2=30;}
if(t8==4){t4=4000;} if(t7==4){t3=400;} if(t6==4){t2=40;}
if(t8==5){t4=5000;} if(t7==5){t3=500;} if(t6==5){t2=50;}
if(t8==6){t4=6000;} if(t7==6){t3=600;} if(t6==6){t2=60;}
if(t8==7){t4=7000;} if(t7==7){t3=700;} if(t6==7){t2=70;}
if(t8==8){t4=8000;} if(t7==8){t3=800;} if(t6==8){t2=80;}
if(t8==9){t4=9000;} if(t7==9){t3=900;} if(t6==9){t2=90;}
t12 = t5;
//-------------------------------------------------------------//
//----- TEMER ( 3 ) TEST ------//
if(t13==1){t13=1000;} if(t14==1){t14=100;} if(t15==1){t15=10;}
if(t13==2){t13=2000;} if(t14==2){t14=200;} if(t15==2){t15=20;}
if(t13==3){t13=3000;} if(t14==3){t14=300;} if(t15==3){t15=30;}
if(t13==4){t13=4000;} if(t14==4){t14=400;} if(t15==4){t15=40;}
if(t13==5){t13=5000;} if(t14==5){t14=500;} if(t15==5){t15=50;}
if(t13==6){t13=6000;} if(t14==6){t14=600;} if(t15==6){t15=60;}
if(t13==7){t13=7000;} if(t14==7){t14=700;} if(t15==7){t15=70;}
if(t13==8){t13=8000;} if(t14==8){t14=800;} if(t15==8){t15=80;}
if(t13==9){t13=9000;} if(t14==9){t14=900;} if(t15==9){t15=90;}
//-----------------------------------------------------------------//
}
//-----------------------------------------------------------------//
void if_nember()
{
//----- TEMER ( 1 ) TEST ------//
if(a1==1){t4=1000;} if(m1==1){t3=100;} if(e1==1){t2=10;}
if(a1==2){t4=2000;} if(m1==2){t3=200;} if(e1==2){t2=20;}
if(a1==3){t4=3000;} if(m1==3){t3=300;} if(e1==3){t2=30;}
if(a1==4){t4=4000;} if(m1==4){t3=400;} if(e1==4){t2=40;}
if(a1==5){t4=5000;} if(m1==5){t3=500;} if(e1==5){t2=50;}
if(a1==6){t4=6000;} if(m1==6){t3=600;} if(e1==6){t2=60;}
if(a1==7){t4=7000;} if(m1==7){t3=700;} if(e1==7){t2=70;}
if(a1==8){t4=8000;} if(m1==8){t3=800;} if(e1==8){t2=80;}
if(a1==9){t4=9000;} if(m1==9){t3=900;} if(e1==9){t2=90;}
t1 = w1 ;
//-------------------------------------------------------------//
}
void if_nember_2()
{
//----- TEMER ( 2 ) TEST ------//
if(t8==1){t9=1000;} if(t7==1){t10=100;} if(t6==1){t11=10;}
if(t8==2){t9=2000;} if(t7==2){t10=200;} if(t6==2){t11=20;}
if(t8==3){t9=3000;} if(t7==3){t10=300;} if(t6==3){t11=30;}
if(t8==4){t9=4000;} if(t7==4){t10=400;} if(t6==4){t11=40;}
if(t8==5){t9=5000;} if(t7==5){t10=500;} if(t6==5){t11=50;}
if(t8==6){t9=6000;} if(t7==6){t10=600;} if(t6==6){t11=60;}
if(t8==7){t9=7000;} if(t7==7){t10=700;} if(t6==7){t11=70;}
if(t8==8){t9=8000;} if(t7==8){t10=800;} if(t6==8){t11=80;}
if(t8==9){t9=9000;} if(t7==9){t10=900;} if(t6==9){t11=90;}
//------------------------------------------------------------//
}
void if_nember_3()
{
//----- TEMER ( 3 ) TEST ------//
if(t13==1){t13=1000;} if(t14==1){t14=100;} if(t15==1){t15=10;}
if(t13==2){t13=2000;} if(t14==2){t14=200;} if(t15==2){t15=20;}
if(t13==3){t13=3000;} if(t14==3){t14=300;} if(t15==3){t15=30;}
if(t13==4){t13=4000;} if(t14==4){t14=400;} if(t15==4){t15=40;}
if(t13==5){t13=5000;} if(t14==5){t14=500;} if(t15==5){t15=50;}
if(t13==6){t13=6000;} if(t14==6){t14=600;} if(t15==6){t15=60;}
if(t13==7){t13=7000;} if(t14==7){t14=700;} if(t15==7){t15=70;}
if(t13==8){t13=8000;} if(t14==8){t14=800;} if(t15==8){t15=80;}
if(t13==9){t13=9000;} if(t14==9){t14=900;} if(t15==9){t15=90;}
}
//------------------------------------------------------------//
//----( void main ) ----//
void main(){
intst();
if_nember();
//******---- segment1 --*******/
if(segment ==1) { while(out1==0)
{
if_nember();
if( portc.f3==0 ) { segment=2; out1=1; delay_ms(700);}
if( portc.f0==0 ) { w1=0; e1=0; m1=0; a1=0; eeprom_writ(); delay_ms(300);}
if( portc.f1==0 ) { w1++; t1++; eeprom_write(1,w1); delay_ms(1); delay_ms(300);}
if( portc.f4==0 ) { e1++; t2++; eeprom_write(2,e1); delay_ms(1); delay_ms(300);}
if( portc.f5==0 ) { m1++; t3++; eeprom_write(3,m1); delay_ms(1); delay_ms(300);}
if( portc.f6==0 ) { a1++; t4++; eeprom_write(4,a1); delay_ms(1); delay_ms(300);}
}
}
//-------------------------------------------------------------------------------------//
w1=0; m1=0; e1=0; a1=0; out1=0; x=0;
if(segment ==2) { while(out1==0)
{
if_nember_2();
if( portc.f3==0 ) { segment=3; out1=1; delay_ms(700);}
if( portc.f0==0 ) { w1=0; e1=0; m1=0; a1=0; eeprom_writ(); delay_ms(300);}
if( portc.f1==0 ) { w1++; t5++; eeprom_write(5,t5); delay_ms(1); delay_ms(300);}
if( portc.f4==0 ) { e1++; t6++; eeprom_write(6,t6); delay_ms(1); delay_ms(300);}
if( portc.f5==0 ) { m1++; t7++; eeprom_write(7,t7); delay_ms(1); delay_ms(300);}
if( portc.f6==0 ) { a1++; t8++; eeprom_write(8,t8); delay_ms(1); delay_ms(300);}
}
}
//--------------------------------------------------------------------------------------//
w1=0; m1=0; e1=0; a1=0; out1=0; x=0;
if(segment ==3) { while(out1==0)
{
if_nember_3();
if( portc.f3==0 ) { segment=3; out1=1; delay_ms(700);}
if( portc.f0==0 ) { w1=0; e1=0; m1=0; a1=0; eeprom_writ(); delay_ms(300);}
if( portc.f1==0 ) { w1++; t16++; eeprom_write(12,t16); delay_ms(1); delay_ms(300);}
if( portc.f4==0 ) { e1++; t15++; eeprom_write(11,t15); delay_ms(1); delay_ms(300);}
if( portc.f5==0 ) { m1++; t14++; eeprom_write(10,t14); delay_ms(1); delay_ms(300);}
if( portc.f6==0 ) { a1++; t13++; eeprom_write(9,t13); delay_ms(1); delay_ms(300);}
}
}
//--------------------------------------------------------------------------------------//
while(1)
{
portd = 128; segment=1; TEMR_1();
portd = 64; segment=2; TEMR_2();
portd = 32; segment=3; TEMR_3();
portd = 16; segment=4; TEMR_4();
portd = 8; segment=5; TEMR_5();
}
}
//**********************************----------END-----------*****************************************//
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 0xF8;
case 8 : return 0x80;
case 9 : return 0x90;
}
}
//********** ^^---------- END PROGRM --------^^ ***************//
طبعااااا انا هنا استخدمة عدد كبير من المتغيرات .. ولو اقدرة اجمع قيم الأربع متغيرات فى متغير جديد .. هكون حليت المشكلة ....
تحياتى لك وشكراااا على اهتمامك ....