-
Notifications
You must be signed in to change notification settings - Fork 0
/
indicator.h
95 lines (82 loc) · 1.7 KB
/
indicator.h
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
typedef unsigned char U8;
typedef signed char S8;
typedef unsigned int U16;
typedef signed int S16;
typedef unsigned long int U32;
typedef signed long int S32;
#define SETBIT(X,N) (X)|=(1<<(N))
#define CLEARBIT(X,N) (X)&=~(1<<(N))
#define DELAY for(U32 i=0; i<35737; i++);
#define DELAY2 for(U32 i=0; i<20000; i++);
//---------------------------------------
void tick(void) {
U8 i;
SETBIT(PORTC,1);
for(i=0;i<5;i++);
CLEARBIT(PORTC,1);
for(i=0;i<5;i++);
}
//---------------------------------------
void SEGerase(void) {
int seg; //clear segment
CLEARBIT(PORTC,0);
for(seg=0;seg<25;seg++) {
tick();
}
}
void SEGempty(void) {
int seg; //clear segment
CLEARBIT(PORTC,0);
for(seg=0;seg<8;seg++) {
tick();
}
}
void SEGdigit(S8 digit, U8 dot) {
S8 i,data,d;
//digit = 0..9 if --> data
if(digit == 0) d = 252;
if(digit == 1) d = 96;
if(digit == 2) d = 218;
if(digit == 3) d = 242;
if(digit == 4) d = 102;
if(digit == 5) d = 182;
if(digit == 6) d = 190;
if(digit == 7) d = 224;
if(digit == 8) d = 254;
if(digit == 9) d = 246;
if((digit<0)||(digit>9)) d = 0;
//show dot
if(dot==1) {
data = d + 1; // h = 1
}
else {
data = d;// h = 0
}
//get data on segment
for(i=0;i<8;i++) {
if((data&(1<<i))!=0) {
SETBIT(PORTC,0);
tick();
}
else {
CLEARBIT(PORTC,0);
tick();
}
}
}
void tripleSEG(S16 number, U8 dot) {
S16 seg1, seg2, seg3;
if (number == 0) {
SEGdigit(0,dot);
SEGdigit(0,dot);
SEGdigit(0,dot);
}
else {
seg3 = number%10;
seg2 = (number/10)%10;
seg1 = number/100;
SEGdigit(seg1,dot);
SEGdigit(seg2,dot);
SEGdigit(seg3,dot);
}
}