/*
* 16X16点阵显示 取模方式 阴码+逐行式+顺向
**/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DS18B20.h"
float Temp_Buffer = 0; //存放温度值的10倍
DS18B20 myDS18B20(A0);
#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 Strong_16x16[] = {
0x00,0x40,0x40,0x40,0x20,0x40,0x20,0x44,0x00,0x68,0x07,0x70,0x11,0x60,0x11,0x50,
0x21,0x50,0xE2,0x48,0x22,0x48,0x24,0x44,0x28,0x42,0x20,0x40,0x21,0x40,0x00,0x80,/*"冰",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);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64)
}
void loop() {
x++;
if(x==60)x=0;
//1.检测全屏显示(看看有没有大面积坏点)
display.fillScreen(WHITE);//检测全屏显示(看看有没有大面积坏点)
display.clearDisplay(); // clears the screen and buffer
/*
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(60,40,23,WHITE);//(控制圆心位置列0/127 控制圆心位置行0/63 )(控制大小=0+x )
//7.画实心圆
display.fillCircle(60,40,2,WHITE);//(控制圆心位置列0/127 控制圆心位置行0/63 )(控制大小=0+x )
//3. 画线 从(0,0)到(50,50)
if(x==0)display.drawLine(60,20,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63) /////00
if(x==1)display.drawLine(62,22,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==2)display.drawLine(64,24,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==3)display.drawLine(66,26,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==4)display.drawLine(68,28,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==6)display.drawLine(70,30,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==7)display.drawLine(71,31,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==8)display.drawLine(72,32,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==9)display.drawLine(73,33,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==10)display.drawLine(74,34,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==11)display.drawLine(75,35,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==12)display.drawLine(76,36,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==13)display.drawLine(78,38,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==14)display.drawLine(79,39,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==15)display.drawLine(80,40,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)////15
if(x==16)display.drawLine(78,42,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==17)display.drawLine(76,44,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==18)display.drawLine(74,46,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==19)display.drawLine(72,48,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==20)display.drawLine(70,50,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==21)display.drawLine(69,51,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==22)display.drawLine(68,52,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==23)display.drawLine(67,53,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==24)display.drawLine(66,54,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==25)display.drawLine(65,55,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==26)display.drawLine(64,56,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==27)display.drawLine(63,57,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==28)display.drawLine(62,58,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==29)display.drawLine(61,59,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==30)display.drawLine(60,60,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)////18
if(x==31)display.drawLine(58,58,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==32)display.drawLine(56,56,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==33)display.drawLine(54,54,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==34)display.drawLine(52,52,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==35)display.drawLine(50,50,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==36)display.drawLine(49,49,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==37)display.drawLine(48,48,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==38)display.drawLine(47,47,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==39)display.drawLine(46,46,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==40)display.drawLine(45,45,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==41)display.drawLine(44,44,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==42)display.drawLine(43,43,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==43)display.drawLine(42,42,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==44)display.drawLine(41,41,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==45)display.drawLine(40,40,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)//00
if(x==46)display.drawLine(42,38,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==47)display.drawLine(44,36,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==48)display.drawLine(46,34,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==49)display.drawLine(48,32,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==50)display.drawLine(49,31,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==51)display.drawLine(50,30,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==52)display.drawLine(51,29,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==53)display.drawLine(52,28,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==54)display.drawLine(53,27,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==55)display.drawLine(54,26,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==56)display.drawLine(55,25,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==57)display.drawLine(56,24,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==58)display.drawLine(57,23,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
if(x==59)display.drawLine(58,22,60,40, WHITE);//(开始列127 开始行63)( 结束列127 结束行63)
//13.显示英文
display.setTextSize(1);//设置字体大小
display.setTextColor(WHITE);//设置字体不反白
display.setCursor(58,18);//列127 行63 坐标
display.println("0");
display.setCursor(70,35);//列127 行63 坐标
display.println("15");
display.setCursor(56,55);//列127 行63 坐标
display.println("30");
display.setCursor(38,35);//列127 行63 坐标
display.println("45");
// 17.显示多个文字(在库里面加入一个ShowCN_16方法 为了同时显示多个中文 16X16 ,不然的话 就得一个一个drawBitmap)
display.ShowCN_16(0,40, bbjj_16x16,sizeof(bbjj_16x16)/32,WHITE);//查找数组法(控制位置列0/127 控制位置行0/63 )
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,17);
Temp_Buffer = myDS18B20.Get_temp();////温度
display.println((int)Temp_Buffer);////温度
x=Temp_Buffer;
display.display();
//delay(2000);
} |