forked from ropolexi/IO22C04
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIO22C04.cpp
More file actions
69 lines (61 loc) · 1.53 KB
/
IO22C04.cpp
File metadata and controls
69 lines (61 loc) · 1.53 KB
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
#include "IO22C04.h"
IO22C04::IO22C04()
{
}
void IO22C04::gpio_init()
{
pinMode(DATA_PIN, OUTPUT);
pinMode(LATCH_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
pinMode(RELAY3_PIN, OUTPUT);
pinMode(RELAY4_PIN, OUTPUT);
pinMode(IN_1_PIN, INPUT_PULLUP);
pinMode(IN_2_PIN, INPUT_PULLUP);
pinMode(IN_3_PIN, INPUT_PULLUP);
pinMode(IN_4_PIN, INPUT_PULLUP);
pinMode(SW1_PIN, INPUT_PULLUP);
pinMode(SW2_PIN, INPUT_PULLUP);
pinMode(SW3_PIN, INPUT_PULLUP);
pinMode(SW4_PIN, INPUT_PULLUP);
}
void IO22C04::displayOneBit()
{
unsigned char ssd_dat;
unsigned char bit_num;
ssd_dat = SSD_SEG[dat];
bit_num = SSD_NUM[com_num];
digitalWrite(LATCH_PIN, LOW);
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, bit_num);
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, ssd_dat);
digitalWrite(LATCH_PIN, HIGH);
}
void IO22C04::display_update()
{
if (com_num < 3)
{
com_num++;
}
else
{
if (display_value_pre != display_value)
{
int temp_val = display_value;
display_value_pre = display_value;
dat_buf[0] = temp_val / 1000;
temp_val = temp_val % 1000;
dat_buf[1] = temp_val / 100;
temp_val = temp_val % 100;
dat_buf[2] = temp_val / 10;
dat_buf[3] = temp_val % 10;
}
com_num = 0;
}
dat = dat_buf[com_num];
displayOneBit();
}
void IO22C04::set_value(int value)
{
display_value = value;
}