ผมใช้ 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]
7 Segment มัลติเพล็กซ์แบบไหนไม่ให้กระพริบครับ
โค้ดที่ใช้แสดงตัวเลขแบบมัลติเพล็กซ์
[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
};
//-------------------------------------------------------
void dsp_digit1(char n) {
output_b(0x05);
LED_DSP(n);
delay_ms(2-dt1-dt2); // delay
}
//-------------------------------------------------------
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]