找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4940|回复: 4
收起左侧

OLED12864液晶摸拟指针时钟

[复制链接]
ID:358930 发表于 2018-7-13 23:13 来自手机 | 显示全部楼层 |阅读模式
/*
* 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);
   
  
}
20180712_195644.jpg
回复

使用道具 举报

ID:108715 发表于 2019-2-16 21:41 | 显示全部楼层
请问能帮我改个STC12单片机的吗?目前只学了单片机。万分感谢。
3064471943@qq.com
回复

使用道具 举报

ID:317383 发表于 2019-2-21 07:31 | 显示全部楼层
做的不错,厉害
回复

使用道具 举报

ID:471632 发表于 2019-2-22 11:33 | 显示全部楼层
好牛呀!
回复

使用道具 举报

ID:91165 发表于 2020-3-21 10:41 | 显示全部楼层
这个是ARDUINO的程序还是esp8266的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表