日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Arduino提高篇23—OLED电子时钟

發布時間:2023/12/8 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Arduino提高篇23—OLED电子时钟 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在前篇文章中,我們通過庫函數驅動DS1302獲取到時間數據并且通過串口輸出,而串口只是方便調試,要制作電子時鐘,我們需要使用顯示模塊,本篇結合OLED對時間數據進行展示。

1. 實驗材料

  • Uno R3開發板
  • 配套USB數據線
  • 公對母杜邦線
  • 面包板及配套連接線
  • OLED顯示屏
  • DS1302模塊

2. 實驗步驟

1. 根據原理圖搭建電路圖。

在前篇基礎上添加了OLED模塊連接。DS1302模塊的VCC和GND連接Uno開發板的3.3V和GND。DS1302模塊的CLK、DAT、RST對應連接Uno開發板的4、3、2引腳。OLED的VCC和GND分別連接開發板的3.3V和GND,OLED的SDA、SCL分別連接開發板的A4、A5引腳。

實驗原理圖如下圖所示:

實物連接圖如下圖所示:

2. 新建sketch,拷貝如下代碼替換自動生成的代碼并進行保存。

#include <DS1302.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h>#define OLED_RESET 4 Adafruit_SSD1306 oled(128, 64, &Wire, OLED_RESET);DS1302 rtc(2, 3, 4); //對應DS1302的RST,DAT,CLKint sec_temp;void initRTCTime(void)//初始化RTC時鐘 {rtc.writeProtect(false); //關閉寫保護rtc.halt(false); //清除時鐘停止標志Time t(2020, 4, 25, 21, 50, 50, 7); //新建時間對象 最后參數位星期數據,周日為1,周一為2以此類推rtc.time(t);//向DS1302設置時間數據 }void updatTime()//打印時間數據 {Time tim = rtc.time(); //從DS1302獲取時間數據char date[20];char timer[20];snprintf(date, sizeof(date), "%04d-%02d-%02d",tim.yr, tim.mon, tim.date);snprintf(timer, sizeof(timer), "%02d:%02d:%02d",tim.hr, tim.min, tim.sec);if (tim.sec != sec_temp) { //一秒刷新一次oled.clearDisplay();//清屏oled.setCursor(15, 2);//設置顯示位置oled.println("--CLOCK--");oled.setCursor(4, 25);//設置顯示位置oled.println(date);oled.setCursor(18, 50);//設置顯示位置oled.println(timer);oled.display(); // 開顯示}sec_temp = tim.sec; }void setup() {oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);oled.setTextColor(WHITE);//開像素點發光oled.clearDisplay();//清屏oled.setTextSize(2); //設置字體大小//新模塊上電需要設置一次當前時間,//下載完成后需屏蔽此函數再次下載,否則每次上電都會初始化時間數據// initRTCTime();}void loop() {updatTime(); }

3. 連接開發板,設置好對應端口號和開發板類型,進行程序下載。

3. 實驗現象

OLED顯示效果如下:

4. 程序說明

在DS1302的各種電子時鐘制作中,我們經常會遇到時鐘走時不準的情況。除了DS1302芯片本身問題,大部分是由晶振精度及匹配電容造成的。對于要求不高的應用,我們可以大概測量每天的誤差范圍,大概率是走時過快的,然后在程序中加入每天自動校準的操作。

另外會發現秒數變化不均勻,時快時慢,這跟屏幕的刷新頻率有關。我們可以使用定時器,一秒獲取一次DS1302數據進行刷新。而本篇程序中通過對比前后兩次獲取到的時間數據中秒的值,當秒數改變后進行一次刷新。


關注公眾號「TonyCode」,更多精彩內容分享。
回復「1024」獲取1000G學習資料。
個人博客

總結

以上是生活随笔為你收集整理的Arduino提高篇23—OLED电子时钟的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。