-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.c
127 lines (116 loc) · 2.51 KB
/
main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
// Controller ATtiny45
// FUSES: Clock at 8 MHz internal RC oscillator, Brown-out at 1.8V, CKDIV8 is ON
// Avrdude output: "avrdude: safemode: Fuses OK (E:FF, H:DE, L:62)"
#define F_CPU 1000000UL
#ifndef DOT_LENGTH_MS
#define DOT_LENGTH_MS 75
#endif
#ifndef MESSAGE
#define MESSAGE "QRPP BCN TEST QRPP BCN TEST "
#endif
#include <avr/io.h>
#include <util/delay.h>
#include <string.h>
#include <avr/pgmspace.h>
const int first_letter_num = 32;
const unsigned char letters[61][8] PROGMEM = {
" ", // 32
"", // !
"", // "
"", // #
"", // $
"", // %
"", // &
".----.", // '
"", // ( 40
"", // )
"", // *
"", // +
"--..--", // ,
"", // -
".-.-.-", // .
"-..-.", // /
"-----", // 0
".----", // 1
"..---", // 2 50
"...--", // 3
"....-", // 4
".....", // 5
"-....", // 6
"--...", // 7
"---..", // 8
"----.", // 9
"", // :
"", // ;
"", // < 60
"", // =
"", // >
"..--..", // ?
"", // @
".-", // A
"-...", // B
"-.-.", // C
"-..", // D
".", // E
"..-.", // F 70
"--.", // G
"....", // H
"..", // I
".---", // J
"-.-", // K
".-..", // L
"--", // M
"-.", // N
"---", // O
".--.", // P 80
"--.-", // Q
".-.", // R
"...", // S
"-", // T
"..-", // U
"...-", // V
".--", // W
"-..-", // X
"-.--", // Y
"--.." // Z 90
};
void dot (void) {
PORTB = 0b00011000;
_delay_ms(DOT_LENGTH_MS);
PORTB = 0b00010000;
}
void dash (void) {
PORTB = 0b00011000;
_delay_ms(DOT_LENGTH_MS * 3);
PORTB = 0b00010000;
}
void dot_space (void) {
_delay_ms(DOT_LENGTH_MS);
}
void dash_minus_dot_space (void) {
_delay_ms(DOT_LENGTH_MS * 2);
}
void word_minus_dot_space (void) {
_delay_ms(DOT_LENGTH_MS * 6);
}
int main (void) {
int i, j;
DDRB = 0b00011000;
PORTB = 0b00010000;
char message[] = MESSAGE;
while (1) {
for (i = 0; message[i] != 0; i++) {
for (j = 0; pgm_read_byte(&(letters[message[i] - first_letter_num][j])) != 0; j++) {
if (pgm_read_byte(&(letters[message[i] - first_letter_num][j])) == '-') {
dash();
} else if (pgm_read_byte(&(letters[message[i] - first_letter_num][j])) == '.') {
dot();
} else if (pgm_read_byte(&(letters[message[i] - first_letter_num][j])) == ' ') {
word_minus_dot_space();
}
dot_space();
}
dash_minus_dot_space();
}
}
}