电波钟单片机代码

 

#include <LiquidCrystal.h>
#include <Metro.h> 
#include <Wire.h>   
LiquidCrystal lcd(9, 8, 6, 5, 4, 3);

#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#define printByte(args)  write((byte)args)
#else
#include "WProgram.h"
#define printByte(args)  print(args,BYTE)
#endif

uint8_t nian[8]= {0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02};
uint8_t yue[8]= {0x0F,0x09,0x0F,0x09,0x0F,0x09,0x0B,0x11};
uint8_t ri[8] = {0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x11};


const int blinkPin1 = 13; 
int key = 2; 

boolean blink1State = false;   
Metro blink1Metro = Metro(1000);     

int timeWidth = 0, dataOut = 0, lostData = 0, flag = 0;
int P0 = 0, P1 = 0, P2 = 0, P3 = 0, P4 = 0;
int BPChour = 0, BPCminute = 0, BPCsecond = 0;
int BPCweek = 0, BPCday = 0, BPCmonth = 0, BPCyear = 0;
int BPCArray[19] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };


void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
  pinMode(13, OUTPUT);    
 pinMode(2, INPUT);  
 lcd.createChar(0, nian);
    lcd.createChar(1, yue); 
    lcd.createChar(2, ri);
}

void loop() {
   if( digitalRead(key)==LOW)
  {

 if(blink1Metro.check()){  
    blink1State = !blink1State;    
    digitalWrite(blinkPin1, blink1State); 
  }   
  int sensorValue = analogRead(A0);

while(lostData<12)
{
   int sensorValue = analogRead(A0);
if(sensorValue>300)
{
  lostData++;
 Serial.print(lostData); 
 Serial.print(" ");
  Serial.print(sensorValue); 
 Serial.println(""); 
}
  else
  {
    lostData=0;
    Serial.print(lostData); 
     Serial.print(" ");
     Serial.print(sensorValue); 
     Serial.println(""); 
  }
  delay(100);
}


  if (sensorValue<300){                

    timeWidth++;

  }

  else if (timeWidth != 0){           
    dataOut = timeWidth - 1;

    //Serial.print(dataOut);      

    BPCArray[flag] = dataOut;

    flag++;

    timeWidth = 0;

  }

  else{                              

    BPCArray[18] = dataOut;

    if (flag==19){                  

      Serial.println("");

      int i;

      for (i = 0; i < 19; i = i + 1) {

        Serial.print(BPCArray[i]); 

      }

      Serial.println("");

      P1 = BPCArray[0];

      P2 = BPCArray[1];

      P3 = BPCArray[9];

      P4 = BPCArray[18];


      if (BPCArray[0] * 20 + 20 == 60){

        BPCsecond = 0;

        BPCminute = BPCArray[4] * 16 + BPCArray[5] * 4 + BPCArray[6] + 1;

      }

      else{

        BPCsecond = BPCArray[0] * 20 + 20;

        BPCminute = BPCArray[4] * 16 + BPCArray[5] * 4 + BPCArray[6];

      }

      if (BPCminute == 60){

        BPChour = BPCArray[2] * 4 + BPCArray[3] + 1;

        BPCminute = 0;

      }

      else{

        BPChour = BPCArray[2] * 4 + BPCArray[3];

      }

      if (BPChour == 0){         //noon 12

        BPChour = 12;

      }

      BPCweek = BPCArray[7] * 4 + BPCArray[8];

      BPCday = BPCArray[10] * 16 + BPCArray[11] * 4 + BPCArray[12];

      BPCmonth = BPCArray[13] * 4 + BPCArray[14];

      BPCyear = 2000 + BPCArray[15] * 16 + BPCArray[16] * 4 + BPCArray[17];

      Serial.print(BPCyear);
      lcd.setCursor(0,0);lcd.print(BPCyear);

      Serial.printByte(0);
      lcd.setCursor(4, 0);
      lcd.printByte(0);

      Serial.print(BPCmonth);
      if (BPCmonth<10)
      {
        lcd.setCursor(5, 0); lcd.print("0");
        lcd.setCursor(6, 0); lcd.print(BPCmonth);
      }
      else{
        lcd.setCursor(5, 0); lcd.print(BPCmonth);
      }

      Serial.printByte(1);
      lcd.setCursor(7, 0);
      lcd.printByte(1);

      Serial.print(BPCday);
      if (BPCday<10)
      {
        lcd.setCursor(8, 0); lcd.print("0");
        lcd.setCursor(9, 0); lcd.print(BPCday);
      }
      else{
        lcd.setCursor(8, 0); lcd.print(BPCday);
      }

      Serial.printByte(2);
      lcd.setCursor(10, 0);
      lcd.printByte(2);
      lcd.setCursor(11, 0); lcd.print(" ");
     
      Serial.print(BPCweek);
      switch (BPCweek)
      {
      case 1:
        lcd.setCursor(12, 0); lcd.print("Mon");
        break;
      case 2:
        lcd.setCursor(12, 0); lcd.print("Tue");
        break;
      case 3:
        lcd.setCursor(12, 0); lcd.print("Wed");
        break;
      case 4:
        lcd.setCursor(12, 0); lcd.print("Thu");
        break;
      case 5:
        lcd.setCursor(12, 0); lcd.print("Fri");
        break;
      case 6:
        lcd.setCursor(12, 0); lcd.print("Sat");
        break;
      case 7:
        lcd.setCursor(12, 0); lcd.print("Sun");
        break;
      default:
        break;
      }

      Serial.print(" ");
      lcd.setCursor(15, 0); lcd.print(" ");

      Serial.print("   ");
      lcd.setCursor(0, 1); lcd.print("   ");

      Serial.print(BPChour);
      if (BPChour<10)
      {
        lcd.setCursor(3, 1); lcd.print("0");
        lcd.setCursor(4, 1); lcd.print(BPChour);
      }
      else{
        lcd.setCursor(3, 1); lcd.print(BPChour);
      }

      Serial.print(":");
      lcd.setCursor(5, 1); lcd.print(":");

      Serial.print(BPCminute);
      if (BPCminute<10)
      {
        lcd.setCursor(6, 1); lcd.print("0");
        lcd.setCursor(7, 1); lcd.print(BPCminute);
      }
      else{
        lcd.setCursor(6, 1); lcd.print(BPCminute);
      }


      Serial.print(":");
      lcd.setCursor(8, 1); lcd.print(":");

      Serial.print(BPCsecond);
      if (BPCsecond<10)
      {
        lcd.setCursor(9, 1); lcd.print("0");
        lcd.setCursor(10, 1); lcd.print(BPCsecond);
      }
      else{
        lcd.setCursor(9, 1); lcd.print(BPCsecond);
      }

      Serial.print(" ");
      lcd.setCursor(11, 1); lcd.print(" ");


      if (P3<2)
      {
        Serial.print("AM");
        lcd.setCursor(12, 1); lcd.print("AM");
      }

      else{
        Serial.print("PM");
        lcd.setCursor(12, 1); lcd.print("PM");
      }
      Serial.print("  ");
      lcd.setCursor(14, 1); lcd.print("  ");


      Serial.println("");
      Serial.println("------------------------------------");

          flag = 0;
      lostData = 0;

      
    }
  }

  delay(100);        
  }
   else{
    digitalWrite(13,HIGH); 
 }
 
}

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值