تم إنشاء الكود
لكن
هناك مشكلة لم أستطع أن أفهم لماذا !!!!
كود:
void main()
{
unsigned char x,i;
char compt[] = {192,249,164,176,153,146,130,248,128,144};
TRISB=0XFF; // initialisation du port B en entrée
TRISC=0;TRISd=0xF0; //initialisation du port C en sortie
ADCON1=0X06;
PORTC=0; PORTD=0;
while(1){ for (x=0;x<10000;x++)
{
for (i=0;i<3;i++)
{portd=1; portc=compt[x%10]; delay_ms(5) ;
portd=2; portc=compt[x/10]; delay_ms(5) ;
portd=4; portc=compt[x/100]; delay_ms(5) ;
portd=8; portc=compt[x/1000]; delay_ms(5) ;
}
}
}}
SImulation file
http://www.gulfup.com/?a1zYAL
|
السلام عليكم
تفضل أخي هذا الكود
كود:
unsigned char i;
unsigned int x;
char compt[] = {192,249,164,176,153,146,130,248,128,144};
void main()
{
TRISB=0XFF; // initialisation du port B en entrée
TRISC=0;TRISd=0xF0; //initialisation du port C en sortie
ADCON1=0X06;
PORTC=0xFF;// off seven segment for CA
PORTD=0;
while(1){ for (x=0;x<10000;x++)
{
for (i=0;i<1;i++)
{
portd=1;portc=compt[x%10]; delay_ms(5) ;portc=0xFF; // 1234%10=4
portd=2; portc=compt[x%100/10]; delay_ms(5) ;portc=0xFF; //1234%100=34/10=3
portd=4; portc=compt[x%1000/100]; delay_ms(5) ;portc=0xFF; //1234%1000=234 /100=2
portd=8; portc=compt[x/1000]; delay_ms(5) ;portc=0xFF; //1234/1000=1
}
}
}
}
اولا خطأ
1- متغير x يجب ان يكون من نوع int فهذا يأخذ 2 بايت وبتالي سعته تصل الى 65535 بينما متغير من نوع char ياخذ بايت واحد وبتالي أقصى قيمه له 255
2- حاول دائما وضع متغيرات خارج قائمه الرئيسيه لكي تكون عامه يمكنك أستخدامها داخل اي داله بينما اذا وضعتها داخل قائمه الرئيسيه ستكون معرفه فقط داخل هذه داله ولايمكنك أستخدامها في داله اخرى
3- سفن سكمنت من نوع كمن انود لازم بالبدايه تكون سفن سكمنت مطفيه وهذا يتحقق بعكس حاله فأذا وضعنا portc=0xFF وportd=0 فهنا معناها سفن سكمنت على وضع OFF لانه يجب كمن انود يريد 5 فولت بينما البقيه بنات تريد 0 فولت
4- سفن سكمنت من نوع كمن كاثود لازم بالبدايه تكون سفن سكمنت مطفيه وهذا يتحقق بعكس حاله فأذا وضعنا portc=0 وportd=0xFF فهنا معناها سفن سكمنت على وضع OFF لانه يجب كمن كاثود يريد 0 فولت بينما البقيه بنات تريد 5 فولت
5-
كود:
portd=1;portc=compt[x%10]; delay_ms(5) ;portc=0xFF;
يجب أطفاء سفن سكمنت في نهايه كل امر يعني لما شغل واحده وتبقيها لمده 5ms لازم بعد ذلك تطفيها هذا ضروري جدا لعمل سفن سكمنت بشكل طبيعي
6-
اخي كريم اذا كان لديك رقم 1234 فكيف يتم تجزئه
لنأخذ رقم العشرات اذن نأخذ باقي قسمه على 10 لانك اذا قسمت على 10 تحصل على 123 وباقي 4 أذن ناخذ الباقي
كود:
portd=1;portc=compt[x%10]; delay_ms(5) ;portc=0xFF;
والان نحصل على العشرات =3
هنا لابد من تقسيم على 100 لنحصل على 12 وباقي 34 اذن نأخذ باقي القسمه على 100 ثم نقسم على 10
باقي القسمه=34
نقسم على 10 =3
كود:
portd=2; portc=compt[x%100/10]; delay_ms(5) ;portc=0xFF;
والان نحصل على مئات =2
هنا لابد من تقسيم على 1000 لنحصل على 1 وباقي 234 اذن نأخذ باقي القسمه على 1000 ثم نقسم على 100
باقي القسمه=234
نقسم على 100 =2
كود:
portd=4; portc=compt[x%1000/100]; delay_ms(5) ;portc=0xFF;
والان نحصل على الالاف =1
هنا لابد من تقسيم على 1000 لنحصل على 1
كود:
portd=8; portc=compt[x/1000]; delay_ms(5) ;portc=0xFF;