找回密码
 立即注册

QQ登录

只需一步,快速开始

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

有关指针式时钟--求帮忙分析一下···

[复制链接]
回帖奖励 70 黑币 回复本帖可获得 10 黑币奖励! 每人限 2 次(中奖概率 70%)
跳转到指定楼层
楼主
ID:86791 发表于 2016-1-2 21:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
21:45:03
依然呆 2016/1/2 21:45:03

/**************************************************************************
指针式时钟
说明:
入口:
                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太小没有意义了,时分秒针可以定义颜色。



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

使用道具 举报

沙发
ID:86791 发表于 2016-1-2 21:49 | 只看该作者
求帮助····
回复

使用道具 举报

板凳
ID:86791 发表于 2016-1-2 21:49 | 只看该作者
求帮助啊··
回复

使用道具 举报

地板
ID:101702 发表于 2016-1-4 09:26 | 只看该作者

回帖奖励 +10 黑币

这是POV还是点阵 阿
回复

使用道具 举报

5#
ID:44267 发表于 2016-1-11 08:45 | 只看该作者

回帖奖励 +10 黑币

这是POV还是点阵
回复

使用道具 举报

6#
ID:102754 发表于 2016-1-11 13:56 | 只看该作者
没弄过
回复

使用道具 举报

7#
ID:102767 发表于 2016-1-11 15:07 | 只看该作者

回帖奖励 +10 黑币

没明白你想问什么。
回复

使用道具 举报

8#
ID:149451 发表于 2020-1-3 14:34 | 只看该作者
这不是51能干的事吧?
回复

使用道具 举报

9#
ID:680594 发表于 2020-1-3 17:17 | 只看该作者
不懂,好复杂
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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