|
الاخوة الخبراء
برجاء افادتنا عن دائرة اليكترونية تقوم بالعد الى غاية 100
ويمكن برمجتها لعدد معين 50 مثلا أو 60 ثم تعطي اشارة رست
ثم تعود للعد من جديد .
طريقة العد تأتيها اشارة من حساس ضوئي تمر امامه اشياء ويتم عدها بالدائرة
.
|
دة نظام عداد .. كنت مصممه لماكينة قطاعة الخبز .. وهو يعد تصاعدى ... ويمكنك اختيار رقم معين يقف عندة العداد وايضاااا يوقف الأله .. أو المحرك لخط الإنتاج ... وايضاااا يحتفظ بالأرقام اللتى عدها فى حين انقطاع التيار .. وعند رجوع التيار يكمل العد من حيث وقف ...
اليك صورة عامة للنظام والدائرة ..
ودة الكود الخاص بالدائرة ..
كود:
unsigned short mask(unsigned short num);
unsigned int a1=0,m1=0,e1=0,w1=0,k1=0;
//----------------------------------------------------------------------------------//
void interrupt(){
portb=1;
portd=mask(a1);
delay_ms(1);
portb=2;
portd=mask(m1);
delay_ms(1);
portb=4;
portd=mask(e1);
delay_ms(1);
portb=8;
portd=mask(w1);
delay_ms(1);
portb=16;
portd=mask(k1);
delay_ms(1);
INTCON=0b00100000;
TMR0=0;
}
//----------------------------------------------------------------------------------//
#define D9 porte.f2=1; delay_ms(200); porte.f2=1;
#define D8 porta.f0=1; delay_ms(300); porta.f0=0;
#define D7 porte.f1=1;delay_ms(1500);porte.f1=0;delay_ms(500);
#define D6 porte.f1=1;delay_ms(40);porte.f1=0;
#define D5 for(z=0;z<3;z++){porte.f1=1;delay_ms(350); porte.f1=0;delay_ms(250);}
#define D4 porte.f1=0;
#define D3 for(x=0;x<20;x++){ porte.f1=1;delay_ms(60);porte.f1=0;delay_ms(60); }
#define D2 porte.f1=1;delay_ms(70);porte.f1=0;
#define D1 porte.f1=1;delay_ms(120);porte.f1=0;delay_ms(90);
#define D0 a1=0;for(m=0;m<15;m++){ D2 }
/*unsigned short byts = 255;
unsigned short get_byts;
char byts_get[255];*/
//---------------------ÏÇáÉ ÇáÈÑäÇãÌ ÇáÑÃíÓíÉ---------------------------------------//
void main(){
int m=0;
int x=0;
int k=0;
int z=0;
OPTION_REG=0b10000101;
INTCON=0b10100000;
TMR0=217;
trisb=0; portb=0;
trisd=0; portd=0;
trisc=1; portc=0;
trisa=0; porta=0;
trise=0; porte=0;
/*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);*/
//--------------------------------------------------------------------------------//
a1 = eeprom_read(0);
m1 = eeprom_read(1);
e1 = eeprom_read(2);
w1 = eeprom_read(3);
k1 = eeprom_read(4);
for(;;){
if(portc.f5==1){D3 goto start;}
if(a1>1){D5}
if(a1==0){D1 delay_ms(400);goto loop;}
if(portc.f5==1){D0 goto loop;}
if(portc.f6==1){D5 a1=0,m1=0,e1=0,w1=0,k1=0;
eeprom_write(0,0); eeprom_write(1,0);
eeprom_write(2,0); eeprom_write(3,0);
eeprom_write(4,0); goto loop;
//----------------------------------------------------------------------------------//
}
/*else a1>1; goto loop;*/
}
//-------------ÝäßÔä ÇÎÊÈÇÑ ãÝÊÇÍ ÊÔÛíá ÇáÈÑäÇãÌ-----------------------------------//
D4
loop:
for(;;){
if(portc.f5==1){D3 goto start;
}
}
//-----------------------------------------------------------------------------------//
/*for(x=0;x<15;x++){porte.f1=1;delay_ms(30); porte.f1=0;delay_ms(30); }*/
start:
D4
porta.f0=1;
//----- ÝäßÔä ÚÏÇÏ ÊÕÇÚÏì ãÚ ÚÝÙ Þíã ÇáãÊÛíÑÇÊ Ýì ÐÇßÑÉ ÇáÑæã --------------------//
for(;;){
if(portc.f4==1){D9 D8 while(1){if(portc.f4==0){ a1++; eeprom_write(0,a1);goto start; }}}
if(a1==10){ m1++;eeprom_write(1,m1) ;a1=0;delay_ms(1);} /*eeprom_write //ÇãÑ ÇáßÊÇíÉ Úáì ÇáÑæã*/
if(m1==10){ e1++;eeprom_write(2,e1) ;delay_ms(1);m1=0;}
if(e1==10){ w1++;eeprom_write(3,w1) ;delay_ms(1);e1=0;} /*m1 = eeprom_read(0);//ÇãÑ ÇáÞÑÃÉ ãä ÇáÑæã*/
if(w1==10){ k1++;eeprom_write(4,k1) ;delay_ms(1);w1=0;}
if(k1==10){ a1=0, m1=0, e1=0, w1=0, k1=0;}
//--------- ÊÕÝíÑ ÐÇßÑÉ ÇáÑæã --------------------------------------------------//
//if(a1==0,m1==5){D6;}
if(portc.f6==1){D0 delay_ms(3000); goto test; test: if(portc.f6==1){ // ÊÕÝíÑ ÇáÚÏÇÏÇÊ áÈÏÁ ÇáÚÏ ãä ÌÏíÏ
a1=0,m1=0,w1=0,e1=0,k1=0;
eeprom_write(2,0); eeprom_write(3,0);
eeprom_write(1,0); eeprom_write(0,0);
eeprom_write(4,0); porta.f0=0; goto loop; }}
//----------------------ÝäßÔä áÊÔÛíá ÇáãæÊæÑ æÇíÞÇÝÉ -----------------------------//
if(portc.f5==1){delay_ms(220);k++;}
if(k==2){delay_ms(220);porta.f0=1;}
if(k==1){delay_ms(220);porta.f0=0;}
if(k==3){k=0;}
//----------------------------------------------------------------------------------//
}
}
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;
}
}
تحياتى وانا متابع لو فى أى استفسار..