รบกวนพี่ๆอีกครั้งนะครับ ช่วยแก้ปัญหาโปรแกรม Microcontroller ควบคุม LED หน่อยครับ

บอร์ดที่ผมใช่คือ Microcontroller รุ่น PIC16F887 เหมือนเดิมครับ
คือมันเป็นโปรแกรม LED ที่ต้องกดสวิตช์ เพื่อให้ไฟ LED วิ่งตามที่เราเขียนไว้
ปัญหาคือโจทย์เค้ามีเงื่อนไขที่ผมงง และแก้ไม่ได้อยู่ อยากรบกวนพวกพี่ๆหน่อยครับ

เมื่อเปิดบอร์ด Micro ไฟทั้ง 8 ดวงจะติดดับพร้อมกันทั้งหมด สลับไปเรื่อยๆ ผมขอเรียกว่า Standby นะครับ
(ตรงนี้ไม่ยาก ผมเคลียร์ไปแล้ว)

โจทย์มีอยู่ว่า กด SW0 ให้หลอด LED แสดงผลดังต่อไปนี้ (0=ติด x=ดับ)
Step1 0xxx xxxx
Step2 x0xx xxxx
Step3 xx0x xxxx
Step4 xxx0 xxxx
Step5 xxxx 0xxx
Step6 xxxx x0xx
Step7 xxxx xx0x
Step8 xxxx xxx0
ทำงานเช่นนี้ไปเรื่อยๆ จนกว่าจะกดสวิตช์ตัวต่อไป (มี SW1 ที่เมื่อเรากดแล้วมันจะวิ่งอีกแบบ)
ถ้ากด SW0 ซ้ำอีกครั้ง ไม่ว่ากดตอนไหนในขณะที่ LED ยังวิ่งอยู่ ให้หลอด LED แสดงผลถึง Step 8 ก่อนจึงจะกลับไป Standby


SW1 เป็นไฟวิ่งแบบง่ายๆ โดยให้ทำงาน 2 รอบ (ผมใช้ for) หลังจากครบแล้วให้กลับไป Standby แบบนี้ครับ
Step1 0xxx xxx0
Step2 00xx xx00
Step3 000x x000
Step4 0000 0000
Step5 000x x000
Step6 00xx xx00
Step7 0xxx xxx0
Step8 xxxx xxxx

ปัญหาของผมคือ
1.โจทย์บอก "ทำงานเช่นนี้ไปเรื่อยๆ จนกว่าจะกดสวิตช์ตัวต่อไป"
คือถ้าเรากดมันไปทีนึง มันก็ต้องวนไปเรื่อย และถ้าผมกด SW1 เพื่อแสดงไฟชุดต่อไป
มันต้องเปลี่ยน ณ ตอนนั้นเลย และเมื่อมันแสดงไฟของ SW1 ครบ 2 รอบ มันต้องกลับไปที่ Standby
นั่นคือครับคือปัญหา ผมกดให้มันแสดงไฟวิ่งที่ตั้งไว้ใน SW1 ไม่ได้
ผมจนปัญญาเลยใช้วิธีเกรียน แทรก ผลของ SW1 ไว้ในช่วงที่กด SW0
ผลที่ได้คือ มันวิ่ง 2 รอบจริง แต่มันดันกลับมาวิ่งแบบ SW0 ต่อ ไม่ยอมไป Standby

2.โจทย์บอก  "ถ้ากด SW0 ซ้ำอีกครั้ง ให้หลอด LED แสดงผลถึง Step 8 ก่อนจึงจะกลับไป Standby"
อันนี้ผมทำไม่ได้จริง ผมไม่รู้ว่าจะให้มันกลับออกมาที่ Standby ยังไง

อันนี้คือโปรแกรมของผมครับ

[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้

รบกวนพี่ๆในบอร์ดนี้อีกสักครั้งนะครับ ช่วยผมหน่อย ผมขอขอบคุณพี่ๆล่วงหน้าครับ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่