找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6077|回复: 13
打印 上一主题 下一主题
收起左侧

自制DS3231大液晶屏幕12864摸拟钟

  [复制链接]
跳转到指定楼层
楼主
ID:358930 发表于 2018-7-17 01:33 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
  1. /*原创作品,冰冰洁洁,谢谢使用*/
  2. #include <DS3231.h>
  3. #include <Wire.h>
  4. #include <U8glib.h> //声明库
  5. U8GLIB_ST7920_128X64_4X u8g(10, 9, 8); // 声明液晶屏  13=sck, 12=mosi, 11=cs
  6. int r,xo,yo,a,b,c,z;//动画变量不能用char型变量无法计算
  7. DS3231 Clock;
  8. bool Century=false;
  9. bool h12;
  10. bool PM;
  11. byte ADay, AHour, AMinute, ASecond, ABits;
  12. bool ADy, A12h, Apm;
  13. int second,minute,hour,date,month,year,DoW;
  14. byte   temperature;//温度

  15. void setup( )
  16. {
  17.     delay(500);
  18.    Wire.begin();
  19.     /*
  20.          //改时间
  21.         Clock.setSecond(10);//Set the second
  22.         Clock.setMinute(40);//Set the minute
  23.         Clock.setHour(1);  //Set the hour
  24.         Clock.setDoW(7);    //Set the day of the week
  25.         Clock.setDate(24);  //Set the date of the month
  26.         Clock.setMonth(6);  //Set the month of the year
  27.         Clock.setYear(18);  //Set the year (Last two digits of the year)
  28.       */
  29.    u8g.setFont(u8g_font_5x7);//显示5x7英文字符
  30.    
  31. }
  32. void ReadDS3231()//读取时间
  33. {

  34.   second=Clock.getSecond(); //时间
  35.   minute=Clock.getMinute();//时间
  36.   hour=Clock.getHour(h12, PM);//时间
  37.   date=Clock.getDate(); //日期   
  38.   month=Clock.getMonth(Century);//日期
  39.   year=Clock.getYear();  //日期  
  40.   DoW=Clock.getDoW();//星期

  41.   temperature=Clock.getTemperature();//温度
  42. }
  43. void loop( )
  44. {
  45.    
  46.      do
  47.      {
  48.         
  49.         
  50.          ReadDS3231();//读取时间
  51.          /*
  52.         //画点  
  53.          u8g.drawPixel(0,5);//(开始坐标x0 MAX127----y0MAX63 )     
  54.         //画任意线   
  55.         u8g.drawLine(2,0,2,9);//(开始坐标x0 MAX127----y0MAX63结束坐标x1MAX127---y1MAX63 )
  56.         //画横向轴线
  57.         u8g.drawHLine(7,13,6);//(开始坐标x0 MAX127----y0MAX63 +Z横轴线长
  58.         //画纵向轴线
  59.         u8g.drawVLine(10,15,7);//(开始坐标x0 MAX127----y0MAX63 +Z横轴线长         
  60.         //画空心方框
  61.          u8g.drawFrame(5,0,5,10);//(开始坐标x0 MAX127----y0MAX63结束坐标x0+ ---y0+ )
  62.         //画空心方框+圆形角度方框
  63.          u8g.drawRFrame(0,23,6,10,1);//(开始坐标x0 MAX127----y0MAX63结束坐标x0+ ---y0+ )+Z圆形角度         
  64.          //画实心方框
  65.         u8g.drawBox(12,0,5,10);//(开始坐标x0 MAX127----y0MAX63结束坐标x0+ ---y0+ )
  66.         //画实心方框+圆形角度方框
  67.         u8g.drawRBox(0,12,6,10,1);//(开始坐标x0 MAX127----y0MAX63结束坐标x0+ ---y0+ )+Z圆形角度
  68.        //画空心多边形+圆形角度
  69.         u8g.drawCircle(25,8,5,15);//(圆中心坐标x0MAX127----y0MAX63 )(z控制大小   h控制角度 小于大小的3倍)
  70.         //画实心多边形+圆形角度
  71.         u8g.drawDisc(25,20,5,15);//(圆中心坐标x0MAX127----y0MAX63 )(z控制大小   h控制角度 小于大小的3倍)
  72.         //画空心椭圆+圆形角度
  73.         u8g.drawEllipse(5,48,5,10,15);//(圆中心坐标x0MAX127----y0MAX63 )(X+控制大小   Y+控制大小   h控制角度=最小X\\Y大小的3倍)
  74.         //画实心椭圆+圆形角度
  75.         u8g.drawFilledEllipse(20,48,5,10,15);//(圆中心坐标x0MAX127----y0MAX63 )(X+控制大小   Y+控制大小   h控制角度=最小X\\Y大小的3倍)
  76.         //画空心三角形
  77.         u8g.drawTriangle(30,15,40,2,50,15);//(A角坐标x0MAX127----y0MAX63 )(B角坐标x0MAX127----y0MAX63 )(C角坐标x0MAX127----y0MAX63 )
  78.         //显示英文字符
  79.         u8g.drawStr(10,35,"bb");//(开始坐标x0 MAX127----y0MAX63 )  
  80.        //显示一个变量  
  81.         u8g.setPrintPos(25,35);//(开始坐标x0 MAX127----y0MAX63()取值>0有向上写字符 )  
  82.         u8g.print(sec);  
  83.         */
  84.         
  85.        //不能用char型变量无法计算
  86.         r=17;//指针半径
  87.         xo=95;//圆心坐标x MAX 127
  88.         yo=32;//圆心坐标y  MAX 63
  89.         z=180;//圆
  90.         //int second=0;//调整
  91.         //int minute=0;//调整
  92.          //int hour=0;//调整
  93.          int  hour1=hour;
  94.          if(hour1>12)
  95.       {hour1=hour1-12;}
  96.        else
  97.       {hour1=hour1;}
  98.       
  99.         a=(second-15)*6;//圆角度360/60
  100.         b=(minute-15)*6;//圆角度360/60
  101.         c=(hour1-15)*30;//圆角度360/12
  102.        //画空心多边形+圆形角度
  103.        u8g.drawCircle(xo,yo,20,15);//(圆中心坐标x0MAX127----y0MAX63 )(z控制大小   h控制角度取15的倍度。MAX60)
  104.        u8g.drawCircle(xo,yo,28,15);//(圆中心坐标x0MAX127----y0MAX63 )(z控制大小   h控制角度取15的倍度。MAX60)
  105.        //画实心多边形+圆形角度
  106.        u8g.drawDisc(xo,yo,2,15);//(圆中心坐标x0MAX127----y0MAX63 )(z控制大小   h控制角度取15的倍度。MAX60)
  107.         //显示英文字符
  108.        u8g.drawStr(xo-5,yo-20,"12");//(开始坐标x0 MAX127----y0MAX63 )  
  109.        u8g.drawStr(xo+22,yo+3,"3");//(开始坐标x0 MAX127----y0MAX63 )  
  110.        u8g.drawStr(xo-2,yo+28,"6");//(开始坐标x0 MAX127----y0MAX63 )  
  111.        u8g.drawStr(xo-25,yo+3,"9");//(开始坐标x0 MAX127----y0MAX63 )
  112.         //.画一圈实心圆
  113.    int B;  
  114.    for(B=0;B<12;B++)//.画一圈实心圆
  115.    {
  116.      int A=B*30;//圆角度
  117.     if(B==0||B==3||B==6||B==9)//跳过这几个点画实心圆
  118.     {}
  119.     else
  120.    {
  121.     u8g.drawPixel((xo+((r+7)*cos(A*3.14/z))),(yo+((r+7)*sin(A*3.14/z))));//(控制圆心位置列0/127   控制圆心位置行0/63  )(控制大小=0+x )
  122.    }
  123.    }
  124.        //.画sec时针线      
  125.        u8g.drawLine(xo,yo,(xo+(r*cos(a*3.14/z))),(yo+(r*sin(a*3.14/z))));//(开始列127  开始行63)( 结束列127 结束行63) /////00
  126.         //.画minute时针线  
  127.       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
  128.      //.画hour时针线  
  129.       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   
  130.         
  131.        //显示一个变量  
  132.         u8g.setPrintPos(2,10);//(开始坐标x0 MAX127----y0MAX63()取值>0有向上写字符 )  
  133.         u8g.print(hour/10);
  134.         u8g.setPrintPos(7,10);//(开始坐标x0 MAX127----y0MAX63()取值>0有向上写字符 )
  135.         u8g.print(hour%10);
  136.         u8g.setPrintPos(14,10);//(开始坐标x0 MAX127----y0MAX63()取值>0有向上写字符 )  
  137.         u8g.print(minute/10);
  138.         u8g.setPrintPos(19,10);//(开始坐标x0 MAX127----y0MAX63()取值>0有向上写字符 )  
  139.         u8g.print(minute%10);
  140.         u8g.setPrintPos(26,10);//(开始坐标x0 MAX127----y0MAX63()取值>0有向上写字符 )  
  141.         u8g.print(second/10);
  142.         u8g.setPrintPos(31,10);//(开始坐标x0 MAX127----y0MAX63()取值>0有向上写字符 )  
  143.         u8g.print(second%10);
  144.         //画空心方框
  145.          u8g.drawFrame(0,2,37,10);//(开始坐标x0 MAX127----y0MAX63结束坐标x0+ ---y0+ )
  146.         //画纵向轴线
  147.         u8g.drawVLine(12,3,8);//(开始坐标x0 MAX127----y0MAX63 +Z横轴线长
  148.         //画纵向轴线
  149.         u8g.drawVLine(24,3,8);//(开始坐标x0 MAX127----y0MAX63 +Z横轴线长
  150.         //显示一个变量 ;//温度
  151.         u8g.setPrintPos(17,55);//(开始坐标x0 MAX127----y0MAX63()取值>0有向上写字符 )  
  152.         u8g.print(temperature/10);
  153.         u8g.setPrintPos(22,55);//(开始坐标x0 MAX127----y0MAX63()取值>0有向上写字符 )
  154.         u8g.print(temperature%10);
  155.         //画空心多边形+圆形角度
  156.          u8g.drawCircle(21,52,7,15);//(圆中心坐标x0MAX127----y0MAX63 )(z控制大小   h控制角度取15的倍度。MAX60)
  157.          //画空心方框+圆形角度方框
  158.          u8g.drawRFrame(18,20,7,27,1);//(开始坐标x0 MAX127----y0MAX63结束坐标x0+ ---y0+ )+Z圆形角度
  159.         //画实心方框
  160.         int wd=temperature;//图形温度计用变量
  161.         if(wd>56)wd==56;//此处设计图形温度计最大显示57度
  162.         u8g.drawBox(20,(20+((60-wd)/2)),3,27-(((60-wd)/2)));//(开始坐标x0 MAX127----y0MAX63结束坐标x0+ ---y0+ )//温度
  163.         
  164.    
  165.          
  166.          

  167.      }
  168.    while( u8g.nextPage( ));   
  169. }
复制代码


评分

参与人数 3黑币 +70 收起 理由
YJGG + 10 很给力!
深蓝远景 + 10 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏8 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-7-17 02:25 | 只看该作者
源码压缩包能传一下吗?头文件
回复

使用道具 举报

板凳
ID:358930 发表于 2018-7-17 02:45 来自手机 | 只看该作者
admin 发表于 2018-7-17 02:25
源码压缩包能传一下吗?头文件

我试试上传。头文件都有的,我总想用摸拟钟,就自己做了,关键是能得黑币,有了黑币就能好好学习了。谢谢版主回复。
回复

使用道具 举报

地板
ID:358930 发表于 2018-7-17 03:01 来自手机 | 只看该作者
admin 发表于 2018-7-17 02:25
源码压缩包能传一下吗?头文件

已经上传了头文件和源代码压缩包。

128显图形摸拟钟OK1.rar

2.42 KB, 下载次数: 82, 下载积分: 黑币 -5

头文件与资料.rar

1.35 MB, 下载次数: 78, 下载积分: 黑币 -5

回复

使用道具 举报

5#
ID:1 发表于 2018-7-17 04:53 | 只看该作者
能加下我qq吗,我问下关于上传错误的事情
回复

使用道具 举报

6#
ID:358930 发表于 2018-7-17 23:09 来自手机 | 只看该作者
冰冰洁洁 发表于 2018-7-17 03:01
已经上传了头文件和源代码压缩包。

加入中文12X12汉字和日期更美了。

20180717_230502.jpg (30.32 KB, 下载次数: 82)

20180717_230502.jpg
回复

使用道具 举报

7#
ID:879141 发表于 2021-2-6 21:55 来自手机 | 只看该作者
比較特別的一款時鐘,模擬+數字。多謝分享!
回复

使用道具 举报

8#
ID:880257 发表于 2021-2-8 09:26 | 只看该作者
Arduino时钟别样玩法,赞!
回复

使用道具 举报

9#
ID:886894 发表于 2021-2-27 17:42 | 只看该作者
按程序引脚接入12864,屏幕没显示是怎么回事?搞不懂。
回复

使用道具 举报

10#
ID:328014 发表于 2021-2-27 18:48 | 只看该作者
12864有好几种,程序不通用的,还有带不带字库的区别,楼主这个应该是ST7920的
回复

使用道具 举报

11#
ID:28992 发表于 2021-3-24 07:29 | 只看该作者
thank you so much!
回复

使用道具 举报

12#
ID:607710 发表于 2021-3-26 20:03 | 只看该作者
时钟我做了很多种,都不能让自己满意
回复

使用道具 举报

13#
ID:41582 发表于 2021-5-27 15:04 | 只看该作者
谢谢!借鉴思路
回复

使用道具 举报

14#
ID:64089 发表于 2021-5-31 10:08 | 只看该作者
这个还是很有意思的,获取时间不是太会,可以参考楼主的资料学习一下。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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