كيف يمكنني تبسيط هذه المهمة؟

O

otuzsubat

Guest
أنا استخدم لوحة المفاتيح 4x3 في مشروعي.أنا استخدم C0 ، C1 و C2 ودبابيس C5 والإخراج ، وE0 ، E1 ، E2 كمدخلات.هذه الوظيفة يمكن أن تكون أكثر بساطة؟

one_char شار (الفراغ) (
غير الموقعة الصف كثافة العمليات ؛
ل(صف = 0 ؛ الصف <4 ؛ الصف ){//" الصف "
إذا كان (الصف == 0) (
output_low (pin_c0) ؛
output_high (pin_c1) ؛
output_high (pin_c2) ؛
output_high (pin_c5) ؛
)
إذا كان (الصف == 1) (
output_high (pin_c0) ؛
output_low (pin_c1) ؛
output_high (pin_c2) ؛
output_high (pin_c5) ؛
)
إذا كان (الصف == 2) (
output_high (pin_c0) ؛
output_high (pin_c1) ؛
output_low (pin_c2) ؛
output_high (pin_c5) ؛
)
إذا كان (الصف == 3) (
output_high (pin_c0) ؛
output_high (pin_c1) ؛
output_high (pin_c2) ؛
output_low (pin_c5) ؛
)
إذا (! المدخلات (PIN_E0) & & المدخلات (PIN_E1) & & المدخلات (PIN_E2))
عودة ((صف * 3) 1 0 x30 ؛
والا اذا (المدخلات (PIN_E0) & &! المدخلات (PIN_E1) & & المدخلات (PIN_E2))
عودة ((صف * 3) 2 0 x30) ؛
والا اذا (المدخلات (PIN_E0) & & المدخلات (PIN_E1) & &! المدخلات (PIN_E2))
عودة ((صف * 3) 3 0 x30) ؛
أيضا
عودة (0) ؛
)

 
ولن يساعد كثيرا في تبسيط ذلك ، لأن أصابع الإنسان جدا أبطأ بكثير من جامعة كاليفورنيا.

على أي حال ، على افتراض أن الدبابيس الأخرى جيم الميناء لا دبابيس الإخراج ، هل يمكن ببساطة الناتج 0x17 إلى ميناء مئوية في نهاية للحلقة ، بدلا من وجود هذا العدد الكبير من output_high.(شريطة أن قانون الأحوال المدنية لتعطيل السيارات تريس الإعداد للدورة)

عند اختبار للأعمدة ، إذا كان يمكنك التأكد من أن المستخدم بالضغط على مفتاح واحد فقط في المرة الواحدة ، يمكنك فقط اختبار لهذا دبوس واحد.

حاول استخدام الصف صف صف أو صف = (الصف <<1) بدلا من الصف * 3.

راجع للشغل ، هل حاولت رمز من قبل؟هل لديك مفتاح خارجي debouncing الدوائر؟لانها لم تفعل في مجال البرمجيات.

ابتهاج!

 
أنا أستخدم دبابيس أخرى من C. وفي الحقيقة ، أنا أريد أن أعرف كيف يمكنني تعيين أو مسح بعض الدبابيس في وقت واحد دون تغيير الدبابيس الأخرى.

وفي غضون ذلك ، طبقت بك sugestion ومهمتي الآن يعمل بشكل أسرع.

 
اقتباس :

راجع للشغل ، هل حاولت رمز من قبل؟
هل لديك مفتاح خارجي debouncing الدوائر؟
لانها لم تفعل في مجال البرمجيات.
 
يمكنك القيام به بعض الحيل.
كمثال لجزء العودة :

تغيير

إذا (! المدخلات (PIN_E0) & & المدخلات (PIN_E1) & & المدخلات (PIN_E2))
عودة ((صف * 3) 1 0 x30 ؛
والا اذا (المدخلات (PIN_E0) & &! المدخلات (PIN_E1) & & المدخلات (PIN_E2))
عودة ((صف * 3) 2 0 x30) ؛
والا اذا (المدخلات (PIN_E0) & & المدخلات (PIN_E1) & &! المدخلات (PIN_E2))
عودة ((صف * 3) 3 0 x30) ؛
أيضا
عودة (0) ؛

إلى :

const غير الموقعة تشار التحويل [8] = (0،0،0،1،0،2،3،0) ؛

عودة (تحويل [المدخلات (port_E) & 0x07] == 0؟ 0 : (التحويل [المدخلات (port_E) & 0x07] 0x30 الصف * 3)) ؛لم يتم التحقق من صحتها ، ولكن المفهوم هو موافق.

 
بافتراض أن تتمكن من انتاج لجميع البتات الأربعة ج منفذ واحد في عملية الإخراج ، هل يمكن أن تغير من الصف بين الحلقات ، على التوالي <<= 1 ، وإخراج بت معكوس الحكمة من الصف على الميناء جيم :

ل(صف = 1 ؛ الصف <32 ؛ الصف <<= 1)
(
الإخراج (port_c ، ~ صف)
...
)

وعاد keycodes التغيير ، ولكن هل يفترض أن يكون رمز لتحويل keycodes إلى أرقام (أو ما هو على المفتاح) ، وحتى هذه يمكن تكييفها.

هته
بارني

 
لقد غيرت وظيفتي على النحو المبين أدناه.أنا لأنه فصل وظيفتين.
التغييرات الأساسية هي أنني لا أميل استخدام "ل" حلقة للمتغير "الصف" وبدلا من العودة ((صف * 3) 3 0 x30) ؛ ط استخدام tus_degeri = (الصف = (الصف <<1) 0 x33) ؛

tus_degerlendir شار (غير الموقعة الصف كثافة العمليات) (
tus_degeri بايت ؛
إذا (! المدخلات (PIN_E0) & & المدخلات (PIN_E1) & & المدخلات (PIN_E2)) (
tus_degeri = (الصف = (الصف <<1) 0 x31) ؛
إذا كان (tus_degeri == 0x3A)
tus_degeri = 0x2A ؛
عودة (tus_degeri) ؛
)
إذا كان (المدخلات (PIN_E0) & &! المدخلات (PIN_E1) & & المدخلات (PIN_E2)) (
tus_degeri = (الصف = (الصف <<1) 0 x32) ؛
إذا كان (tus_degeri == 0x3B)
tus_degeri = 0x30 ؛
عودة (tus_degeri) ؛
)
إذا كان (المدخلات (PIN_E0) & & المدخلات (PIN_E1) & &! المدخلات (PIN_E2)) (
tus_degeri = (الصف = (الصف <<1) 0 x33) ؛
إذا كان (tus_degeri == 0x3C)
tus_degeri = 0x23 ؛
عودة (tus_degeri) ؛
)
عودة (0x00) ؛
)
tus_tara_degerlendir شار (الفراغ) (
درجة الحرارة بايت ، الصف ؛
صف = 0 ؛
output_low (pin_c0) ؛
output_high (pin_c1) ؛
output_high (pin_c2) ؛
output_high (pin_c5) ؛
حرارة = tus_degerlendir (الصف) ؛
إذا كان (مؤقت! = 0)
عودة (مؤقت) ؛
صف = 1 ؛
output_high (pin_c0) ؛
output_low (pin_c1) ؛
output_high (pin_c2) ؛
output_high (pin_c5) ؛
حرارة = tus_degerlendir (الصف) ؛
إذا كان (مؤقت! = 0)
عودة (مؤقت) ؛
صف = 2 ؛
output_high (pin_c0) ؛
output_high (pin_c1) ؛
output_low (pin_c2) ؛
output_high (pin_c5) ؛
حرارة = tus_degerlendir (الصف) ؛
إذا كان (مؤقت! = 0)
عودة (مؤقت) ؛
صف = 3 ؛
output_high (pin_c0) ؛
output_high (pin_c1) ؛
output_high (pin_c2) ؛
output_low (pin_c5) ؛
حرارة = tus_degerlendir (الصف) ؛
إذا كان (مؤقت! = 0)
عودة (مؤقت) ؛
عودة (0x00) ؛
)

 
هل يمكن أيضا تعيين جميع المخرجات دبابيس عالية ثم حدد أي واحد من مجموعة قليلة مع بيان الحالة.

ولكن لهذا البرنامج الذي يحفظ بكتابة معظمها.كما يمكن أن يكون أكثر إحكاما رمز ، ولكن ذلك ليس دائما حتى عندما يكون عدد صغير من الحالات.

 
بعد تعيين منافذ pin_c المعروف أن الدولة في بداية الدالة ، فقط عليك أن تكتب إلى تلك التي تغير :

tus_tara_degerlendir شار (الفراغ) (
درجة الحرارة بايت ، الصف ؛
صف = 0 ؛
output_low (pin_c0) ؛
output_high (pin_c1) ؛
output_high (pin_c2) ؛
output_high (pin_c5) ؛
حرارة = tus_degerlendir (الصف) ؛
إذا كان (مؤقت! = 0)
عودة (مؤقت) ؛
صف = 1 ؛
output_high (pin_c0) ؛
output_low (pin_c1) ؛
/ / لا حاجة output_high (pin_c2) ؛
/ / لا حاجة output_high (pin_c5) ؛
حرارة = tus_degerlendir (الصف) ؛
إذا كان (مؤقت! = 0)
عودة (مؤقت) ؛
صف = 2 ؛
/ / لا حاجة output_high (pin_c0) ؛
output_high (pin_c1) ؛
output_low (pin_c2) ؛
/ / لا حاجة output_high (pin_c5) ؛
حرارة = tus_degerlendir (الصف) ؛
إذا كان (مؤقت! = 0)
عودة (مؤقت) ؛
صف = 3 ؛
/ / لا حاجة output_high (pin_c0) ؛
/ / لا حاجة output_high (pin_c1) ؛
output_high (pin_c2) ؛
output_low (pin_c5) ؛
حرارة = tus_degerlendir (الصف) ؛
إذا كان (مؤقت! = 0)
عودة (مؤقت) ؛
عودة (0x00) ؛
)

 

Welcome to EDABoard.com

Sponsor

Back
Top