20180717_012659.jpg (66.05 KB, 下載次數: 78)
下載附件
2018-7-17 01:29 上傳
- /*原創作品,冰冰潔潔,謝謝使用*/
- #include <DS3231.h>
- #include <Wire.h>
- #include <U8glib.h> //聲明庫
- U8GLIB_ST7920_128X64_4X u8g(10, 9, 8); // 聲明液晶屏 13=sck, 12=mosi, 11=cs
- int r,xo,yo,a,b,c,z;//動畫變量不能用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;//溫度
- void setup( )
- {
- 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)
- */
- u8g.setFont(u8g_font_5x7);//顯示5x7英文字符
-
- }
- 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( )
- {
-
- do
- {
-
-
- ReadDS3231();//讀取時間
- /*
- //畫點
- u8g.drawPixel(0,5);//(開始坐標x0 MAX127----y0MAX63 )
- //畫任意線
- u8g.drawLine(2,0,2,9);//(開始坐標x0 MAX127----y0MAX63結束坐標x1MAX127---y1MAX63 )
- //畫橫向軸線
- u8g.drawHLine(7,13,6);//(開始坐標x0 MAX127----y0MAX63 +Z橫軸線長
- //畫縱向軸線
- u8g.drawVLine(10,15,7);//(開始坐標x0 MAX127----y0MAX63 +Z橫軸線長
- //畫空心方框
- u8g.drawFrame(5,0,5,10);//(開始坐標x0 MAX127----y0MAX63結束坐標x0+ ---y0+ )
- //畫空心方框+圓形角度方框
- u8g.drawRFrame(0,23,6,10,1);//(開始坐標x0 MAX127----y0MAX63結束坐標x0+ ---y0+ )+Z圓形角度
- //畫實心方框
- u8g.drawBox(12,0,5,10);//(開始坐標x0 MAX127----y0MAX63結束坐標x0+ ---y0+ )
- //畫實心方框+圓形角度方框
- u8g.drawRBox(0,12,6,10,1);//(開始坐標x0 MAX127----y0MAX63結束坐標x0+ ---y0+ )+Z圓形角度
- //畫空心多邊形+圓形角度
- u8g.drawCircle(25,8,5,15);//(圓中心坐標x0MAX127----y0MAX63 )(z控制大小 h控制角度 小于大小的3倍)
- //畫實心多邊形+圓形角度
- u8g.drawDisc(25,20,5,15);//(圓中心坐標x0MAX127----y0MAX63 )(z控制大小 h控制角度 小于大小的3倍)
- //畫空心橢圓+圓形角度
- u8g.drawEllipse(5,48,5,10,15);//(圓中心坐標x0MAX127----y0MAX63 )(X+控制大小 Y+控制大小 h控制角度=最小X\\Y大小的3倍)
- //畫實心橢圓+圓形角度
- u8g.drawFilledEllipse(20,48,5,10,15);//(圓中心坐標x0MAX127----y0MAX63 )(X+控制大小 Y+控制大小 h控制角度=最小X\\Y大小的3倍)
- //畫空心三角形
- u8g.drawTriangle(30,15,40,2,50,15);//(A角坐標x0MAX127----y0MAX63 )(B角坐標x0MAX127----y0MAX63 )(C角坐標x0MAX127----y0MAX63 )
- //顯示英文字符
- u8g.drawStr(10,35,"bb");//(開始坐標x0 MAX127----y0MAX63 )
- //顯示一個變量
- u8g.setPrintPos(25,35);//(開始坐標x0 MAX127----y0MAX63()取值>0有向上寫字符 )
- u8g.print(sec);
- */
-
- //不能用char型變量無法計算
- r=17;//指針半徑
- xo=95;//圓心坐標x MAX 127
- yo=32;//圓心坐標y MAX 63
- z=180;//圓
- //int second=0;//調整
- //int minute=0;//調整
- //int 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
- //畫空心多邊形+圓形角度
- u8g.drawCircle(xo,yo,20,15);//(圓中心坐標x0MAX127----y0MAX63 )(z控制大小 h控制角度取15的倍度。MAX60)
- u8g.drawCircle(xo,yo,28,15);//(圓中心坐標x0MAX127----y0MAX63 )(z控制大小 h控制角度取15的倍度。MAX60)
- //畫實心多邊形+圓形角度
- u8g.drawDisc(xo,yo,2,15);//(圓中心坐標x0MAX127----y0MAX63 )(z控制大小 h控制角度取15的倍度。MAX60)
- //顯示英文字符
- u8g.drawStr(xo-5,yo-20,"12");//(開始坐標x0 MAX127----y0MAX63 )
- u8g.drawStr(xo+22,yo+3,"3");//(開始坐標x0 MAX127----y0MAX63 )
- u8g.drawStr(xo-2,yo+28,"6");//(開始坐標x0 MAX127----y0MAX63 )
- u8g.drawStr(xo-25,yo+3,"9");//(開始坐標x0 MAX127----y0MAX63 )
- //.畫一圈實心圓
- int B;
- for(B=0;B<12;B++)//.畫一圈實心圓
- {
- int A=B*30;//圓角度
- if(B==0||B==3||B==6||B==9)//跳過這幾個點畫實心圓
- {}
- else
- {
- u8g.drawPixel((xo+((r+7)*cos(A*3.14/z))),(yo+((r+7)*sin(A*3.14/z))));//(控制圓心位置列0/127 控制圓心位置行0/63 )(控制大小=0+x )
- }
- }
- //.畫sec時針線
- u8g.drawLine(xo,yo,(xo+(r*cos(a*3.14/z))),(yo+(r*sin(a*3.14/z))));//(開始列127 開始行63)( 結束列127 結束行63) /////00
- //.畫minute時針線
- u8g.drawLine(xo,yo,(xo+((r-3)*cos(b*3.14/z))),(yo+((r-3)*sin(b*3.14/z))));//(開始列127 開始行63)( 結束列127 結束行63) /////00
- //.畫hour時針線
- u8g.drawLine(xo,yo,(xo+((r-6)*cos(c*3.14/z))),(yo+((r-6)*sin(c*3.14/z))));//(開始列127 開始行63)( 結束列127 結束行63) /////00
-
- //顯示一個變量
- u8g.setPrintPos(2,10);//(開始坐標x0 MAX127----y0MAX63()取值>0有向上寫字符 )
- u8g.print(hour/10);
- u8g.setPrintPos(7,10);//(開始坐標x0 MAX127----y0MAX63()取值>0有向上寫字符 )
- u8g.print(hour%10);
- u8g.setPrintPos(14,10);//(開始坐標x0 MAX127----y0MAX63()取值>0有向上寫字符 )
- u8g.print(minute/10);
- u8g.setPrintPos(19,10);//(開始坐標x0 MAX127----y0MAX63()取值>0有向上寫字符 )
- u8g.print(minute%10);
- u8g.setPrintPos(26,10);//(開始坐標x0 MAX127----y0MAX63()取值>0有向上寫字符 )
- u8g.print(second/10);
- u8g.setPrintPos(31,10);//(開始坐標x0 MAX127----y0MAX63()取值>0有向上寫字符 )
- u8g.print(second%10);
- //畫空心方框
- u8g.drawFrame(0,2,37,10);//(開始坐標x0 MAX127----y0MAX63結束坐標x0+ ---y0+ )
- //畫縱向軸線
- u8g.drawVLine(12,3,8);//(開始坐標x0 MAX127----y0MAX63 +Z橫軸線長
- //畫縱向軸線
- u8g.drawVLine(24,3,8);//(開始坐標x0 MAX127----y0MAX63 +Z橫軸線長
- //顯示一個變量 ;//溫度
- u8g.setPrintPos(17,55);//(開始坐標x0 MAX127----y0MAX63()取值>0有向上寫字符 )
- u8g.print(temperature/10);
- u8g.setPrintPos(22,55);//(開始坐標x0 MAX127----y0MAX63()取值>0有向上寫字符 )
- u8g.print(temperature%10);
- //畫空心多邊形+圓形角度
- u8g.drawCircle(21,52,7,15);//(圓中心坐標x0MAX127----y0MAX63 )(z控制大小 h控制角度取15的倍度。MAX60)
- //畫空心方框+圓形角度方框
- u8g.drawRFrame(18,20,7,27,1);//(開始坐標x0 MAX127----y0MAX63結束坐標x0+ ---y0+ )+Z圓形角度
- //畫實心方框
- int wd=temperature;//圖形溫度計用變量
- if(wd>56)wd==56;//此處設計圖形溫度計最大顯示57度
- u8g.drawBox(20,(20+((60-wd)/2)),3,27-(((60-wd)/2)));//(開始坐標x0 MAX127----y0MAX63結束坐標x0+ ---y0+ )//溫度
-
-
-
-
- }
- while( u8g.nextPage( ));
- }
復制代碼
|