هذا الكود يعمل تقريباا 80% من المطلوب .. وسيتم تكملته ...
كود:
#define Time delay_ms(1000);
#define LED portb
void main() {
trisb = 0; portb = 0;
trisa = 3; porta = 0;
//************************//
Time
LED = 1; Time LED = 2; Time LED = 4; Time LED = 8; Time
LED = 16; Time LED = 32; Time LED = 64; Time LED = 128; Time
LED = 0; Time
//***************************************************************//
LED = 128; Time LED = 64; Time LED = 32; Time LED = 16; Time
LED = 8; Time LED = 4; Time LED = 2; Time LED = 1; Time
LED = 0; Time LED = 1;
while (1) {
if(porta.F0==0) { Time LED ++; }
if(porta.F1==0) { Time LED --; }
}
}
|
وعليك السلام ورحمة الله وبركاته أخي عبد الله حجازي.
أولا كل مرة استخدمت فيها الأمر time سنعدها ثلاث تعليمات... بينما كل مرة استخدمت فيها الأمر led سنعدها تعليمة واحدة.
ثانيا هذا الكود سيجعل الليدات تضيء من اليمين إلى الشمال مرة واحدة ثم من الشمال إلى اليمين مرة واحدة... أنا لا أريد هذا... أريد من اليمين إلى الشمال ثلاث مرات ومن الشمال إلى اليمين أربع مرات ولا تنس أن تطفئ جميع الليدات بين كل دورة.
أضف إلى ذلك أنه عندما يصل إلى اختبار السويتش لن يؤدي الوظيفة المطلوبة على الوجه الذي ينبغي... كما لا أريد استخدام تأخير في حلقة اختبار السويتشات... يعني أريد إذا ضغطت مرة ثم رفعت حتى لو كل واحد ملي ثاني أريده ينفذ التعليمة التالية "طبعا مستحيل أن أضغط وأرفع بهذه السرعة" ... المهم لا تستخدم أمر delay في حلقة اختبار السويتشات.
وأشجعك أخي وأحييك على هذا الكود وأنتظر أن تعدله وتصل للوظيفة المطلوبة بأقل عدد تعليمات لكن أسرع حتى تكون أول من وصل لنخصم 10 تعليمات من تعليماتك كما في الشروط.
والسلام عليكم ورحمة الله وبركاته.