مدیر سایت behzad تعداد پستها : 905
|
این کد تبدیل شده همون برنامه ویژوال بیسیک سال 85 برای میکرو AVR و زبان C هست که من قبلا استفاده میکردم
توی یک فایل بنام owghat.c باید کپی کنید و توی پروژتون ازش استفاده کنید
#include <math.h>
//============== www.khazama.com
//============== faghat baraye sale 85 daghigh ast
//const float PI=3.14159265358979;
typedef struct _sun
{
float XX;
float YY;
}Sun;
typedef struct _Behzad
{
unsigned long AzanSOb;
unsigned long Toloe;
unsigned long AzanZohr;
unsigned long Ghoroob;
unsigned long Maghreb;
unsigned long NimeShab;
}Behzad;
float sind(float x){return(sin(PI/180.0*x));}
float cosd(float x){return(cos(PI/180.0*x));}
float tand(float x){return(tan(PI/180.0*x));}
float atand(float x){return(atan(x)*180.0/PI);}
float asind(float x){return(asin(x)*180.0/PI);}
float acosd(float x){return(acos(x)*180.0/PI);}
float loc2hor(float z,float d,float p){
return(acosd((cosd(z)-sind(d)*sind(p))/cosd(d)/cosd(p))/15);
}
float Round(float x,float a){
float tmp;
tmp=fmod(x,a);
if(tmp<0)
tmp+=a;
return(tmp);
}
unsigned long hms(float x)
{
unsigned long int h,mp,m,s;
x=floor(3600*x);
h=floor(x/3600);
mp=x-3600*h;
m=floor(mp/60);
s=floor(mp-60*m);
return(s+(m<<8)+(h<<16));
}
Sun sun(float m,float d,float h,float lg)
{
Sun s;
float M,L,lst,e,omega,ep,ed,u;
float v, theta , delta , alpha , ha , zr ;
unsigned char i;
if(m<7)
d= 31*(m-1)+d+h/24;
else
d=6+30*(m-1)+d+h/24;
M=74.2023+0.98560026*d;
L=-2.75043+0.98564735*d;
lst=8.3162159+0.065709824*floor(d)+1.00273791*24*(fmod(d,1))+lg/15;
e=0.0167065;
omega=4.85131-0.052954*d;
ep=23.4384717+0.00256*cosd(omega);
ed=180.0/PI*e;
u=M;
for(i=1;i<5;i++)
u=u-(u-ed*sind(u)-M)/(1-e*cosd(u));
v=2*atand(tand(u/2)*sqrt((1+e)/(1-e)));
theta=L+v-M-0.00569-0.00479*sind(omega);
delta=asind(sind(ep)*sind(theta));
alpha=180.0/PI*atan2(cosd(ep)*sind(theta),cosd(theta));
if(alpha>=360)
alpha-=360;
ha=lst-alpha/15;
zr=Round(h-ha,24);
s.XX=zr;
s.YY=delta;
return (s) ;
}
Behzad Owghat(float m,float d,float lg,float lat)
{
// var lg=52.5125;
// var lat=29.635;
Sun ep;
Behzad behi;
float zr,delta,ha,t1,t2,t3,t4;
unsigned long int n1,n2;
ep=sun(m,d,4,lg) ;
zr=ep.XX;
delta=ep.YY;
ha=loc2hor(108.0,delta,lat) ;
t1=Round(zr-ha,24);
ep=sun(m,d,t1,lg);
zr=ep.XX;
delta=ep.YY;
ha=loc2hor(108.0,delta,lat);
t1=Round(zr-ha,24);
behi.AzanSOb = hms(t1);
//
// t2= Sun rise
//
ep=sun(m,d,6,lg);
zr=ep.XX;
delta=ep.YY;
ha=loc2hor(90.833,delta,lat);
t2=Round(zr-ha,24);
ep=sun(m,d,t2,lg);
zr=ep.XX;
delta=ep.YY;
ha=loc2hor(90.833,delta,lat);
t2=Round(zr-ha,24);
behi.Toloe = hms(t2);
//
// zr=Zohr
//
ep=sun(m,d,12,lg);
ep=sun(m,d,ep.XX,lg);
zr=ep.XX;
behi.AzanZohr = hms(zr);
//
// t2= Sun set
//
ep=sun(m,d,18,lg);
zr=ep.XX;
delta=ep.YY;
ha=loc2hor(90.833,delta,lat);
t3=Round(zr+ha,24);
ep=sun(m,d,t3,lg) ;
zr=ep.XX;
delta=ep.YY;
ha=loc2hor(90.833,delta,lat);
t3=Round(zr+ha,24);
behi.Ghoroob = hms(t3);
//
// t2= Maghreb
//
ep=sun(m,d,18.5,lg);
zr=ep.XX;
delta=ep.YY;
ha=loc2hor(94.3,delta,lat);
t4=Round(zr+ha,24);
ep=sun(m,d,t4,lg);
zr=ep.XX;
delta=ep.YY;
ha=loc2hor(94.3,delta,lat);
t4=Round(zr+ha,24);
behi.Maghreb = hms(t4);
n1=((behi.AzanZohr & 0xFF0000)>>16)+11 ;
n2=((behi.AzanZohr & 0xFF00)>>8)+15 ;
if(n2>59){n2-=59;n1++;}
if(n1>24){n1-=24;}
behi.NimeShab = (n1<<16) + (n2<<8) ;
return(behi);
}
_______________________________________________________________________ پروژه های حرفه ای الکترونیک و کامپیوتر در www.khazama.com
مجموعه متن باز نامهای اصیل ایرانی
وبلاگ نوشته های شخصی من
|