السلام عليكم ورحمة الله وبركاته..
واجهتني مشكلة في عمل الــ 7-SEGMENT حيث اني عملت البرنامج بالكامل وبقي معي هذه المعضلة
الـ 7-SEGMENT هي COMMON CATHODE واخذت لها لتشغيل الطرف السالب البورتات الاربع للــ PORTB
الذي يحدث معي ان بورت RB4 و RB5 تبقيان توصلان التيار وبالتالي تبقى الوحدة الخاصة بهما مضاءة
اما الاخريتنان فتعملان وفق البرنامج بلاشائبة ..
هل سبب ذلك انهما ANALOG ؟
الكود كالتالي ..
كود:
unsigned int choose_digit(int a) //Variable for converting Decimal to 7 Segment format
{
switch(a) //A B C D E F G dP, F B G C D E A
{ // 0 5 3 6 2 1 4 7, 6 5 4 3 2 1 0
case 1: return 0B00101000; // 0x06;
case 2: return 0B00110111; // 0x5B;
case 3: return 0B00111101; // 0x4F;
case 4: return 0B01111000; // 0x66;
case 5: return 0B01011101; // 0x6D;
case 6: return 0B01011111; // 0x7D;
case 7: return 0B01101001; // 0x27;
case 8: return 0B01111111; // 0x7F;
case 9: return 0b01111101;
default: return 0B01101111; // 0x3F;
}
}
void seven_segment(int number) {
PORTC = choose_digit(number%10);
PORTB.F4 = 0;
delay_ms(500);
PORTB.F4 = 1;
PORTC = choose_digit((number/10)%10);
PORTB.F6 = 0;
delay_ms(500);
PORTB.F6 = 1;
PORTC = choose_digit(((number/10)/10)%10);
PORTB.F7 = 0;
delay_ms(500);
PORTB.F7 = 1;
PORTC = choose_digit((number/1000));
PORTB.F5 = 0;
delay_ms(500);
PORTB.F5 = 1;
}
void main()
{
int i=0;
int s = 0;
CM1CON0 = 7; // To turn off comparators
// ADCON1 = 0X00;
ADCON0 = 0x06; // To turn off analog to digital converters
TRISB = 0x00; //PORT B as Output
TRISC = 0x00; //PORT C as Output
PORTB = 0XFF;
delay_ms(20);
while(1)
{
// if(s==9999){s=0;} //0 to 9999 counter
// else{s++;}
// for(i=0;i<15;i++)
// {
// delay_ms(3);
seven_segment(22);
// }
}
}