找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3003|回复: 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太小没有意义了,时分秒针可以定义颜色。



回复

使用道具 举报

ID:86791 发表于 2016-1-2 21:49 | 显示全部楼层
求帮助····
回复

使用道具 举报

ID:86791 发表于 2016-1-2 21:49 | 显示全部楼层
求帮助啊··
回复

使用道具 举报

ID:101702 发表于 2016-1-4 09:26 | 显示全部楼层

回帖奖励 +10 黑币

这是POV还是点阵 阿
回复

使用道具 举报

ID:44267 发表于 2016-1-11 08:45 | 显示全部楼层

回帖奖励 +10 黑币

这是POV还是点阵
回复

使用道具 举报

ID:102754 发表于 2016-1-11 13:56 | 显示全部楼层
没弄过
回复

使用道具 举报

ID:102767 发表于 2016-1-11 15:07 | 显示全部楼层

回帖奖励 +10 黑币

没明白你想问什么。
回复

使用道具 举报

ID:149451 发表于 2020-1-3 14:34 | 显示全部楼层
这不是51能干的事吧?
回复

使用道具 举报

ID:680594 发表于 2020-1-3 17:17 | 显示全部楼层
不懂,好复杂
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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