电子爱好者 发表于 2014-5-15 16:02:43

获取网络时间+12864液晶显示

利用了官方的库很快就实现了!{:soso_e113:}
12864与arduino uno接线图如下:
#include <SPI.h>         
#include <Ethernet.h>
#include <EthernetUdp.h>
#include "LCD12864RSPI.h"
#define AR_SIZE( a ) sizeof( a ) / sizeof( a )
LCD12864RSPI LCDA(8,9,3);   
int second,minute,hour;
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
unsigned int localPort = 8888;   
IPAddress timeServer(132, 163, 4, 101);
const int NTP_PACKET_SIZE= 48;
byte packetBuffer[ NTP_PACKET_SIZE];
EthernetUDP Udp;
unsigned char xitong[]={
0xCF, 0xB5,
0xCD, 0xB3,
0xB3, 0xF5,
0xCA, 0xBC,
0xBB, 0xAF
   };                  //系统初始化
unsigned char shijian[]={
0xB1, 0xB1,
0xBE, 0xA9,
0xCA, 0xB1,
0xBC, 0xE4
   };                  //北京时间
void setup()
          {
          kaiji();
            delay(3000);
                  Serial.begin(9600);
                     while (!Serial) {
                      ;
                  }
                  if (Ethernet.begin(mac) == 0) {
                      Serial.println("Failed to configure Ethernet using DHCP");
                      for(;;)
                        ;
                  }
            Udp.begin(localPort);
          }

void loop()
{
sendNTPpacket(timeServer);
delay(1000);
if ( Udp.parsePacket() ) {

    Udp.read(packetBuffer,NTP_PACKET_SIZE);

    unsigned long highWord = word(packetBuffer, packetBuffer);
    unsigned long lowWord = word(packetBuffer, packetBuffer);

    unsigned long secsSince1900 = highWord << 16 | lowWord;
    Serial.print("Seconds since Jan 1 1900 = " );
    Serial.println(secsSince1900);               


    Serial.print("Unix time = ");

    const unsigned long seventyYears = 2208988800UL;   

    unsigned long epoch = secsSince1900 - seventyYears;

    Serial.println(epoch);      
   
    Serial.print("beijing time is ");
if((epoch % 86400L) / 3600+8>=24)
                      {
                      Serial.print((epoch % 86400L) / 3600+8-24);
                      }
if((epoch % 86400L) / 3600+8<24)
                      {                  
                      Serial.print((epoch % 86400L) / 3600+8);
                     hour=(epoch % 86400L) / 3600+8;
                      }
    Serial.print(':');
    if ( ((epoch % 3600) / 60) < 10 ) {
                     Serial.print('0');
                     }
    Serial.print((epoch% 3600) / 60);
    minute=(epoch% 3600) / 60;
   
    Serial.print(':');
    if ( (epoch % 60) < 10 )
                        {
                            Serial.print('0');
                        }
    Serial.println(epoch %60);
    second=epoch %60;
}
shijianx();

}


unsigned long sendNTPpacket(IPAddress& address)
            {
            
                      memset(packetBuffer, 0, NTP_PACKET_SIZE);
                  
                      packetBuffer = 0b11100011;   
                      packetBuffer = 0;   
                      packetBuffer = 6;   
                      packetBuffer = 0xEC;
                     
                      packetBuffer= 49;
                      packetBuffer= 0x4E;
                      packetBuffer= 49;
                      packetBuffer= 52;
                           
                      Udp.beginPacket(address, 123);
                      Udp.write(packetBuffer,NTP_PACKET_SIZE);
                      Udp.endPacket();
            }
void kaiji()
          {
            LCDA.clear();//清屏
            LCDA.setCursor(1,0);
            LCDA.chinese(xitong,AR_SIZE(xitong));
            LCDA.print("......");
          }
void shijianx()
          {
               LCDA.clear();//清屏
               LCDA.setCursor(1,0);
               LCDA.chinese(shijian,AR_SIZE(shijian));
               LCDA.print(":");
               LCDA.setCursor(2,3);
               LCDA.print(hour);
               LCDA.print(":");
               LCDA.print(minute);
               LCDA.print(":");
               LCDA.print(second);
          }
程序还有问题希望大家优化一下。

tgyfish 发表于 2014-5-17 10:34:01

#include <EthernetUdp.h>
#include "LCD12864RSPI.h"
这两个库能共享下吗?

电子爱好者 发表于 2014-5-20 13:56:13

tgyfish 发表于 2014-5-17 10:34 static/image/common/back.gif
#include
#include "LCD12864RSPI.h"
这两个库能共享下吗?


#include "LCD12864RSPI.h"这个库论坛内有啊!
#include <EthernetUdp.h>
这个库IDE也有啊!

赛尔特防雷Setel 发表于 2014-6-2 06:52:48

菜鸟一个。看看哪位大侠有这个共享下,谢谢!如何设计获取以太网速率+2英寸液晶显示。

QQ:1416235452,可酬谢!
页: [1]
查看完整版本: 获取网络时间+12864液晶显示