VFD顯示的時鐘。用ESP8266控制,自動聯(lián)網(wǎng)WiFi對時。顯示效果如圖:
IMG_20210710_190743.jpg (1.11 MB, 下載次數(shù): 121)
下載附件
2021-7-29 14:29 上傳
直接上代碼:
//用ESP8266控制自動聯(lián)網(wǎng)對時的VFD時鐘
//VFD型號:VFD-8-MD-06INKM
- #include <NTPClient.h>
- #include <ESP8266WiFi.h>
- #include <WiFiUdp.h>
- #include <time.h>
- #include <SPI.h>
- #define VFD_MOSI 13
- #define VFD_CLK 14
- #define VFD_CS 15
- #define VFD_RST 16
- #define VFD_DIMMING_UP 5 //亮度+
- #define VFD_DIMMING_DOWN 4 //亮度-
- //修改成需要連接的WiFi
- const char *ssid = "WiFi名稱";
- const char *password = "WiFi密碼";
- static char VFD_Dimming = 0x8f; //VFD默認亮度
- WiFiUDP ntpUDP;
- NTPClient timeClient(ntpUDP, "time1.aliyun.com", 28800, 60000);
- /*
- 參數(shù)說明:
- 1. udp : 創(chuàng)建的UDP連接
- 2. poolServerName : 服務器地址, 默認: time.nist.gov
- 3. timeOffset : 時區(qū), 默認0, 單位秒, 北京在第8時區(qū) 3600*8
- 4. milliseconds : 刷新時間間隔, 毫秒
- */
- void VFD_DISP(char data[8]){
- for(uint8_t i=0; i<8; i++){
- digitalWrite(VFD_CS, LOW);
- SPI.transfer(0x20+i); //定位
- SPI.transfer(data[i]); //顯示的數(shù)據(jù)
- digitalWrite(VFD_CS, HIGH);
- }
- digitalWrite(VFD_CS, LOW);
- SPI.transfer(0xe8); //開顯示
- digitalWrite(VFD_CS, HIGH);
- }
- void VFD_SetDimming(char dimming){
- digitalWrite(VFD_CS, LOW);
- SPI.transfer(0xe4);
- SPI.transfer(dimming);
- digitalWrite(VFD_CS, HIGH);
- }
- void setup() {
- SPI.begin();
- pinMode(VFD_RST, OUTPUT);
- pinMode(VFD_CS, OUTPUT);
- pinMode(VFD_DIMMING_UP, INPUT);
- pinMode(VFD_DIMMING_DOWN, INPUT);
- //復位VFD
- digitalWrite(VFD_RST, LOW);
- delay(500);
- digitalWrite(VFD_RST, HIGH);
- //選通VFD
- digitalWrite(VFD_CS, HIGH);
- //設置SPI參數(shù)
- SPI.setBitOrder(LSBFIRST); //LSB(SPI數(shù)據(jù)格式,低位在前)
- SPI.setClockDivider(SPI_CLOCK_DIV64); //SPI時鐘,2~128,(實測:64->250KHz, 128->125KHz)
- SPI.setDataMode(SPI_MODE3); //SPI模式,0~3,
- /*
- 0:空閑時時鐘信號CLK為低電平,第1個邊沿開始采樣;
- 1:空閑時時鐘信號CLK為低電平,第2個邊沿開始采樣;
- 2:空閑時時鐘信號CLK為高電平,第1個邊沿開始采樣;
- 3:空閑時時鐘信號CLK為高電平,第2個邊沿開始采樣;
- */
- //初始化VFD
- //顯示設置位數(shù)
- digitalWrite(VFD_CS, LOW);
- SPI.transfer(0xe0);
- SPI.transfer(0x07); //(8位)
- digitalWrite(VFD_CS, HIGH);
- VFD_SetDimming(VFD_Dimming);
- char s[8] = {0x0d,'W','i','F','i','.','.','.'};
- WiFi.mode(WIFI_STA);
- WiFi.begin(ssid, password);
- while ( WiFi.status() != WL_CONNECTED ) {
- VFD_DISP(s);
- delay (500);
- }
- timeClient.begin();
- delay(1000);
- }
- void loop() {
- timeClient.update();
- time_t t = timeClient.getEpochTime(); //獲得時間戳
- struct tm *p = gmtime(&t);
- char sDate[16], sTime[16];
- //strftime(sDate, 16, "%Y-%m-%d", p);
- strftime(sTime, 16, "%H:%M:%S", p);
- VFD_DISP(sTime);
- delay(500);
- //調整VFD亮度
- while(digitalRead(VFD_DIMMING_UP) == LOW){
- if(VFD_Dimming < 0xf0){
- VFD_Dimming++;
- VFD_SetDimming(VFD_Dimming);
- char s[8] = {0x08,'D','i','m','m','i','n','g'};
- VFD_DISP(s);
- }
- delay(50);
- }
- while(digitalRead(VFD_DIMMING_DOWN) == LOW){
- if(VFD_Dimming > 0x01){
- VFD_Dimming--;
- VFD_SetDimming(VFD_Dimming);
- char s[8] = {0x09,'D','i','m','m','i','n','g'};
- VFD_DISP(s);
- }
- delay(50);
- }
- }
復制代碼
|