ssd1306显示时钟_ssd1306中文手册

(5) 2024-07-27 12:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
ssd1306显示时钟_ssd1306中文手册,希望能够帮助你!!!。

SSD1306显示屏–时钟


要求:

​ (1)使用Arduino控制OLED 显示屏SSD1306 ( proteus中搜索UG-2864HSWEG01),在屏幕上显示一个尽可 能大的时钟表盘,包含时针、分针、秒针。时钟能够正常走字计时。在屏幕上空余的地方显示日期。

​ (2)Arduino上连接几个按钮,按下按钮时可以调整日期和时间。

注:题目来自HBUE的硬件编程考题,代码电路仅供学习交流使用,转载使用时请注明来处。

代码

/* SOFTWARE: Proteus 8 Professional CSDN: 空白之子 公众号:硬核开发(正在建设中) */ #include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13 Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); #define NUMFLAKES 10 #define XPOS 0 #define YPOS 1 #define DELTAY 2 #define LOGO16_GLCD_HEIGHT 16  #define LOGO16_GLCD_WIDTH 16  static const unsigned char PROGMEM logo16_glcd_bmp[] = { 
    B00000000, B, B00000001, B, B00000001, B, B00000011, B, B, B, B, B, B0, B, B00, B, B00011111, B, B00001101, B0, B00011011, B, B00, B, B00, B, B0, B, B0, B0, B00000000, B00 }; #if (SSD1306_LCDHEIGHT != 64) #error("Height incorrect, please fix Adafruit_SSD1306.h!"); #endif #define PI 3. int year = 2021, month = 6, day = 11; int i, j, k, hour1 , hour2 , min1 , min2 , second1 , second2; int temp[12]={ 
   31,28,31,30,31,30,31,31,30,31,30,31}; int loction[12][2]={ 
   { 
   31,3}, { 
   49,8},{ 
   58,18},{ 
   60,31},{ 
   56,44},{ 
   46,52},{ 
   33,55},{ 
   22,51},{ 
   12,43},{ 
   5,31},{ 
   7,18},{ 
   14,7}}; char clockNum[12][3] = { 
    "12", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}; void setup() { 
    Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC); display.display(); display.clearDisplay(); for (int ii = 2; ii <= 8; ++ii) pinMode(ii, INPUT); } void loop() { 
    for (i = 0; i < 24; ++i) { 
    for (j = 0; j < 60; ++j) { 
    for (k = 0; k < 60; ++k) { 
    display.setTextSize(1); display.setTextColor(WHITE); Adjust(); OutClock(); OutClockTime(); OutTime(); OutDate(); display.display(); display.clearDisplay(); delay(1000); } } } CorrectDate(); } //钟表显示函数 void OutClock(void) { 
    display.drawCircle(35, 32, 31, WHITE); display.drawPixel(35, 32, WHITE); display.setCursor(31,3); display.println("12"); for (int jj = 0; jj < 12; ++jj) { 
    display.setCursor(loction[jj][0], loction[jj][1]); display.println( clockNum[jj]); } } //钟表时间显示函数 void OutClockTime(void) { 
    hour1 = 35 + sin(PI * (i / 6.0) ) * 8; hour2 = 32 - cos(PI * (i / 6.0) ) * 8; min1 = 35 + sin(PI * (j / 30.0) ) * 12; min2 = 32 - cos(PI * (j / 30.0) ) * 12; second1 = 35 + sin(PI * (k / 30.0) ) * 16; second2 = 32 - cos(PI * (k / 30.0) ) * 16; display.drawLine(35, 32, hour1, hour2, WHITE); display.drawLine(35, 32, min1, min2, WHITE); display.drawLine(35, 32, second1, second2, WHITE); } //日期显示函数 void OutDate(void) { 
    display.setCursor(75,30); display.write((year/1000)+'0'); display.setCursor(80,30); display.write((year/100%10)+'0'); display.setCursor(85,30); display.write((year%100/10)+'0'); display.setCursor(90,30); display.write((year%10)+'0'); display.setCursor(95,30); display.println("-"); display.setCursor(100,30); display.write((month/10)+'0'); display.setCursor(105,30); display.write((month%10)+'0'); display.setCursor(110,30); display.println("-"); display.setCursor(115,30); display.write((day/10)+'0'); display.setCursor(120,30); display.write((day%10)+'0'); } //时间显示函数 void OutTime(void) { 
    display.setCursor(80,20); display.write((i/10)+'0'); display.setCursor(85,20); display.write((i%10)+'0'); display.setCursor(90,20); display.println(":"); display.setCursor(95,20); display.write((j/10)+'0'); display.setCursor(100,20); display.write((j%10)+'0'); display.setCursor(105,20); display.println(":"); display.setCursor(110,20); display.write((k/10)+'0'); display.setCursor(115,20); display.write((k%10)+'0'); } //时间日期调节函数 void Adjust(void) { 
    if (digitalRead(2) == HIGH) { 
    if (digitalRead(7) == HIGH) year++; if (digitalRead(8) == HIGH) year--; } if (digitalRead(3) == HIGH) { 
    if (digitalRead(7) == HIGH) month++; if (digitalRead(8) == HIGH) month--; } if (digitalRead(4) == HIGH) { 
    if (digitalRead(7) == HIGH) day++; if (digitalRead(8) == HIGH) day--; } if (digitalRead(5) == HIGH) { 
    if (digitalRead(7) == HIGH) i++; if (digitalRead(8) == HIGH) i--; } if (digitalRead(6) == HIGH) { 
    if (digitalRead(7) == HIGH) j++; if (digitalRead(8) == HIGH) j--; } if (i >= 24 || i < 0) i = 0; if (j >= 60 || j < 0) j = 0; } //日期更正函数 void CorrectDate(void) { 
    day++; if ( (year % 4 == 0 && year %100 != 0) || (year %400 == 0) ) temp[1] = 29; if (day > temp[month - 1] ) { 
    day = 1; month++; } if (month > 12) { 
    month = 1; year++; } } 

电路

ssd1306显示时钟_ssd1306中文手册_https://bianchenghao6.com/blog__第1张

效果

ssd1306显示时钟_ssd1306中文手册_https://bianchenghao6.com/blog__第2张

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复