blob: 315f665999963b5a38104bcd99bfdecd4f098978 (
plain)
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
|
/*
* File: enable_digit.c
* Author: Peter Wu
*/
/**
* Determines the bitmask necessary for enabling LED segments on a LED
* @param number The number to be displayed
* @return The segment bits to be enabled
*/
static int segment_mask(int number) {
switch (number) {
case 0:
return 0x7e;// 01111110
case 1:
return 0x30;// 00110000
case 2:
return 0x6d;// 01101101
case 3:
return 0x79;// 01111001
case 4:
return 0x33;// 00110011
case 5:
return 0x5b;// 01011011
case 6:
return 0x5f;// 01011111
case 7:
return 0x70;// 01110000
case 8:
return 0x7f;// 01111111
case 9:
return 0x7b;// 01111011
}
// in case you do not pass the right arguments, turn everything on
return 0xff;
}
/**
* Displays a digit at a certain index
* @param digit The digit to be displayed (between 0 and 9 inclusive)
* @param index The number of the LED segment to be enabled, counting from the
* right side. index 0 means that all LEDS are disabled. The n-th LED can be
* selected with index n with 1 <= n <= 6
*/
void enable_digit(int digit, int index) {
int *digitp = (int*)-7;
int *segmentp = (int*)-8;
// first set the segments to be enabled
*segmentp = segment_mask(digit);
// enable bit "index" if index > 0
*digitp = index ? 1 << (index - 1) : 0;
}
int main() {
enable_digit(0, 0);
return 0;
}
|