项目代码 
 
			
			
			- #include <Arduino.h>
 - #include <U8g2lib.h>
 - #include <TimerOne.h>
 - 
 - 
 - 
 - U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R2, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8);
 - 
 - 
 - byte inPin1 = 7;                  //digital input sw-1 marking hours or minutes
 - byte inPin2 = 6;                  //sw-2 digital input correcting minutes
 - byte inPin3 = 5;                  //digital input sw-3 correcting hours 
 - byte P1, P2;                      //button states
 - uint8_t s, m, g;                  //declaration of seconds, minutes and hours
 - boolean kropki;                   //variable of the dots
 - const char tarczaX[60] = {        //X coordinates of the target points
 -   64, 61, 56, 53, 50, 48, 45, 42, 40, 40,
 -   35, 34, 31, 29, 28, 28, 28, 29, 31, 34,
 -   35, 38, 40, 42, 45, 48, 50, 53, 56, 61,
 -   64, 68, 72, 76, 79, 82, 85, 87, 90, 92,
 -   94, 96, 98, 99, 100, 100, 100, 99, 98, 96,
 -   94, 92, 90, 87, 85, 82, 79, 76, 68, 64 };
 - const char tarczaY[60] = {        //y coordinates of the target points
 -   54, 54, 54, 54, 53, 52, 51, 49, 48, 48,
 -   44, 43, 40, 37, 35, 32, 27, 26, 23, 21,
 -   19, 17, 15, 13, 12, 10,  9,  8,  8,  8,
 -    8,  8,  8,  8,  8,  9, 10, 12, 13, 15,
 -   17, 19, 21, 23, 26, 32, 35, 37, 40, 42,
 -   44, 46, 48, 48, 48, 52, 53, 54, 54, 54 };  
 -   
 - void setup() {
 -   u8g2.begin();
 -   pinMode(inPin1, INPUT_PULLUP);          //setting the pin as a digital input
 -   pinMode(inPin2, INPUT_PULLUP);
 -   pinMode(inPin3, INPUT_PULLUP);
 -   u8g2.setContrast(220);
 -   Timer1.initialize(1000000);
 -   Timer1.attachInterrupt(toggleOutput);
 -   P1 = 0; P2 = 0; s = 0; m = 0; g = 0;
 - 
 - }
 - 
 - void loop() {
 -   u8g2.setFont(u8g2_font_9x15B_tr);
 -   u8g2.setFontDirection(2);           //select the direction of subtitles
 -   Dipsw();
 -   u8g2.firstPage();
 -   char m_str[3];
 -   strcpy(m_str, u8x8_u8toa(m, 2));    //Replace m with a string with 2 digits
 -   do {
 -     u8g2.drawStr(115,27,"9");
 -     u8g2.drawStr(20,27,"3");
 -     u8g2.drawStr(67,0,"6");
 -     u8g2.drawStr(73,52,"12"); 
 -     u8g2.drawDisc(64,32,3);                     //center of the clock
 -     u8g2.drawDisc(42,57,2);                     //hour 1
 -     u8g2.drawDisc(24,49,2);                     //hour 2
 -     u8g2.drawDisc(24,14,2);                     //hour 4
 -     u8g2.drawDisc(42,5,2);                      //hour 5
 -     u8g2.drawDisc(85,5,2);                      //hour 7
 -     u8g2.drawDisc(104,14,2);                    //hour 8
 -     u8g2.drawDisc(104,49,2);                    //hour 10
 -     u8g2.drawDisc(85,57,2);                     //hour 11    
 -     if (P1 == 1){ u8g2.drawStr(10,0,"M");}      //marking correcting minutes
 -     if (P1 == 2){ u8g2.drawStr(10,0,"H");}      //marking of correcting hours
 -     //drawing hour hand
 -     if (g == 0 or g == 12){u8g2.drawTriangle(64,49, 67,32, 61,32);}
 -     if (g == 1 or g == 13){u8g2.drawTriangle(50,49, 67,34, 61,30);}
 -     if (g == 2 or g == 14){u8g2.drawTriangle(40,42, 65,35, 60,30);}
 -     if (g == 3 or g == 15){u8g2.drawTriangle(32,32, 64,35, 64,29);}
 -     if (g == 4 or g == 16){u8g2.drawTriangle(40,21, 63,29, 63,35);}
 -     if (g == 5 or g == 17){u8g2.drawTriangle(48,13, 66,30, 62,34);}
 -     if (g == 6 or g == 18){u8g2.drawTriangle(64,13, 68,32, 60,32);}
 -     if (g == 7 or g == 19){u8g2.drawTriangle(79,13, 67,34, 62,30);}
 -     if (g == 8 or g == 20){u8g2.drawTriangle(88,21, 66,35, 63,30);}
 -     if (g == 9 or g == 21){u8g2.drawTriangle(96,32, 64,35, 64,29);}
 -     if (g == 10 or g == 22){u8g2.drawTriangle(88,42, 64,35, 65,28);}
 -     if (g == 11 or g == 23){u8g2.drawTriangle(79,49, 67,31, 62,35);}
 -     //drawing a second hand
 -     u8g2.drawLine(64,32, tarczaX[s], tarczaY[s]);
 -     // draw minute hand
 -     //u8g2.drawStr(20,50,m_str);
 -     if (m == 0) {u8g2.drawLine(67,32, 64,54); u8g2.drawLine(61,32, 64,54);}
 -     if (m == 1) {u8g2.drawLine(67,32, 60,54); u8g2.drawLine(61,32, 60,54);}
 -     if (m == 2) {u8g2.drawLine(67,32, 56,54); u8g2.drawLine(61,32, 56,54);}
 -     if (m == 3) {u8g2.drawLine(66,33, 53,54); u8g2.drawLine(61,31, 53,54);}
 -     if (m == 4) {u8g2.drawLine(66,33, 50,53); u8g2.drawLine(61,31, 50,53);}
 -     if (m == 5) {u8g2.drawLine(65,34, 48,52); u8g2.drawLine(61,30, 48,52);}
 -     if (m == 6) {u8g2.drawLine(64,34, 45,51); u8g2.drawLine(61,30, 45,51);}
 -     if (m == 7) {u8g2.drawLine(64,34, 42,49); u8g2.drawLine(61,30, 42,49);}
 -     if (m == 8) {u8g2.drawLine(64,34, 40,48); u8g2.drawLine(61,30, 40,48);}
 -     if (m == 9) {u8g2.drawLine(64,35, 38,46); u8g2.drawLine(61,30, 38,46);} 
 -     if (m == 10) {u8g2.drawLine(65,35, 35,44); u8g2.drawLine(62,30, 35,44);}
 -     if (m == 11) {u8g2.drawLine(64,35, 34,43); u8g2.drawLine(62,29, 34,43);}
 -     if (m == 12) {u8g2.drawLine(64,35, 31,40); u8g2.drawLine(62,29, 31,40);}
 -     if (m == 13) {u8g2.drawLine(64,35, 29,37); u8g2.drawLine(63,29, 29,37);}
 -     if (m == 14) {u8g2.drawLine(64,35, 28,35); u8g2.drawLine(63,29, 28,35);}
 -     if (m == 15) {u8g2.drawLine(64,35, 28,32); u8g2.drawLine(63,29, 28,32);} //
 -     if (m == 16) {u8g2.drawLine(63,35, 28,27); u8g2.drawLine(64,29, 28,27);}
 -     if (m == 17) {u8g2.drawLine(63,35, 29,26); u8g2.drawLine(64,29, 29,26);}
 -     if (m == 18) {u8g2.drawLine(63,35, 31,23); u8g2.drawLine(64,29, 31,23);}
 -     if (m == 19) {u8g2.drawLine(63,35, 34,21); u8g2.drawLine(64,29, 34,21);}          
 -     if (m == 20) {u8g2.drawLine(63,35, 35,19); u8g2.drawLine(65,29, 35,19);}
 -     if (m == 21) {u8g2.drawLine(63,35, 38,17); u8g2.drawLine(65,29, 38,17);}
 -     if (m == 22) {u8g2.drawLine(62,34, 40,15); u8g2.drawLine(65,29, 40,15);}
 -     if (m == 23) {u8g2.drawLine(62,34, 42,13); u8g2.drawLine(65,29, 42,13);}
 -     if (m == 24) {u8g2.drawLine(62,34, 45,12); u8g2.drawLine(66,29, 45,12);}
 -     if (m == 25) {u8g2.drawLine(61,34, 48,10); u8g2.drawLine(66,32, 48,10);}
 -     if (m == 26) {u8g2.drawLine(61,33, 50,9); u8g2.drawLine(66,30, 50,9);}
 -     if (m == 27) {u8g2.drawLine(66,32, 53,8); u8g2.drawLine(61,33, 53,8);}
 -     if (m == 28) {u8g2.drawLine(67,32, 56,8); u8g2.drawLine(61,33, 56,8);}
 -     if (m == 29) {u8g2.drawLine(67,32, 61,8); u8g2.drawLine(61,32, 61,8);}          
 -     if (m == 30) {u8g2.drawLine(67,32, 64,8); u8g2.drawLine(61,32, 64,8);} ///
 -     if (m == 31) {u8g2.drawLine(67,32, 68,8); u8g2.drawLine(61,32, 68,8);}
 -     if (m == 32) {u8g2.drawLine(67,32, 72,8); u8g2.drawLine(61,32, 72,8);}
 -     if (m == 33) {u8g2.drawLine(67,32, 76,8); u8g2.drawLine(61,31, 76,8);}
 -     if (m == 34) {u8g2.drawLine(67,32, 79,8); u8g2.drawLine(62,31, 79,8);}
 -     if (m == 35) {u8g2.drawLine(67,33, 82,9); u8g2.drawLine(62,30, 82,9);}
 -     if (m == 36) {u8g2.drawLine(66,34, 85,10); u8g2.drawLine(62,30, 85,10);}
 -     if (m == 37) {u8g2.drawLine(66,34, 87,12); u8g2.drawLine(62,30, 87,12);}
 -     if (m == 38) {u8g2.drawLine(66,34, 90,13); u8g2.drawLine(63,30, 90,13);}
 -     if (m == 39) {u8g2.drawLine(66,35, 92,15); u8g2.drawLine(63,30, 92,15);}          
 -     if (m == 40) {u8g2.drawLine(66,35, 94,17); u8g2.drawLine(63,30, 94,17);}
 -     if (m == 41) {u8g2.drawLine(65,35, 96,19); u8g2.drawLine(64,30, 96,19);}
 -     if (m == 42) {u8g2.drawLine(65,35, 98,21); u8g2.drawLine(64,30, 98,21);}
 -     if (m == 43) {u8g2.drawLine(65,35, 99,23); u8g2.drawLine(64,29, 99,23);}
 -     if (m == 44) {u8g2.drawLine(64,35, 100,26); u8g2.drawLine(64,29, 100,26);}
 -     if (m == 45) {u8g2.drawLine(64,35, 100,32); u8g2.drawLine(64,29, 100,32);} ///
 -     if (m == 46) {u8g2.drawLine(64,35, 100,35); u8g2.drawLine(64,29, 100,35);}
 -     if (m == 47) {u8g2.drawLine(64,35, 99,37); u8g2.drawLine(64,29, 99,37);}
 -     if (m == 48) {u8g2.drawLine(64,35, 98,40); u8g2.drawLine(64,29, 98,40);}
 -     if (m == 49) {u8g2.drawLine(64,35, 96,42); u8g2.drawLine(65,28, 96,42);}          
 -     if (m == 50) {u8g2.drawLine(64,35, 94,44); u8g2.drawLine(65,28, 94,44);}
 -     if (m == 51) {u8g2.drawLine(63,35, 92,46); u8g2.drawLine(66,30, 92,46);}
 -     if (m == 52) {u8g2.drawLine(63,35, 90,48); u8g2.drawLine(66,30, 90,48);}
 -     if (m == 53) {u8g2.drawLine(64,34, 87,48); u8g2.drawLine(66,29, 87,48);}
 -     if (m == 54) {u8g2.drawLine(63,35, 85,48); u8g2.drawLine(67,31, 85,48);}
 -     if (m == 55) {u8g2.drawLine(67,31, 82,52); u8g2.drawLine(63,35, 82,52);}
 -     if (m == 56) {u8g2.drawLine(67,31, 79,53); u8g2.drawLine(62,35, 79,53);}
 -     if (m == 57) {u8g2.drawLine(67,31, 76,54); u8g2.drawLine(62,35, 76,54);}
 -     if (m == 58) {u8g2.drawLine(67,31, 72,54); u8g2.drawLine(62,34, 72,54);}
 -     if (m == 59) {u8g2.drawLine(67,31, 68,54); u8g2.drawLine(62,32, 68,54);}                  
 -   } while ( u8g2.nextPage() );
 -   delayMicroseconds(10000); 
 - }
 - 
 - void toggleOutput(){
 -     s++;
 -     if (s == 60) {
 -       s = 0;
 -       m++;
 -     }
 -     if (m == 60) {
 -       m = 0;
 -       g++;
 -     }
 -     if (g == 24) {
 -       g = 0;
 -     } 
 -     kropki = !kropki;               //blinking colon every 1 sec.
 - }
 - 
 - void Dipsw(){
 -   byte readPin1, readPin1A, readPin2, readPin2A, readPin3, readPin3A;
 -   readPin1 = digitalRead(inPin1);           //read the state of the rotation button
 -   readPin2 = digitalRead(inPin2);           //reading the status of the right move button
 -   readPin3 = digitalRead(inPin3);           //reading the state of the move left button
 -   delay(1);
 -   readPin1A = digitalRead(inPin1);
 -   readPin2A = digitalRead(inPin2);
 -   readPin3A = digitalRead(inPin3);
 -   if (readPin1 == LOW and readPin1 == readPin1A) {
 -     //setting the time - selecting hours or minutes
 -     P1++;
 -     delay(200);
 -     if (P1 == 3){
 -       P1 = 0;
 -     }
 -   }  
 -   if (readPin2 == LOW and readPin2 == readPin2A) {
 -     //correcting hours and minutes up
 -     if (P1 == 1){                           //correcting minutes
 -        m++;
 -        if (m == 59) {m = 0;}
 -     }
 -     if (P1 == 2){                           //framing minutes
 -       g++;
 -       if (g == 24){g = 0;}
 -     }
 -     delay(200);
 -   }
 -   if (readPin3 == LOW and readPin3 == readPin3A) { 
 -   //correcting hours and minutes down
 -     if (P1 == 1){                           //correcting minutes
 -       m--;
 -       if (m >= 60) {m = 59;}
 -       if (m <= 0) {m = 59;}
 -     }
 -     if (P1 == 2){                           //correcting hours
 -       g--;
 -       if (g >= 24){g = 23;}
 -       if (g <= 0){g = 23;}
 -     }
 -     delay(200);
 -   }
 - }
 
  复制代码
  
 
 |