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太小沒有意義了,時分秒針可以定義顏色。
|