7 Segment มัลติเพล็กซ์แบบไหนไม่ให้กระพริบครับ

ผมใช้ 7Segment แบบ 2 หลัก ต่อมัลติเพล็กซ์เข้ากับไมโครคอนโทรลเลอร์ PIC ตั้งเวลาสลับการแสดงผลแต่ละหลัก delay_ms(50); แต่ยังเห็นการกระพริบสลับกันแสดงผลซ้ายขวาตลอดเลยครับ ถ้าจะต่อตรงๆทั้งหมดเลยก็เปลืองขาไมโครคอนโทรลเลอร์ ถ้าใช้โมดูล LCD ก็ราคาแพงขึ้นอีก อยากทราบว่ามีวิธีต่อ 7Segment มัลติเพล็อซ์แบบไหนบ้างที่ประหยัดต้นทุน และไม่กระพริบครับ

โค้ดที่ใช้แสดงตัวเลขแบบมัลติเพล็กซ์

[open_code]#include <16F887.h>
#fuses HS
#fuses NOLVP
#fuses NOWDT
#fuses NOPROTECT
#use delay(clock = 4000000)

#define LED_DSP(x)   OUTPUT_C(x)

char dt1,dt2;        // delay time
int i=0;

     // LED Number Cathode
/*char const  LED_NUM[10] = {0x3F,0x06, 0x5B, 0x4F,  //0,1,2,3
                           0x66, 0x6D, 0x7D,  //4,5,6
                           0x07, 0x7F, 0x6F,  //7,8,9
                          };
*/

   //LED Number Anode
char const  LED_NUM[10] = {0x40,0x79, 0x24, 0x30,  //0,1,2,3
                           0x19, 0x12, 0x02,  //4,5,6
                           0x78, 0x00, 0x10,  //7,8,9
                          };

//-------------------------------------------------------หัวเราะispaly Digit1
void dsp_digit1(char n) {
  output_b(0x05);
  LED_DSP(n);
  delay_ms(2-dt1-dt2);   // delay
}

//-------------------------------------------------------หัวเราะispaly Digit1
void dsp_digit2(char n) {
  output_b(0x03);
  LED_DSP(n);
  delay_ms(dt1);        // delay
}
     
void main (void)
{      
   while(1)
   {  
         i++;      
         dsp_digit1(LED_NUM[i/10]);
         delay_ms(50);
         dsp_digit2(LED_NUM);
         delay_ms(50);

     if(i>99){
         i = 0;
      }
   }
      
}[/close_code]
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่