정현희

FND 프로그래밍

Showing 1 changed file with 52 additions and 0 deletions
1 +#define F_CPU 16000000UL
2 +#include <avr/io.h>
3 +#include <util/delay.h>
4 +
5 +int main()
6 +{
7 + unsigned char FND_DATA[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x27, 0x7f, 0x6f,
8 + 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71,
9 + 0x80, 0x40, 0x08}; // 0~9, A~F, '.', '-', '_'
10 + unsigned int num = 0, num0, num1, num2, num3; // 각 자리 수를 나타내기 위한 변수
11 +
12 + DDRC = 0xff; // C포트를 모두 사용
13 + DDRG = 0x0f;
14 +
15 +
16 +// 분/초 시계
17 + unsigned int i = 0; // 0.5초 마다 깜빡거리는 것을 설정하기 위한 변수
18 + while(1)
19 + {
20 + num++;
21 + num0 = (num/60000)%6; // 각 자리 수 마다 연산
22 + num1 = (num/6000)%10;
23 + num2 = (num/1000)%6;
24 + num3 = (num/100)%10;
25 +
26 + PORTC = FND_DATA[num0];
27 + PORTG = 0x08;
28 + _delay_ms(2);
29 +
30 + PORTC = FND_DATA[num1] + 0x80; // 가운데 점 표시
31 + PORTG = 0x04;
32 + _delay_ms(2);
33 +
34 + if(i < 40)
35 + PORTC = FND_DATA[num2];
36 + else
37 + PORTC = 0;
38 + PORTG = 0x02;
39 + _delay_ms(3);
40 +
41 + if(i < 40)
42 + PORTC = FND_DATA[num3];
43 + else
44 + PORTC = 0;
45 +
46 + PORTG = 0x01;
47 + _delay_ms(3);
48 +
49 + if(i++ >= 50) // 0.5초 마다 i를 0으로 초기화하여 깜빡거리도록 설정
50 + i = 0;
51 + }
52 +}