一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
楼主: zhou19852
收起左侧

应该算比较漂亮的点阵了,分享指针时钟程序

[复制链接]
发表于 2015-9-9 12:37 | 显示全部楼层
漂亮
发表于 2015-9-9 22:43 来自手机 | 显示全部楼层
那个指针时钟不错,有特色
发表于 2015-9-9 22:59 | 显示全部楼层
指针时钟不错,能否学习下
 楼主| 发表于 2015-9-10 09:26 | 显示全部楼层
本帖最后由 zhou19852 于 2015-9-10 09:36 编辑
xiaomage 发表于 2015-9-9 22:59
指针时钟不错,能否学习下

/**************************************************************************
指针式时钟
说明:
入口:
                x0 = 表盘圆心X坐标
                y0 = 表盘圆心Y坐标
                r=表盘半径
                ClkCor = 表盘颜色
                SecPotCor = 秒针颜色
                MinPotCor= 分钟颜色
                HourPotCor= 时针颜色
                *Clocker = 当前时间结构体
返回:无
**************************************************************************/
void ClockDial(uchar x0,y0,r,ClkCor,SecPotCor,MinPotCor,HourPotCor,Clock *Clocker)                  
{                 
        //角度转弧度公式         2*PI/360*角度
        #define  PI 3.1415926
        float i;
  static float idata RadSecondx,RadSecondy,RadMinutex,RadMinutey,RadHourx,RadHoury;
        for(i=0;i<=2*PI;i+=PI/6)                //画表盘12等分:2*PI/12
                        {
                          PrintDot( x0+r*sin(i),y0+r*cos(i),0,ClkCor);
                          PrintDot( x0+(r-1)*sin(i),y0+(r-1)*cos(i),0,ClkCor) ;
                  }
        
        Linexy(x0,y0,x0+(r-3)*RadSecondx,y0-(r-3)*RadSecondy,0,Black) ;     //清除上一秒针轨迹
        RadSecondx=sin(PI/180*6*BCDtoHEX(Clocker->Second));                        //计算秒针当前弧度正余弦
        RadSecondy=cos(PI/180*6*BCDtoHEX(Clocker->Second));
        Linexy(x0,y0,x0+(r-3)*RadSecondx,y0-(r-3)*RadSecondy,0,SecPotCor) ;//画出当前秒针

        Linexy(x0,y0,x0+(r-5)*RadMinutex,y0-(r-5)*RadMinutey,0,Black) ;         //清除上一分针轨迹
        RadMinutex=sin(PI/180*6*BCDtoHEX(Clocker->Minute));                        //计算分针当前弧度正余弦
        RadMinutey=cos(PI/180*6*BCDtoHEX(Clocker->Minute));
        Linexy(x0,y0,x0+(r-5)*RadMinutex,y0-(r-5)*RadMinutey,0,MinPotCor) ;  //画出当前分针
               
        Linexy(x0,y0,x0+(r-9)*RadHourx,y0-(r-9)*RadHoury,0,Black) ;             //清除上一时针轨迹
        RadHourx=sin(PI/180*(30*(BCDtoHEX(Clocker->Hour)%12)+BCDtoHEX(Clocker->Minute)/12*6)); //计算时针针当前弧度正余弦
        RadHoury=cos(PI/180*(30*(BCDtoHEX(Clocker->Hour)%12)+BCDtoHEX(Clocker->Minute)/12*6));
        Linexy(x0,y0,x0+(r-9)*RadHourx,y0-(r-9)*RadHoury,0,HourPotCor) ;                                           //画出当前时针
}

Linexy为任意角度画线函数,PrintDot为画点函数,可以在任意位置显示r>10的指针时钟,r<10太小没有意义了,时分秒针可以定义颜色。要是想在一个界面显示几个指针时钟,可以把函数复制几个,命名不同就可以了,也可以想办法重入。

评分

参与人数 1一乐金币 +40 收起 理由
xiaomage + 40 非常不错,抽空试试

查看全部评分

 楼主| 发表于 2015-9-10 09:28 | 显示全部楼层
本帖最后由 zhou19852 于 2015-9-10 09:36 编辑
nglgq 发表于 2015-9-9 08:48
指针时钟不错,关注!

/**************************************************************************
指针式时钟
说明:
入口:
                x0 = 表盘圆心X坐标
                y0 = 表盘圆心Y坐标
                r=表盘半径
                ClkCor = 表盘颜色
                SecPotCor = 秒针颜色
                MinPotCor= 分钟颜色
                HourPotCor= 时针颜色
                *Clocker = 当前时间结构体
返回:无
**************************************************************************/
void ClockDial(uchar x0,y0,r,ClkCor,SecPotCor,MinPotCor,HourPotCor,Clock *Clocker)                  
{                 
        //角度转弧度公式         2*PI/360*角度
        #define  PI 3.1415926
        float i;
  static float idata RadSecondx,RadSecondy,RadMinutex,RadMinutey,RadHourx,RadHoury;
        for(i=0;i<=2*PI;i+=PI/6)                //画表盘12等分:2*PI/12
           {
              PrintDot( x0+r*sin(i),y0+r*cos(i),0,ClkCor);
              PrintDot( x0+(r-1)*sin(i),y0+(r-1)*cos(i),0,ClkCor) ;
           }
        
        Linexy(x0,y0,x0+(r-3)*RadSecondx,y0-(r-3)*RadSecondy,0,Black) ;     //清除上一秒针轨迹
        RadSecondx=sin(PI/180*6*BCDtoHEX(Clocker->Second));                        //计算秒针当前弧度正余弦
        RadSecondy=cos(PI/180*6*BCDtoHEX(Clocker->Second));
        Linexy(x0,y0,x0+(r-3)*RadSecondx,y0-(r-3)*RadSecondy,0,SecPotCor) ;//画出当前秒针

        Linexy(x0,y0,x0+(r-5)*RadMinutex,y0-(r-5)*RadMinutey,0,Black) ;         //清除上一分针轨迹
        RadMinutex=sin(PI/180*6*BCDtoHEX(Clocker->Minute));                        //计算分针当前弧度正余弦
        RadMinutey=cos(PI/180*6*BCDtoHEX(Clocker->Minute));
        Linexy(x0,y0,x0+(r-5)*RadMinutex,y0-(r-5)*RadMinutey,0,MinPotCor) ;  //画出当前分针
               
        Linexy(x0,y0,x0+(r-9)*RadHourx,y0-(r-9)*RadHoury,0,Black) ;             //清除上一时针轨迹
        RadHourx=sin(PI/180*(30*(BCDtoHEX(Clocker->Hour)%12)+BCDtoHEX(Clocker->Minute)/12*6));//计算时针针当前弧度正余弦
        RadHoury=cos(PI/180*(30*(BCDtoHEX(Clocker->Hour)%12)+BCDtoHEX(Clocker->Minute)/12*6));
        Linexy(x0,y0,x0+(r-9)*RadHourx,y0-(r-9)*RadHoury,0,HourPotCor) ;                                       //画出当前时针
}

Linexy为任意角度画线函数,PrintDot为画点函数,可以在任意位置显示r>10的指针时钟,r<10太小没有意义了,时分秒针可以定义颜色。要是想在一个界面显示几个指针时钟,可以把函数复制几个,命名不同就可以了,也可以想办法重入。
发表于 2015-9-10 18:17 | 显示全部楼层
zhou19852 发表于 2015-9-9 10:12
你说的是大的时钟字体还是小的?字体装的较多,大的不知道是哪个,小的知道,其它字体是字库芯片自带得
...

小的数字字体比较好看
发表于 2015-9-10 19:41 | 显示全部楼层
做得很有特色
 楼主| 发表于 2015-9-10 20:59 | 显示全部楼层
bingshao1006 发表于 2015-9-10 18:17
小的数字字体比较好看

小字体名字是Cambria Math
发表于 2015-9-11 08:08 | 显示全部楼层
zhou19852 发表于 2015-9-9 10:06
电源口和传感器口开在旁边不好看,插着线看起来始终不爽,就全部隐藏在后面用弯头插头,图上的现在还接着 ...

:12;:12;:12;
发表于 2015-9-14 03:42 | 显示全部楼层
分享下时钟视频。

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-4 15:54 , Processed in 0.050898 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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