|
本帖最后由 0406445 于 2015-3-29 12:03 编辑
- #include "U8glib.h"
- U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
- int center_w=u8g.getWidth()/2-1,
- center_h=u8g.getHeight()/2-1; //定下手表的中心点
-
- void watch_ui()
- {
- u8g.drawDisc(center_w,center_h,2);//画一个实心圆
- u8g.drawCircle(center_w,center_h,center_h);//一个以屏幕高度为直径的整圆
- u8g.setFont(u8g_font_ncenB08);//调用库中一种宽度为8的字体
- u8g.setFontPosTop();
- u8g.drawStr(73,5,"1");
- u8g.drawStr(82,13,"2");
- u8g.drawStr(88,26,"3");
- u8g.drawStr(82,40,"4");
- u8g.drawStr(73,48,"5");
- u8g.drawStr(61,53,"6");
- u8g.drawStr(48,48,"7");
- u8g.drawStr(38,38,"8");
- u8g.drawStr(33,27,"9");
- u8g.drawStr(36,15,"10");
- u8g.drawStr(46,6,"11");
- u8g.drawStr(58,0,"12");
- }
- void clock(int hour,int minute,int sencond)
- {
- int hour_x,hour_y,minute_x,minute_y,sencond_x,sencond_y;
- hour_x=cos(hour*30)*5+63,hour_y=sin(hour*30)*5+15; //时针长度5
- minute_x=cos(minute*30)*10+63,minute_y=sin(minute*30)*10+15; //分针长度10
- sencond_x=cos(sencond*30)*17+63,sencond_y=sin(sencond*30)*17+15; //秒针长度17
- u8g.drawLine(center_w,center_h,hour_x,hour_y);// 时针
- u8g.drawLine(center_w,center_h,minute_x,minute_y);// 分针
- u8g.drawLine(center_w,center_h,sencond_x,sencond_y);//秒针
- }
- void watch(int h,int m,int s)
- {
- u8g.firstPage();
- do {
- watch_ui();
- clock(h,m,s);
- //u8g.setColorIndex(1);
- } while( u8g.nextPage() );
- }
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(9600);
- }
- void loop() {
- for(int h=0;h<12;h++)
- for(int m=0;m<60;m++)
- for(int s=0;s<60;s++)
- {
- Serial.println(h);
- Serial.println(m);
- Serial.println(s);
- watch(h,m,s);
- delay(1000);
- }
-
- }
复制代码
这是程序,我用的是中景的OLED1.3寸屏
还有几个问题,时针,分针,秒针怎么计算比较好,还有时钟内12个数字的摆放位置,我是不断调试才摆出这样位置,但是没用到算法,后期一些制作肯定没用,有没有好的算法推荐下 |
|