#define GND0 10
#define GND1 11
#define GND2 12
#define sw2 14
void setup() {
// put your setup code here, to run once:
Serial1.begin(115200);
// pinMode GP2 -> GP12
for(uint8_t i = 2; i <= 8; i++)
{ // GP2 -> GP8
pinMode(i, OUTPUT);
}
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(14, INPUT);
pinMode(15, INPUT);
digitalWrite(GND0, HIGH);
digitalWrite(GND1, HIGH);
digitalWrite(GND2, HIGH);
}
byte hexList[] = {0x00, 0x01, 0x02, 0x03, 0x04};
bool segPattern[][7] = {
// a, b, c, d, e, f, g
{1, 1, 1, 1, 1, 1, 0}, // 0
{0, 1, 1, 0, 0, 0, 0}, // 1
{1, 1, 0, 1, 1, 0, 1}, // 2
{1, 1, 1, 1, 0, 0, 1}, // 3
{0, 1, 1, 0, 0, 1, 1}, // 4
{1, 0, 1, 1, 0, 1, 1}, // 5
{1, 0, 1, 1, 1, 1, 1}, // 6
{1, 1, 1, 0, 0, 0, 0}, // 7
{1, 1, 1, 1, 1, 1, 1}, // 8
{1, 1, 1, 1, 0, 1, 1}, // 9
{1, 1, 1, 0, 1, 1, 1}, // A -> 10
{0, 0, 1, 1, 1, 1, 1}, // B -> 11
{1, 0, 0, 1, 1, 1, 0}, // C -> 12
{0, 1, 1, 1, 1, 0, 1}, // D -> 13
{1, 0, 0, 1, 1, 1, 1}, // E -> 14
{1, 0, 0, 0, 1, 1, 1}, // F -> 15
{0, 0, 0, 0, 0, 0, 0}, // NULL
};
void segDisplay(uint16_t S) {
uint16_t tdelay = 5;
uint8_t S0 = S % 10;
uint8_t S1 = (S % 100) / 10;
uint8_t S2 = S / 100;
for (uint8_t i = 0; i <= 7; i++) {
digitalWrite(i + 2, segPattern[S0][i]);
}
digitalWrite(GND0, LOW);
delay(tdelay);
digitalWrite(GND0, HIGH);
for (uint8_t i = 0; i <= 7; i++) {
digitalWrite(i + 2, segPattern[S1][i]);
}
digitalWrite(GND1, LOW);
delay(tdelay);
digitalWrite(GND1, HIGH);
for (uint8_t i = 0; i <= 7; i++) {
digitalWrite(i + 2, segPattern[S2][i]);
}
digitalWrite(GND2, LOW);
delay(tdelay);
digitalWrite(GND2, HIGH);
}
void segDisplayHexa(byte S) {
uint16_t tdelay = 10;
bool Sbit[] = {0, 0, 0, 0, 0, 0, 0, 0};
int S0_int = 0;
int S1_int = 0;
for (int i = 7; i >= 0; i-- )
{
Sbit[7 - i] = ((S >> i) & 0x01); //shift and select first bit
}
// for(int i = 0; i < 8; i++) {
// Serial1.print(Sbit[i]);
// }
// Serial1.print(" ");
for (int bit = 0; bit < 4 ; bit++)
{
bitWrite(S1_int, 3 - bit, Sbit[bit]);
}
for (int bit = 0; bit < 4 ; bit++)
{
bitWrite(S0_int, 3 - bit, Sbit[bit + 4]);
}
for (uint8_t i = 0; i <= 7; i++) {
digitalWrite(i + 2, segPattern[S0_int][i]);
}
digitalWrite(GND0, LOW);
delay(tdelay);
digitalWrite(GND0, HIGH);
for (uint8_t i = 0; i <= 7; i++) {
digitalWrite(i + 2, segPattern[S1_int][i]);
}
digitalWrite(GND1, LOW);
delay(tdelay);
digitalWrite(GND1, HIGH);
for (uint8_t i = 0; i <= 7; i++) {
digitalWrite(i + 2, segPattern[0][i]);
}
digitalWrite(GND2, LOW);
delay(tdelay);
digitalWrite(GND2, HIGH);
}
uint8_t num = 0; // 0 -> 255
bool sw_pressOut2 = 1;
bool mode = 0;
bool sw_pressOut = 1;
bool sw_stat = 0;
void loop() {
sw_stat = digitalRead(sw2);
if(sw_stat == 1) {
if((sw_pressOut == 1)) {
mode = !mode;
sw_pressOut = 0;
}
}else{
sw_pressOut = 1;
}
if(mode == 0) {
if(digitalRead(15) == HIGH) {
if(sw_pressOut2 == 1) {
num++;
segDisplay(num);
sw_pressOut2 = 0;
delay(70);
} else {
segDisplay(num);
}
} else {
sw_pressOut2 = 1;
segDisplay(num);
delay(70);
}
} else {
byte hexa = 0x7F;
segDisplayHexa(hexa);
}
delay(10);
}
Loading
pi-pico-w
pi-pico-w