极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10411|回复: 3

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

[复制链接]
发表于 2014-5-15 16:02:43 | 显示全部楼层 |阅读模式
利用了官方的库很快就实现了!{:soso_e113:}
12864与arduino uno接线图如下:
  1. #include <SPI.h>         
  2. #include <Ethernet.h>
  3. #include <EthernetUdp.h>
  4. #include "LCD12864RSPI.h"
  5. #define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
  6. LCD12864RSPI LCDA(8,9,3);   
  7. int second,minute,hour;
  8. byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
  9. unsigned int localPort = 8888;     
  10. IPAddress timeServer(132, 163, 4, 101);
  11. const int NTP_PACKET_SIZE= 48;
  12. byte packetBuffer[ NTP_PACKET_SIZE];
  13. EthernetUDP Udp;
  14. unsigned char xitong[]={
  15.   0xCF, 0xB5,
  16.   0xCD, 0xB3,
  17.   0xB3, 0xF5,
  18.   0xCA, 0xBC,
  19.   0xBB, 0xAF
  20.      };                    //系统初始化
  21. unsigned char shijian[]={
  22.   0xB1, 0xB1,
  23.   0xBE, 0xA9,
  24.   0xCA, 0xB1,
  25.   0xBC, 0xE4
  26.      };                    //北京时间
  27. void setup()
  28.           {  
  29.           kaiji();
  30.               delay(3000);
  31.                     Serial.begin(9600);
  32.                      while (!Serial) {
  33.                       ;
  34.                     }
  35.                     if (Ethernet.begin(mac) == 0) {
  36.                       Serial.println("Failed to configure Ethernet using DHCP");
  37.                       for(;;)
  38.                         ;
  39.                     }
  40.             Udp.begin(localPort);
  41.           }

  42. void loop()
  43. {
  44.   sendNTPpacket(timeServer);
  45.   delay(1000);  
  46.   if ( Udp.parsePacket() ) {  
  47.   
  48.     Udp.read(packetBuffer,NTP_PACKET_SIZE);  

  49.     unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
  50.     unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);  

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

  54.   
  55.     Serial.print("Unix time = ");

  56.     const unsigned long seventyYears = 2208988800UL;     

  57.     unsigned long epoch = secsSince1900 - seventyYears;  

  58.     Serial.println(epoch);      
  59.    
  60.     Serial.print("beijing time is ");
  61. if((epoch % 86400L) / 3600+8>=24)
  62.                       {
  63.                       Serial.print((epoch % 86400L) / 3600+8-24);
  64.                       }
  65. if((epoch % 86400L) / 3600+8<24)
  66.                       {                  
  67.                       Serial.print((epoch % 86400L) / 3600+8);
  68.                      hour=(epoch % 86400L) / 3600+8;
  69.                       }
  70.     Serial.print(':');  
  71.     if ( ((epoch % 3600) / 60) < 10 ) {
  72.                        Serial.print('0');
  73.                        }
  74.     Serial.print((epoch  % 3600) / 60);
  75.     minute=(epoch  % 3600) / 60;
  76.    
  77.     Serial.print(':');
  78.     if ( (epoch % 60) < 10 )
  79.                           {
  80.                             Serial.print('0');
  81.                           }
  82.     Serial.println(epoch %60);
  83.     second=epoch %60;
  84.   }
  85. shijianx();

  86. }


  87. unsigned long sendNTPpacket(IPAddress& address)
  88.               {
  89.               
  90.                       memset(packetBuffer, 0, NTP_PACKET_SIZE);
  91.                     
  92.                       packetBuffer[0] = 0b11100011;   
  93.                       packetBuffer[1] = 0;     
  94.                       packetBuffer[2] = 6;     
  95.                       packetBuffer[3] = 0xEC;  
  96.                      
  97.                       packetBuffer[12]  = 49;
  98.                       packetBuffer[13]  = 0x4E;
  99.                       packetBuffer[14]  = 49;
  100.                       packetBuffer[15]  = 52;
  101.                            
  102.                       Udp.beginPacket(address, 123);
  103.                       Udp.write(packetBuffer,NTP_PACKET_SIZE);
  104.                       Udp.endPacket();
  105.               }
  106. void kaiji()
  107.           {
  108.               LCDA.clear();//清屏
  109.               LCDA.setCursor(1,0);
  110.               LCDA.chinese(xitong,AR_SIZE(xitong));
  111.               LCDA.print("......");
  112.           }
  113. void shijianx()
  114.           {
  115.                LCDA.clear();//清屏
  116.                LCDA.setCursor(1,0);
  117.                LCDA.chinese(shijian,AR_SIZE(shijian));
  118.                LCDA.print(":");
  119.                LCDA.setCursor(2,3);
  120.                LCDA.print(hour);
  121.                LCDA.print(":");
  122.                LCDA.print(minute);
  123.                LCDA.print(":");
  124.                LCDA.print(second);
  125.           }
复制代码

程序还有问题希望大家优化一下。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-5-17 10:34:01 | 显示全部楼层
#include <EthernetUdp.h>
#include "LCD12864RSPI.h"
这两个库能共享下吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-20 13:56:13 | 显示全部楼层
tgyfish 发表于 2014-5-17 10:34
#include
#include "LCD12864RSPI.h"
这两个库能共享下吗?


#include "LCD12864RSPI.h"这个库论坛内有啊!
#include <EthernetUdp.h>
这个库IDE也有啊!
回复 支持 反对

使用道具 举报

发表于 2014-6-2 06:52:48 | 显示全部楼层
菜鸟一个。看看哪位大侠有这个共享下,谢谢!如何设计获取以太网速率+2英寸液晶显示。

QQ:1416235452,可酬谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-18 19:55 , Processed in 0.050774 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表