الاخوة الاعزاء :
لقد عملت برنامج يعمل على ال led matrix 5*7
ولكن المشكلة عند الحركة فلا يعمل بالشكل المطلوب.ما المشكلة
char x1=0b11111111;
char x2=0b11110110;
char x3=0b11110110;
char x4=0b11110110;
char x5=0b00000000;
char n;
void main()
{
TRISB=0; PORTB=0; TRISd=0; PORTd=0;
loop:
for(n=0;n<100;n++){
PORTb=0b00001;
PORTd=x1; delay_us(500);
///////////
PORTb=0b00010;
PORTd=x2; delay_us(500);
/////////////
PORTb=0b00100;
PORTd=x3; delay_us(500);
////////////
PORTb=0b01000;
PORTd=x4; delay_us(500);
///////////
PORTb=10000;
PORTd=x5; delay_us(500);
////////////
}
x1=x2;
x2=x3;
x3=x4;
x4=x5;
x5=x1
goto loop
;
}
|
السلام عليكم ورحمة الله وبركاتة
ياااااااااااااااااااااااااااااه اخيرا وجد استفسار
++++++++++++++++++++++++++++++++
بسم الله الرحمن الرحيم
اولا اجد فى الكود بورت b وبورت d
اذا انتى تستخدمى شروحاتنا بميكرو كونترول 16f877a
وبرنامجك يستخدم بورت بى للازاحة
اوك؟
يوجد نقطة مهمة جدا هنا انة فى الميكرو 16f84a بورت a
عددها 5 فقط
امافى 877 يوجد 8مخارج
ولابد من ان يتم المسح بالكامل
والا سوف نجد ان كل دورة مسح تتداخل مع التى تسبقها
مثال بسيط (( اداة مسح الزجاج فى السيارات ))
لابد ان تبدا من اخر نقطة يمينا مثلا الى اقصى نقطة يسارا
+++++++++++++++++++
اعتقد ان المثال هنا قد وضح
ولذلك فسوف يكون الكود الخاص بك
لابد ان تكملى عدد بورت B او اى بورت تستخدمية للازاحة
(التحكم فى الاعمدة))
ولا ننسى ان ناخذ فى الاعتبار ان الداتا تكون نفس العدد او اكثر
ولا تكون اقل من عدد الخطوات
لو كانت الداتا عبارة عن حرف واحد فلابد ان تستخدمى باقى العدد حتى لو كان صفر
هنا فى الكود الخاص بك هاهى الداتا لا اعلم
كود:
char x1=0b11111111;
char x2=0b11110110;
char x3=0b11110110;
char x4=0b11110110;
char x5=0b00000000;
وهنا سوف نكمل العدد حتى يصل الى 8
او اكثر
اذا سوف نجعلهم اكثر من8ونجعلهم 9
كود:
char x1=0b11111111;
char x2=0b11110110;
char x3=0b11110110;
char x4=0b11110110;
char x5=0b00000000;
char x6=0b00000000;
char x7=0b00000000;
char x8=0b00000000;
char x9=0b00000000;
كمانلاحظ هنا انة تم اضافة 4 اعمدة عبارة عن اصفار فقط
والان نذهب الى وسط الكود
لابد ان يتم بة التغيير كما شرحنا من قبل
والتغيير هو ان يتم العد حتى 8 وليس5فقط
وهذا هو الكود (الجزء الاوسط من الكود) لاحظو الفروق
فى عدد الخطوات وعدد الاصفار
كود:
for(n=0;n<100;n++){
PORTb=0b00000001;
PORTd=x1; delay_us(500);
///////////
PORTb=0b00000010;
PORTd=x2; delay_us(500);
/////////////
PORTb=0b00000100;
PORTd=x3; delay_us(500);
////////////
PORTb=0b00001000;
PORTd=x4; delay_us(500);
///////////
PORTb=00010000;
PORTd=x5; delay_us(500);
////////////
/////////////
PORTb=0b00100000;
PORTd=x6; delay_us(500);
////////////
PORTb=0b01000000;
PORTd=x7; delay_us(500);
///////////
PORTb=10000000;
PORTd=x8; delay_us(500);
////////////
}
وكما تم التغيير فى اول الكود
واوسط الكود
ايضا لابد من تعديل الجزء الاخير من الكود
والا فلن يتم الالتفاف(او التبديل) بالشكل السليم
كود:
x1=x2;
x2=x3;
x3=x4;
x4=x5;
x5=x6;
x6=x7;
x7=x8;
x8=x9;
x9=x1;
x5=x1
واخيرا قومى بالتعديلات كما شرحنا
وقومى بالتجربة
وسوف تعمل ان شاء الله