#define pinA 2 char seg[8]; char dimm=1; char d; char mode=2; // 0:set; 1:blink once; 2:no-seg-control char digits[]= { //ABCDEFG. B11111100, // 0 B01100000, B11011010, B11110010, B01100110, // 4 //ABCDEFG. B10110110, // 5 B10111110, // 6 B11100000, // 7 B11111110, // 8 B11110110, // 9 //ABCDEFG. B11101110, // 10 A B00111110, // 11 B B10011100, // 12 C [ B01111010, // 13 D B10011110, // 14 E B10001110, // 15 F B10111100, // 16 G B01101110, // 17 H B00001100, // 18 I B01111000, // 19 J B00001110, // 20 K B00011100, // L B11101100, // M B00101010, // n B00111010, // 24 o B11001110, // P B11100110, // q B10001100, // 27 R B00100110, // S B00011110, // t B01111100, // U B00111100, // v B10010010, // W B01001010, // X B01001110, // Y B11011000, // 35 Z //ABCDEFG. B00000010, // 36 - B00010010, // 37 = //ABCDEFG. B11110000, // 38 ] B00000000, // 39 empty B00010000, // 40 _ B10000000, // 41 ~ B00001110, // 42 } B10010000, // 43 : B01101100, // 44 | B01100010, // 45 { B00100000, // 46 . B00110000, // 47 , B01000000, // 48 ' B01000100, // 49 " B11000100, // 50 ^ B00111000, // 51 u B11000110, // 52 * B10110000, // 53 ; B00011010, // 54 c B00101110, // 55 h B11011110, // 56 @ B00000100, // 57 ` B00001010, // 58 r //ABCDEFG. B01110000, // 59 j }; void blank(){ for(int i=0;i<8;i++) digitalWrite(i+pinA,1); } void digit(char c){ // table index char d=digits[c]; for(char i=0;i<8;i++){ seg[i]=d&0x80; d<<=1; } } void setup() { // put your setup code here, to run once: for(char i=0;i<7;i++){ // w/o DP digitalWrite(i+pinA,1); pinMode(i+pinA,OUTPUT); seg[i]=0; // off } delay(2000); Serial.begin(115200); digitalWrite(13,0); pinMode(13,OUTPUT); } void loop() { // put your main code here, to run repeatedly: char c; char wait=0; if(Serial.available()){ c=Serial.read(); if(!mode && c>0x60 && c<='g') { char d=c-0x61; // A=0 seg[d]=!seg[d]; } else if(c=='O' ) { d=0; goto dig; } else if(c=='S' ) { d=5; goto dig; } else if(c>='A' && c<='Z') { alpha: d=c-'A'+10; goto dig; } else if(c=='!' ) { mode^=1; } else if(c=='#' ) { mode^=2; } else if(c==9) dimm^=1; else if(c=='-' ) { d=36; goto dig; } else if(c=='=' ) { d=37; goto dig; } else if(c=='['||c=='(') { d=12; goto dig; } else if(c=='o' ) { d=24; goto dig; } else if(c==']'||c==')') { d=38; goto dig; } else if(c==' ' ) { d=39; goto dig; } else if(c=='_' ) { d=40; goto dig; } else if(c=='~' ) { d=41; goto dig; } else if(c=='}' ) { d=42; goto dig; } else if(c==':' ) { d=43; goto dig; } else if(c=='|'||c=='/') { d=44; goto dig; } else if(c=='{' ) { d=45; goto dig; } else if(c=='.' ) { d=46; goto dig; } else if(c==',' ) { d=47; goto dig; } else if(c==0x27 ) { d=48; goto dig; } else if(c=='"' ) { d=49; goto dig; } else if(c=='^' ) { d=50; goto dig; } else if(c=='&'||c=='u') { d=51; goto dig; } else if(c=='*' ) { d=52; goto dig; } else if(c==';' ) { d=53; goto dig; } else if(c=='c' ) { d=54; goto dig; } else if(c=='h' ) { d=55; goto dig; } else if(c=='@' ) { d=56; goto dig; } else if(c=='`' ) { d=57; goto dig; } else if(c=='r' ) { d=58; goto dig; } else if(c=='j' ) { d=59; goto dig; } else if(c>='a' && c<='z') { c^=32; goto alpha; } else if(c>=0x30 && c<=0x39) { d=c-'0'; dig: digit(d); wait=1; /* d=digits[d]; // for(char i=0;i<8;i++){ seg[i]=d&0x80; d<<=1; }*/ } } for(char i=0;i<8;i++){ char s=seg[i]; digitalWrite(i+pinA,!s); } delay(10); if(mode&1 && wait) { delay(350); blank(); delay(50); d=39; digit(d); } else if(dimm) { blank(); delay(10); } }