图片在底部
- //A4 SDA
- //A5 SCL
- //0X57 0X68
- #include <Arduino.h>
- #include <DS3231.h>
- #include <Wire.h>
- #include <Adafruit_GFX.h>
- #include <Adafruit_SSD1306.h>
-
- int r,xo,yo,a,b,c,z;//动画变量不能用char型变量无法计算
- int sec;//动画变量不能用char型变量无法计算
- DS3231 Clock;
- bool Century=false;
- bool h12;
- bool PM;
- byte ADay, AHour, AMinute, ASecond, ABits;
- bool ADy, A12h, Apm;
- int second,minute,hour,date,month,year,DoW;
- byte temperature;//温度
- #define OLED_RESET 4
- Adafruit_SSD1306 display(OLED_RESET);
- #define NUMFLAKES 10
- #define XPOS 0
- #define YPOS 1
- #define DELTAY 2
- #define LOGO16_GLCD_HEIGHT 16
- #define LOGO16_GLCD_WIDTH 16
- #if (SSD1306_LCDHEIGHT != 64)
- #error("Height incorrect, please fix Adafruit_SSD1306.h!");
- #endif
- int x;//动画变量
- //显示一个心形
- static const uint8_t PROGMEM Heart_16x16[] = {
- 0x00,0x00,0x18,0x18,0x3C,0x3C,0x7E,0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0x7F,0xFE,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,0x07,0xE0,0x03,0xC0,0x00,0x00//未命名文件0
- };
- static const uint8_t PROGMEM bbjj_16x16[] ={
- 0x00,0x00,0x23,0xF8,0x12,0x08,0x12,0x08,0x83,0xF8,0x42,0x08,0x42,0x08,0x13,0xF8,
- 0x10,0x00,0x27,0xFC,0xE4,0xA4,0x24,0xA4,0x24,0xA4,0x24,0xA4,0x2F,0xFE,0x00,0x00,/*"温",0*/
- 0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x3F,0xFC,0x22,0x20,0x22,0x20,
- 0x23,0xE0,0x20,0x00,0x2F,0xF0,0x24,0x10,0x42,0x20,0x41,0xC0,0x86,0x30,0x38,0x0E,/*"度",1*/
- };
- void setup() {
- // Serial.begin(115200);
- delay(500);
- Wire.begin();
- /*
- //改时间
- Clock.setSecond(10);//Set the second
- Clock.setMinute(40);//Set the minute
- Clock.setHour(1); //Set the hour
- Clock.setDoW(7); //Set the day of the week
- Clock.setDate(24); //Set the date of the month
- Clock.setMonth(6); //Set the month of the year
- Clock.setYear(18); //Set the year (Last two digits of the year)
- */
- display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64)
- }
- void ReadDS3231()//读取时间
- {
- second=Clock.getSecond(); //时间
- minute=Clock.getMinute();//时间
- hour=Clock.getHour(h12, PM);//时间
- date=Clock.getDate(); //日期
- month=Clock.getMonth(Century);//日期
- year=Clock.getYear(); //日期
- DoW=Clock.getDoW();//星期
-
- temperature=Clock.getTemperature();//温度
- }
- void loop() {
- ReadDS3231();//读取时间
-
- //1.检测全屏显示(看看有没有大面积坏点)
- display.fillScreen(WHITE);//检测全屏显示(看看有没有大面积坏点)
- display.clearDisplay(); // clears the screen and buffer
-
- /*
- //2.画点 点坐标(10,10)
- display.drawPixel(20, 20, WHITE);// 列127 行63 画点 点坐标
-
- //3. 画线 从(0,0)到(50,50)
- display.drawLine(20, 25,20,63, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
-
- //4.画空心矩形 左上角坐标(x0,y0) 右下角坐标(x1,y1)
- display.drawRect(2,50,10,10,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 结束大小=行+Y)
-
- //5.画个实心矩形
- display.fillRect(2,35,10,10,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 结束大小=行+Y)
-
- //6.画空心圆
- display.drawCircle(36,50,6,WHITE);//(控制圆心位置列0/127 控制圆心位置行0/63 )(控制大小=0+x )
-
- //7.画实心圆
- display.fillCircle(36,30,6,WHITE);//(控制圆心位置列0/127 控制圆心位置行0/63 )(控制大小=0+x )
-
- //8.画空心三角形
- display.drawTriangle(60,32,45,43,70,43,WHITE);//(控制三角形A点列0/127 行0/63 控制三角形B点列0/127 行0/63 控制三角形C点列0/127 行0/63)
-
- //9.画实心三角形
- display.fillTriangle(86,32,72,43,100,43,WHITE);//(控制三角形A点列0/127 行0/63 控制三角形B点列0/127 行0/63 控制三角形C点列0/127 行0/63)
-
- //10.画空心圆角矩形
- display.drawRoundRect(50,17,15,15,2,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 结束大小=行+Y 控制圆角=+x)
-
- //11.画实心圆角矩形
- display.fillRoundRect(70,17,15,15,2,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 结束大小=行+Y 控制圆角=+x)
-
- //12.画心形(自己用取模软件画的)相当于一个任意16X16字
- display.drawBitmap(88,17,Heart_16x16,16,16,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=16 结束大小=16)这里只能是16X16因为是16X16字
-
- //13.显示英文
- display.setTextSize(2);//设置字体大小
- display.setTextColor(WHITE);//设置字体不反白
- display.setCursor(0,0);//列127 行63 坐标
- display.println("bb");
-
- //14.显示数字变量
- display.setTextSize(2);//设置字体大小
- display.setTextColor(BLACK, WHITE); //设置字体反白
- display.setCursor(30,0);//列127 行63 坐标
- display.println(x);
-
- //15.显示16进制变量
- display.setTextSize(2);
- display.setTextColor(WHITE);//设置字体不反白
- display.setCursor(60,0);//列127 行63 坐标
- display.print("0x");
- display.println(x, HEX);
-
- //16.显示单个文字 就是调用drawBitmap(自己用取模软件取模)相当于一个任意16X16字
- //display.drawBitmap(0,17,Strong_16x16,16,16,BLACK);//可用BLACK黑字在图片上显示(控制位置列0/127 控制位置行0/63 )(控制大小=16 结束大小=16)这里只能是16X16因为是16X16字
- display.drawBitmap(0,17,Strong_16x16,16,16,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=16 结束大小=16)这里只能是16X16因为是16X16字
-
- //17.显示多个文字(在库里面加入一个ShowCN_16方法 为了同时显示多个中文 16X16 ,不然的话 就得一个一个drawBitmap)
- display.ShowCN_16(0,45, bbjj_16x16,sizeof(bbjj_16x16)/32,WHITE);//查找数组法(控制位置列0/127 控制位置行0/63 )
- */
- //6.画空心圆
- display.drawCircle(xo,yo,19,WHITE);//(控制圆心位置列0/127 控制圆心位置行0/63 )(控制大小=0+x )
- display.drawCircle(xo,yo,25+6,WHITE);//(控制圆心位置列0/127 控制圆心位置行0/63 )(控制大小=0+x )
- //7.画实心圆
- display.fillCircle(xo,yo,2,WHITE);//(控制圆心位置列0/127 控制圆心位置行0/63 )(控制大小=0+x )
- //不能用char型变量无法计算
- r=17;//指针半径
- xo=80;//圆心坐标x MAX 127
- yo=32;//圆心坐标y MAX 63
- z=180;//圆
- //second=0;//调整
- // minute=0;//调整
- // hour=0;//调整
- int hour1=hour;
- if(hour1>12)
- {hour1=hour1-12;}
- else
- {hour1=hour1;}
- a=(second-15)*6;//圆角度360/60
- b=(minute-15)*6;//圆角度360/60
- c=(hour1-15)*30;//圆角度360/12
- //.画一圈实心圆
- int B;
- for(B=0;B<12;B++)//.画一圈实心圆
- {
- int A=B*30;//圆角度
- if(B==0||B==3||B==6||B==9)//跳过这几个点画实心圆
- {}
- else
- {
- display.fillCircle((xo+((r+9)*cos(A*3.14/z))),(yo+((r+9)*sin(A*3.14/z))),1,WHITE);//(控制圆心位置列0/127 控制圆心位置行0/63 )(控制大小=0+x )
- }
- }
- //.画sec时针线
- display.drawLine((xo+(r*cos(a*3.14/z))),(yo+(r*sin(a*3.14/z))),xo,yo, WHITE);//(开始列127 开始行63)( 结束列127 结束行63) /////00
- //.画minute时针线
- display.drawLine((xo+((r-2)*cos(b*3.14/z))),(yo+((r-2)*sin(b*3.14/z))),xo,yo, WHITE);//(开始列127 开始行63)( 结束列127 结束行63) /////00
- //.画hour时针线
- display.drawLine((xo+((r-6)*cos(c*3.14/z))),(yo+((r-6)*sin(c*3.14/z))),xo,yo, WHITE);//(开始列127 开始行63)( 结束列127 结束行63) /////00
-
- //7.画实心圆//.画sec时针线
- display.fillCircle((xo+((r-4)*cos(a*3.14/z))),(yo+((r-4)*sin(a*3.14/z))),2,WHITE);//(控制圆心位置列0/127 控制圆心位置行0/63 )(控制大小=0+x )
-
- //13.显示英文
- display.setTextSize(1);//设置字体大小
- display.setTextColor(WHITE);//设置字体不反白
- display.setCursor(xo-6,yo-29);//列127 行63 坐标
- display.println("12");
- display.setCursor(xo+22,yo-2);//列127 行63 坐标
- display.println("3");
- display.setCursor(xo-2,yo+22);//列127 行63 坐标
- display.println("6");
- display.setCursor(xo-27,yo-3);//列127 行63 坐标
- display.println("9");
-
-
- // 17.显示多个文字(在库里面加入一个ShowCN_16方法 为了同时显示多个中文 16X16 ,不然的话 就得一个一个drawBitmap)
- display.ShowCN_16(0,40, bbjj_16x16,sizeof(bbjj_16x16)/32,WHITE);//查找数组法(控制位置列0/127 控制位置行0/63 )
-
- display.setTextSize(3);
- display.setTextColor(WHITE);
-
- display.setCursor(0,17);
- display.println((int)temperature);////温度
-
- display.setTextSize(1);
- display.setTextColor(WHITE);
- display.setCursor(0,5);
- display.println((int)hour/10);////
- display.setCursor(7,5);
- display.println((int)hour%10);////
- display.setCursor(18,5);
- display.println((int)minute/10);////
- display.setCursor(25,5);
- display.println((int)minute%10);////
- display.setCursor(37,5);
- display.println((int)second/10);////
- display.setCursor(44,5);
- display.println((int)second%10);////
-
- display.drawPixel(15, 6, WHITE);// 列127 行63 画点 点坐标
- display.drawPixel(15, 10, WHITE);// 列127 行63 画点 点坐标
- display.drawPixel(33, 6, WHITE);// 列127 行63 画点 点坐标
- display.drawPixel(33, 10, WHITE);// 列127 行63 画点 点坐标
-
- //11.画空心圆角矩形
- display.drawRoundRect(37,16,9,30,3,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 结束大小=行+Y 控制圆角=+x)
- //6.画空心圆
- display.fillCircle(41,50,7,WHITE);//(控制圆心位置列0/127 控制圆心位置行0/63 )(控制大小=0+x )
- //5.画个实心矩形
- display.fillRect(39,(16+((60-temperature)/2)),5,30-(((60-temperature)/2)),WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 结束大小=行+Y)//温度
-
- display.display();
-
-
- }
复制代码 |