新 Nano(三)三种风格的时钟

DS1302,翻出以前的测试代码加了几种显示风格的切换,洋气一些了。

新 Nano(三)三种风格的时钟_第1张图片

/* SSD1306 SH1106 略有不同,注意替换下面3句。begin放setup里

#include 
Adafruit_SH1106G display = Adafruit_SH1106G(128, 64, &Wire, -1);
  display.begin(0x3C, true);         

#include 
Adafruit_SSD1306 display(128, 64, &Wire, 4);
  display.begin(SSD1306_SWITCHCAPVCC,0x3C);
*/

#include 
Adafruit_SSD1306 display(128, 64, &Wire, 4);

  
#include 
#include 
ThreeWire myWire(9,10,8); // Data, SCLK, CE
RtcDS1302 Rtc(myWire);
int yue , ri, nian, shi , fen , miao , zhou ;
int layout = 0; // 0 1 2
boolean if_Touch;       // 是否检测到“触摸式按键”的标志
long last_touched_time=0;
 
void setup(){
  pinMode(12,OUTPUT);digitalWrite(12,HIGH);  // DS1302 Vcc
  pinMode(11,OUTPUT);digitalWrite(11,LOW);   // DS1302 Gnd
  
  pinMode(A0,OUTPUT);digitalWrite(A0,HIGH);  // Touch Vcc  ,data=A2, 注意不同模块引脚不同
  pinMode(A1,OUTPUT);digitalWrite(A1,LOW);   // Touch Gnd
  
  Rtc.Begin();
  RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__); //Set Time for Rtc Object
  //RtcDateTime compiled = RtcDateTime(2022,12,31,0,0,1);
  
  Serial.begin(115200); 
  display.begin(SSD1306_SWITCHCAPVCC,0x3C);       
  display.setTextColor(1); 
}
 
void loop(){
  RtcDateTime now = Rtc.GetDateTime();
  Serial.print(now.Minute());Serial.print(":");Serial.println(now.Second());
  show_time(now);
  // delay(100);
  /* 按键检测100ms */
  for ( int i = 0 ; i < 10 ; i++){
     if(digitalRead(A2) & (millis()-last_touched_time > 500) ) {
      if_Touch = 1;
      last_touched_time = millis();
     }
     delay(10);
  }
  
}

void show_time(const RtcDateTime & dt) { //时间显示页面
  String z_str;
  yue  = dt.Month(); String  yue_str = String(yue);
  ri   = dt.Day();   String   ri_str = String(ri);
  nian = dt.Year();  String nian_str = String(nian);
  shi  = dt.Hour();  String  shi_str = String(shi); if (shi<10) shi_str = "0"+shi_str;
  fen  = dt.Minute();String  fen_str = String(fen); if (fen<10) fen_str = "0"+fen_str;
  miao = dt.Second();String miao_str = String(miao);if (miao<10)miao_str= "0"+miao_str;
  zhou = dt.DayOfWeek();
  switch (zhou){    
    case 1: z_str = "Mon"; break;
    case 2: z_str = "Tue"; break;
    case 3: z_str = "Wed"; break;
    case 4: z_str = "Thu"; break;
    case 5: z_str = "Fri"; break;
    case 6: z_str = "Sat"; break;
    case 7: z_str = "Sun"; break;
  }
  /* 按键处理 */
  if(if_Touch){                                 
    if_Touch = 0;
    layout++;
    if(layout>2) layout=0;
  }
  display.clearDisplay();
  switch (layout){ 
    case 0:{
      display.setCursor(0,0);  display.setTextSize(4);display.print(shi_str + ":" + fen_str);
      display.setCursor(48,33);display.setTextSize(2);display.print(miao_str);
      display.setCursor(20,55);display.setTextSize(1);display.print(nian_str +"-"+ yue_str +"-"+ ri_str +" "+ z_str);  
      break;        
    }
    case 1:{
      display.setCursor(30,0);  display.setTextSize(2);display.print(shi_str + ":" + fen_str);
      display.setCursor(40,20);display.setTextSize(4);display.print(miao_str);
      display.setCursor(20,55);display.setTextSize(1);display.print(nian_str +"-"+ yue_str +"-"+ ri_str +" "+ z_str);
      break;        
    }
    case 2:{
      display.setCursor(35,0); display.setTextSize(1);display.print(shi_str +":"+ fen_str +":"+ miao_str);
      display.setCursor(10,15);display.setTextSize(2);display.print(nian_str +"-"+ yue_str +"-"+ ri_str);
      display.setCursor(15,38);display.setTextSize(3);display.print(ri_str);display.setCursor(60,38);display.print(z_str);      
      break;        
    }    
  } 
  display.display();  
}

你可能感兴趣的:(算法,单片机)