久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5818|回復: 9
收起左側

0.96液晶做的圖形指針溫度計很夢幻

  [復制鏈接]
ID:358930 發表于 2018-11-9 21:23 | 顯示全部樓層 |閱讀模式
本帖最后由 冰冰潔潔 于 2018-11-9 21:25 編輯

一些常用庫我打包在之前發的貼子里,找找吧。我習慣把新庫加好了備份一下打包。/* 16X16點陣顯示 取模方式 陰碼+逐行式+順向
**/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DS18B20.h"
float Temp_Buffer = 0;    //存放溫度值的10倍
DS18B20 myDS18B20(A0);
int r,xo,yo,a,z;//動畫變量不能用char型變量無法計算
int sec;//動畫變量不能用char型變量無法計算

#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);
  // 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() {


  //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(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;//圓心坐標 MAX 127
  yo=32;//圓心坐標  MAX 63
  z=180;//圓
  a=sec*6;//圓角度
  //.畫一圈實心圓
   int B;  
   for(B=0;B<12;B++)//.畫一圈實心圓
   {
     int A=B*30;//圓角度
    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

   //13.顯示英文
  display.setTextSize(1);//設置字體大小
  display.setTextColor(WHITE);//設置字體不反白
  display.setCursor(xo-3,yo-29);//列127 行63     坐標
  display.println("0");
  display.setCursor(xo+20,yo-5);//列127 行63     坐標
  display.println("15");
  display.setCursor(xo-5,yo+22);//列127 行63     坐標
  display.println("30");
  display.setCursor(xo-30,yo-5);//列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);////溫度
  sec=Temp_Buffer-15;//用于修正表針位置
  display.display();
  //delay(2000);


}




#include<main.h>
#include<1602.h>
#include<ds1302.h>
uchar time[]={40,27,1,9,11,5,18};        //改時間用,初始化時間2012年7月25日 23:59: 40
uchar code tab1[]="20  -  -   ";
uchar code tab2[]="T:        :  :";
uchar flag;
uchar wendu;




void delay(uint x)
{
        uint m,n;
        for(m=x;m>0;m--)
        for(n=110;n>0;n--);
}
/****
*******        串口初始化函數
*****/
void uart_init()
{
        TMOD=0x20;                //9600bps
        SCON=0x50;
        TH1=0xFD;
        TL1=0xFD;
        TR1=1;


        ES=1;
        EA=1;


        UART_EN=0;           //串口一直處于接收狀態
}




void main()
{
        
        lcd_init();        
        uart_init();
        lcd_write_str(0x80,tab1);
        lcd_write_str(0xc0,tab2);
        //DS1302_set_time(&time);        //初始化時間,正常后不要,讀1302自己保存的時間
        //改好時間后不要這句,再下一次程序以后從1302讀時間
        while(1)
        {        
                DS1302_read_time(&time);         
                lcd_write_time(0x82,time[6]);  //年
                switch(time[5])                               //星期
                {
                        case 1:        lcd_write_str(0x8c,"MON");break;
                        case 2:        lcd_write_str(0x8c,"TUE");break;
                        case 3:        lcd_write_str(0x8c,"WED");break;
                        case 4:        lcd_write_str(0x8c,"THU");break;
                        case 5:        lcd_write_str(0x8c,"FRI");break;
                        case 6:        lcd_write_str(0x8c,"SAT");break;
                        case 7:        lcd_write_str(0x8c,"SUN");break;
                }
                lcd_write_time(0x85,time[4]);  //月
                lcd_write_time(0x88,time[3]);  //日
                lcd_write_time(0xc8,time[2]);  //時
                lcd_write_time(0xcb,time[1]);  //分
                lcd_write_time(0xce,time[0]);        //秒
                if(flag==1)                                                   //顯示負溫度
                {
                        lcd_write_com(0xc2);
                        lcd_write_date('-');
                        lcd_wendu(0xc6,wendu);
                }
                else                                                         //顯示正溫度
                {
                        lcd_write_com(0xc2);
                  lcd_write_date('+');
                        lcd_wendu(0xc3,wendu);
                        lcd_write_com(0xc6);
                        lcd_write_date('C');
                }        
        }
}
/****
*******        串口中斷服務程序函數
*****/
void ser() interrupt 4
{
        static uchar string[2],i;
        if(RI)
        {
                RI=0;
                string[i++]=SBUF;
                if(i>1)
                        i=0;
                if(string[0]=='-')
                {         
                 

20181109_210247.jpg
20181109_210322.jpg

O128顯示圖形溫度計OK3.zip

5.34 KB, 下載次數: 52, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +10 收起 理由
azi197417 + 10 共享資料的黑幣獎勵!這個值得膜拜!

查看全部評分

回復

使用道具 舉報

ID:358930 發表于 2018-11-9 21:27 | 顯示全部樓層
復制多了一點其它代碼,下面一段。壓縮包是對的。
回復

使用道具 舉報

ID:452731 發表于 2019-1-20 23:24 | 顯示全部樓層
學習中!我最多智能給10個黑幣@!全給你,祝你有更有意思的作品出現
回復

使用道具 舉報

ID:358930 發表于 2019-1-21 03:23 來自觸屏版 | 顯示全部樓層
azi197417 發表于 2019-1-20 23:24
學習中!我最多智能給10個黑幣@!全給你,祝你有更有意思的作品出現

還是謝謝你的黑幣,我其實黑幣很多,真心用不著。
回復

使用道具 舉報

ID:60624 發表于 2019-3-2 11:39 | 顯示全部樓層
ShowCN_16這個咋搞,怎么在庫里面添加,編譯顯示ShowCN_16錯誤。
回復

使用道具 舉報

ID:722238 發表于 2020-4-4 14:57 | 顯示全部樓層
很實用的教程,謝謝。
回復

使用道具 舉報

ID:171746 發表于 2020-4-16 17:57 | 顯示全部樓層
#error("Height incorrect, please fix Adafruit_SSD1306.h!");   編譯卡到這句樂,怎么解決?謝謝
回復

使用道具 舉報

ID:5212 發表于 2021-9-4 10:07 來自觸屏版 | 顯示全部樓層
這個有意思
回復

使用道具 舉報

ID:291765 發表于 2021-9-4 16:40 | 顯示全部樓層
謝謝貼主,學習了。
回復

使用道具 舉報

ID:5212 發表于 2021-9-5 12:41 | 顯示全部樓層
Arduino:1.8.12 (Windows 7), 開發板:"Arduino Nano, ATmega328P (Old Bootloader)"

sketch_jul06a:153:11: error: 'class Adafruit_SSD1306' has no member named 'ShowCN_16'

使用 1.0  版本的庫 Wire 在文件夾: F:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire
使用 1.10.10  版本的庫 Adafruit_GFX_Library 在文件夾: F:\Arduino\libraries\Adafruit_GFX_Library
使用 2.4.6  版本的庫 Adafruit_SSD1306 在文件夾: F:\Arduino\libraries\Adafruit_SSD1306
使用 1.0  版本的庫 SPI 在文件夾: F:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI
使用 1.8.3  版本的庫 Adafruit_BusIO 在文件夾: F:\Arduino\libraries\Adafruit_BusIO
exit status 1
'class Adafruit_SSD1306' has no member named 'ShowCN_16'

這個報錯是什么意思

http://m.zg4o1577.cn/bbs/dpj-211984-1.html
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩成人在线播放 | 亚洲人在线播放 | 蜜桃一区二区三区在线 | 亚洲一视频 | 久久精品一区二区三区四区 | 一级一级毛片免费看 | 99久久免费精品国产免费高清 | 欧日韩不卡在线视频 | 成人在线观看免费爱爱 | 中文在线一区二区 | 精品国产一区久久 | 精品久久久久久久久久久久久久 | 久在线视频播放免费视频 | 国产精品久久国产精品99 | 免费一二区 | 久久夜视频 | 国产精品美女久久久 | 久久99这里只有精品 | 日本欧美国产在线 | 久久成人国产 | 亚洲免费在线 | 精品综合视频 | 午夜精品影院 | 成在线人视频免费视频 | 免费日韩网站 | 中文字幕高清 | 伊人电影院av| 久久久久久久久一区 | 天天搞天天搞 | 欧美视频在线免费 | 国产高清在线精品 | 不卡一区二区三区四区 | 中文字幕第一页在线 | 男人天堂av网站 | 免费一区二区三区 | 欧美午夜一区二区三区免费大片 | 亚洲精品国产偷自在线观看 | 中文字幕视频在线观看免费 | 成人精品一区 | 欧美4p | 成人免费看黄网站在线观看 |