#define SEGA 4
#define SEGB 5
#define SEGC 6
#define SEGD 7
#define SEGE 15
#define SEGF 16
#define SEGG 17
#define SEGDP 18
#define DIG1 46
#define DIG2 9
#define DIG3 10
#define DIG4 11
#define Timedelay 5
char StrNum[20];
int Num = 0;
byte TBSEG[] = {0xfc, 0x60, 0xda, 0xf2, 0x66, 0xb6, 0xbe, 0xe0, 0xfe, 0xf6,0x00,0x9e,0x2a,0x7a,0xce, 0x7c, 0x9c, 0x6e};
byte PORTIO[] = {SEGA, SEGB, SEGC, SEGD, SEGE, SEGF, SEGG, SEGDP};
byte DIG[] = {DIG1, DIG2, DIG3, DIG4};
hw_timer_t *timer = NULL;
void IRAM_ATTR onTimer(){ // 1uSx1000=1mSx5=5mS
static int digit=3;
if(++digit>=4)digit=0; // Count 0-3
ASCII_to_BCD(StrNum[digit], digit+1);
}
void setup() {
Serial.begin(115200);
//Serial.println("Hello, ESP32-S3!");
for (int i = 0; i < 8; i++) {
pinMode(PORTIO[i], OUTPUT);
}
for (int i = 0; i < 4; i++) {
pinMode(DIG[i], OUTPUT);
}
sprintf(StrNum, "PUCH");
// Set timer frequency to 1Mhz
timer = timerBegin(1000000); //t=1/F = 1uS
// Attach onTimer function to our timer.
timerAttachInterrupt(timer, &onTimer); // Interrupt Vector
// Set alarm to call onTimer function every second (value in microseconds).
// Repeat the alarm (third parameter) with unlimited count = 0 (fourth parameter).
timerAlarm(timer, 20*1000, true, 0); // 1uSx1000=1mSx5=5mS
}
void BCD_to_SEG(byte BCD, byte dig) {
byte segment = TBSEG[BCD]; // 0x60
digitalWrite(DIG1, HIGH);
digitalWrite(DIG2, HIGH);
digitalWrite(DIG3, HIGH);
digitalWrite(DIG4, HIGH);
for (int i = 0; i < 8; i++) {
if (segment & (0x80 >> i))
digitalWrite(PORTIO[i], HIGH);
else
digitalWrite(PORTIO[i], LOW);
}
switch (dig) {
case 1: digitalWrite(DIG1, LOW); break;
case 2: digitalWrite(DIG2, LOW); break;
case 3: digitalWrite(DIG3, LOW); break;
case 4: digitalWrite(DIG4, LOW); break;
}
//delay(Timedelay);
}
void ASCII_to_BCD(byte ascii, byte dig) {
byte BCD;
switch(ascii){
case ' ' : BCD = 10; break;
case 'E' : BCD = 11; break;
case 'n' : BCD = 12; break;
case 'd' : BCD = 13; break;
case 'P' : BCD = 14; break;
case 'U' : BCD = 15; break;
case 'C' : BCD = 16; break;
case 'H' : BCD = 17; break;
default : BCD = ascii & 15;
}
BCD_to_SEG(BCD, dig);
}
void ASCII_to_SEG(byte ascii, byte dig) {
byte segment;
switch (ascii) {
case 'E': segment = 0x9e; break;
case 'N': segment = 0x2a; break;
case 'D': segment = 0x7a; break;
case ' ': segment = 0x00; break;
}
digitalWrite(DIG1, HIGH);
digitalWrite(DIG2, HIGH);
digitalWrite(DIG3, HIGH);
digitalWrite(DIG4, HIGH);
for (int i = 0; i < 8; i++) {
if (segment & (0x80 >> i))
digitalWrite(PORTIO[i], HIGH);
else
digitalWrite(PORTIO[i], LOW);
}
switch (dig) {
case 1: digitalWrite(DIG1, LOW); break;
case 2: digitalWrite(DIG2, LOW); break;
case 3: digitalWrite(DIG3, LOW); break;
case 4: digitalWrite(DIG4, LOW); break;
}
delay(Timedelay);
}
void loop() {
while (true) {
delay(500);
}
}
Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1