¢À ºÎ·Ï K_FND1 ¸Å´º¾ó ¢À °ü·Ã µµ¼ ¹× Å°Æ® »óÇ° º¸±â
K-Switch1, K_Switch2, K_LED1, K_LED2,
K_Motor1,K_Motor2,K_BASE. K_Dotmatrix
[10ÇÉ ¸ð·º½º Ä¿³ØÅÍ1] - ÆÐÅÏ Á¦¾î½ÅÈ£
ÇɹøÈ£
1
2
3
4
5
6
7
8
9
10
Çɸí
5V
a
b
c
d
e
f
g
dp
GND
[10ÇÉ ¸ð·º½º Ä¿³ØÅÍ2] - ¼¼±×¸ÕÆ® ON Á¦¾î½ÅÈ£
SEG1
SEG2
SEG3
SEG4
SEG5
SEG6
SEG7
SEG8
[10ÇÉ Flat ÄÉÀ̺í Ä¿³ØÅÍ1] - ÆÐÅÏ Á¦¾î½ÅÈ£
[10ÇÉ Flat ÄÉÀ̺í Ä¿³ØÅÍ2] - ¼¼±×¸ÕÆ® ON Á¦¾î½ÅÈ£
[¼¼±×¸ÕÆ® ON Á¦¾î½ÅÈ£]
Á¦¾î ½ÅÈ£
'0' (0V)
'1' (5V)
¼¼±×¸ÕÆ® Àü¿ø
OFF
ON
[ÆÐÅÏ(a, b, c, d, e, f, g, dp) Á¦¾î½ÅÈ£]
a,b,c,d,e,f,g,dp
ÆÐÅÏ
Á¦¾î½ÅÈ£
'0'
0
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
[Å×½ºÆ® ÇÁ·Î±×·¥1]
// ÆÄÀϸí : seg.c
// 7-Segment ¸ðµâ Å×½ºÆ® ÇÁ·Î±×·¥(CodeVisionAVR C ÄÄÆÄÀÏ·¯ ÀÌ¿ë)
// 7-Segment¿¡ 0-9999±îÁö Ãâ·ÂÇϱâ
// SEG2 : ¾÷Ä«¿îÅÍ, SEG1 : ´Ù¿î Ä«¿îÅÍ
// PC0-SEG2_DIG4, PC1-SEG2_DIG3, PC2-SEG2_DIG2, PC3-SEG2_DIG1
// PC4-SEG1_DIG4, PC5-SEG1_DIG3, PC6-SEG1_DIG2, PC7-SEG1_DIG1
// PA0-a, PA1-b, PA2-c, PA3-d
// PA4-e, PA5-f, PA6-g, PA7-dp
#include <mega128.h>
#include <delay.h>
flash unsigned char seg_pat[10]= {0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f};
void Seg8_out(int); // 8°³ ¼¼±×¸ÕÆ® Ç¥½Ã
void main(void)
{
int num = 0; // Ç¥½Ã ÃʱⰪ
DDRA = 0xFF; // Æ÷Æ®A Ãâ·Â ¼³Á¤
DDRC = 0xFF; // Æ÷Æ®C Ãâ·Â ¼³Á¤
while(1){ // ¹«ÇÑ ¹Ýº¹
Seg8_out(num); // 8°³ ¼¼±×¸ÕÆ® Ç¥½Ã
num++; // Ç¥½Ã°ª +1
if(num > 9999) num = 0; // »óÇÑÄ¡ 99 üũ
}
// 4°³ÀÇ 7-¼¼±×¸ÕÆ®¿¡ 0~9999 Ç¥½ÃÇϱâ
void Seg8_out(int num)
int i, buf;
int S1_1000, S1_100, S1_10, S1_1;
int S2_1000, S2_100, S2_10, S2_1;
// SEG2 4ÀÚ¸® Ãâ·Â°ª »êÃâ => ¾÷ Ä«¿îÅÍ
S2_1000 = num / 1000; // 1000ÀÚ¸®
buf = num % 1000;
S2_100 = buf / 100; // 100ÀÚ¸®
buf = buf % 100;
S2_10 = buf / 10; // 10ÀÚ¸®
S2_1 = buf % 10; // 1ÀÚ¸®
// SEG1ÀÇ 4ÀÚ¸®°ª(9999 - SEG1) => ´Ù¿î Ä«¿îÅÍ
S1_1000 = 9 - S2_1000;
S1_100 = 9 - S2_100;
S1_10 = 9 - S2_10;
S1_1 = 9 - S2_1;
for(i = 0;i < 5;i++){
PORTC = 0b00000001; // SEG2_DIG4(¸Ç ¿ìÃø 1ÀÚ¸®) Segment ON
PORTA = seg_pat[S2_1];
delay_ms(2);
PORTC = 0b00000010; // SEG2_DIG3 Segment(10ÀÚ¸®) ON
PORTA = seg_pat[S2_10];
PORTC = 0b00000100; // SEG2_DIG2 Segment(100ÀÚ¸®) ON
PORTA = seg_pat[S2_100];
PORTC = 0b00001000; // SEG2_DIG1 Segment(1000ÀÚ¸®) ON
PORTA = seg_pat[S2_1000];
PORTC = 0b00010000; // SEG1_DIG4(¸Ç ¿ìÃø 1ÀÚ¸®) Segment ON
PORTA = seg_pat[S1_1];
PORTC = 0b00100000; // SEG1_DIG3 Segment(10ÀÚ¸®) ON
PORTA = seg_pat[S1_10];
PORTC = 0b01000000; // SEG1_DIG2 Segment(100ÀÚ¸®) ON
PORTA = seg_pat[S1_100];
PORTC = 0b10000000; // SEG1_DIG1 Segment(1000ÀÚ¸®) ON
PORTA = seg_pat[S1_1000];
[Å×½ºÆ® ÇÁ·Î±×·¥2]
// ÆÄÀϸí : seg_time.c
// => ŸÀ̸Ó/Ä«¿îÅÍ0 ÀÌ¿ëÇÏ¿© ÀÏÁ¤½Ã°£ °£°ÝÀ¸·Î ¼¼±×¸ÕÆ® 1°³¾¿ ±¸µ¿
// '0'-'9' Ç¥½Ã ÆÐÅÏ°ª
// ¼¼±×¸ÕÆ® on Ãâ·Â°ª
flash unsigned char seg_on[8] = {0x01, 0x02, 0x04, 0x08,
0x10, 0x20, 0x40, 0x80};
int seg_val[8]; // Ãâ·ÂÇÒ ÀÚ¸®°ª
int disp_no = 0; // Ãâ·ÂÇÒ Segment ÀÚ¸®
void Seg_cal(int); // Ãâ·ÂÇÒ ÀÚ¸®°ª °è»ê
int num = 0;
DDRA = 0xFF; // Æ÷Æ® A Ãâ·Â ¼³Á¤
DDRC = 0xFF; // Æ÷Æ® C Ãâ·Â ¼³Á¤
TCCR0 = 0x07; // 1024ºÐÁÖ
ASSR = 0x0; // ŸÀ̸Ó/Ä«¿îÅÍ0 ŸÀÌ¸Ó µ¿ÀÛ
TCNT0 = 225; // 1/16us * 1024 * (256 - 225) = 1.98ms
TIMSK = 0x01; // ŸÀ̸Ó/Ä«¿îÅÍ0 ¿À¹öÇ÷οì ÀÎÅÍ·´Æ® Àο¡À̺í
Seg_cal(num); // Ãâ·ÂÇÒ ÀÚ¸®°ª °è»ê
SREG= 0x80; // ÀÎÅÍ·´Æ® Àο¡À̺í
while(1){
delay_ms(100); // 100ms Áö¿¬
num++; // Ãâ·Â°ª +1
if(num > 9999) num = 0; // Ç¥½Ã°ª Á¦ÇÑ
void Seg_cal(int num)
int buf;
// SEG2 ÀÚ¸®°ª => ¾÷ Ä«¿îÅÍ
seg_val[3] = num / 1000; // 1000ÀÚ¸® ÃßÃâ
seg_val[2] = buf / 100; // 100ÀÚ¸® ÃßÃâ
seg_val[1] = buf / 10; // 10ÀÚ¸® ÃßÃâ
seg_val[0] = buf % 10; // 1ÀÚ¸® ÃßÃâ
// SEG1 ÀÚ¸®°ª(9999 - SEG2 °ª) => ´Ù¿î Ä«¿îÅÍ
seg_val[4] = 9 - seg_val[0];
seg_val[5] = 9 - seg_val[1];
seg_val[6] = 9 - seg_val[2];
seg_val[7] = 9 - seg_val[3];
// 1/16us * 1024ºÐÁÖ * (256 - 225) = 1.98ms
// 1.98ms°£°ÝÀ¸·Î ¼¼±×¸ÕÆ® 1°³¾¿ ±¸µ¿ Ç¥½Ã
interrupt [TIM0_OVF] void time0(void)
TCNT0 = 225; // 1.98ms ÃʱⰪ Àç¼³Á¤
PORTC = seg_on[disp_no]; // disp_no ¼¼±×¸ÕÆ®¸¸ on
PORTA = seg_pat[seg_val[disp_no]]; // Ç¥½Ã°ª Ãâ·Â
disp_no = (disp_no + 1) % 8; // ´ÙÀ½ Ç¥½ÃÇÒ ¼¼±×¸ÕÆ® ¹øÈ£ °»½Å