Red de conocimiento informático - Espacio del host - Quiero diseñar un calendario perpetuo usando un microcontrolador. ¿Cómo puedo lograr la conversión del calendario solar al calendario lunar? Lo mejor es dar ideas y procedimientos relacionados.

Quiero diseñar un calendario perpetuo usando un microcontrolador. ¿Cómo puedo lograr la conversión del calendario solar al calendario lunar? Lo mejor es dar ideas y procedimientos relacionados.

& lt%

Uso:

La fecha actual se utiliza para calcular el zodíaco lunar y el zodíaco para esa fecha.

' ## - ##

Dim objChinaDay

Dim sDay, sWeekDay, sChinaDay, sChinaYear, sChinaAni

Establecer objChinaDay = nuevo Día de China

Llame a objChinaDay. Acción(", sDay, sWeekDay, sChinaYear, sChinaDay, sChinaAni)

Respuesta. Escribir día&"?"Fecha actual

Respuesta. Escribir semana&"?"semana

Respuesta. Escribe sChinaYear & amp"?"Año lunar

Respuesta Escribe sChinaDay & amp"?"Fecha del calendario lunar

Respuesta. Copyright: este código no es original y se desconoce el autor original.

'****************************************** ***************************************

Día de la clase de China

Dim arrWeekName(7), mes agregado(11), NongliData(99)

Dim arrTianGan(9), arrDiZhi(11), arrShuXiang(11), arrDayName(30), arrMonName(12)

Dim curTime, curYear, curMonth, curDay, curWeekday

Dim i, m, n, k, isEnd, bit, TheDate

Inicialización Datos

Inicialización de subclase()

-

Definir cadena de visualización

Nombre de esta semana

arrWeekName (0 ) = "* "

ArrWeekName(1) = "Domingo "

ArrWeekName(2) = "Lunes"

ArrWeekName(3) = "Martes"

ArrWeekName(4) = "Miércoles"

ArrWeekName(5) = "Jueves"

ArrWeekName(6) = "Viernes"

p >

ArrWeekName(7) = "Sábado"

天干名

ArrTianGan(0) = "A "

Arretiangan (1) = " B "

ArrTianGan(2) = "c "

ArrTianGan(3) = "D"

ArrTianGan(4) = "E "

ArrTianGan(5) = "Ji"

"Geng"

"心"

ArrTianGan(8) = "Ren"

ArrTianGan(9) = "癸"

Nombres de las ramas terrestres

ArrDiZhi(0) = "Hijo"

ArrDiZhi(1) = "Feo "

ArrDiZhi(2) = "Yin"

ArrDiZhi(3) = "Mao"

(4) = "Chen"

ArrDiZhi(5) = "Sí"

ArrDiZhi(6) = "Mediodía"

ArrDiZhi(7) = "No"

(8) = "Shen"

ArrDiZhi(9) = "酉"

ArrDiZhi(10) = "Xu"

ArrDiZhi(11) = "海"

Nombre de la constelación animal

ArrShuXiang(0) = "Rata"

ArrShuXiang(1) = "Vaca"

ArrShuXiang(2) ="Tigre"

ArrShuXiang(3) ="Conejo"

ArrShuXiang(4) ="Dragón"

ArrShuXiang(5) ="Serpiente"

ArrShuXiang(6) = "Caballo"

ArrShuXiang(7) = "Oveja"

ArrShuXiang(8) = "Mono"

ArrShuXiang(9) = "Pollo"

ArrShuXiang(10) = "Perro"

ArrShuXiang(11) = "Cerdo"

Nombre de la fecha del calendario lunar

<

p>arrDayName(0) = "* "

ArrDayName(1) = "Nivel 1"

ArrDayName(2) = "Nivel 2 "

ArrDayName (3) = "Tercer grado"

ArrDayName(4) = "Nivel 4"

ArrDayName(5) = "Quinto día"

ArrDayName( 6 ) = "Sexto día"

ArrDayName(7) = "Séptimo día"

nombre de matriz(8) = "Nivel 8"

ArrDayName (9) = "Noveno día"

ArrDayName(10) = "Décimo día"

ArrDayName(11) = "Undécimo día"

ArrDayName (12) = " Doce"

ArrDayName(13) = "Trece"

ArrDayName(14) = "Catorce"

ArrDayName(15 ) = "15 "

ArrDayName(16) = "Dieciséis"

ArrDayName(17) = "Diecisiete"

ArrDayName(18) = " 18 "

ArrDayName (19) = "Diecinueve"

nombre de matriz(20) = " veinte "

ArrDayName(21) = "21 "

nombre de matriz(22) = " 22 "

nombre de matriz(23)= " 23 "

nombre de matriz(24)= " 24 "

nombre de matriz(25)= " 25 "

nombre de matriz(26)= " 26 "

nombre de matriz(27)= " 27 "

nombre de matriz(28)= " 28 "

nombre de matriz(29)= " 29 "

nombre de matriz(30)= " 30 "

Nombre del mes lunar

arrMonName (0) = "* "

ArrMonName(1) = "número positivo"

ArrMonName(2) = "dos "

ArrMonName(3) = "三"

ArrMonName(4) = "四"

ArrMonName(5) = "五"

ArrMonName(6) = "Seis"

ArrMonName(7) = "Siete"

ArrMonName(8) = "Ocho"

ArrMonName(9) = "九"

ArrMonName(10) = "十"

ArrMonName(11) = " Invierno "

ArrMonName(12) = "La "

-

Definición de datos de tolerancia

Los primeros días de cada mes en el calendario gregoriano

MonthAdd(0) = 0

mes addd(1) = 31

AgregarMes(2) = 59

AgregarMes(3) = 90

AgregarMes(4) = 120

AgregarMes( 5) = 151

mes agregado(6)= 181

mes agregado(7)= 212

MesAgregado( 8) = 24

3

MonthAdd(9) = 273

mes addd(10)= 304

mes addd(11)= 334

Luna Datos

NongliData(0) = 2635

NongliData(1) = 333387

NongliData(2) = 1701

NongliData(3 ) = 1748

NongliData(4) = 267701

NongliData(5) = 694

NongliData(6) = 2391

NongliData (7) = 133423

NongliData(8) = 1175

NongliData(9) = 396438

NongliData(10) = 3402

NongliData(11)= 3749

NongliData(12)= 331177

NongliData(13)= 1453

NongliData(14) = 694

NongliData(15)= 201326

NongliData(16) = 2350

NongliData(17)= 465197

NongliData(18)= 3221

NongliData(19) = 3402

NongliData(20) = 400202

NongliData(21) = 2901

NongliData(22) = 1386

NongliData(23) = 267611

NongliData(24) = 605

NongliData(25) = 2349

NongliData(26) = 137515

NongliData(27) = 2709

NongliData(28) = 464533

NongliData(29) = 1738

NongliData( 30) = 2901

NongliData(31)= 330421

NongliData(32) = 1242

NongliData(33) = 2651

NongliData(34) = 199255

NongliData(35) = 1323

NongliData(36) = 529706

NongliData(37) = 3733

NongliData(38) = 1706

NongliData(39) = 398762

NongliData(40) = 2741

NongliData(41)= 1206

NongliData(42) = 267438

NongliData(43) = 2647

NongliData(44) = 1318

NongliData(45) = 204070

NongliData(46) = 3477

NongliData(47) = 461653

NongliData(48) = 1386

NongliData(49) = 2413<

/p>

NongliData(50) = 330077

NongliData(51)= 1197

NongliData(52) = 2637

NongliData(53) = 268877

NongliData(54) = 3365

NongliData(55)= 531109

NongliData(56) = 2900

NongliData(57 ) = 2922

NongliData(58) = 398042

NongliData(59) = 2395

NongliData(60)= 1179

NongliData (61)= 267415

NongliData(62) = 2635

NongliData(63) = 661067

NongliData(64)= 1701

NongliData(65) = 1748

NongliData(66) = 398772

NongliData(67) = 2742

NongliData(68) = 2391

NongliData(69) = 330031

NongliData(70)= 1175

NongliData(71)= 1611

NongliData(72) = 200010 p>

NongliData(73) = 3749

NongliData(74) = 527717

NongliData(75) = 1452

NongliData(76) = 2742

NongliData(77) = 332397

NongliData(78) = 2350

NongliData(79) = 3222

NongliData( 80) = 268949

NongliData(81) = 3402

NongliData(82) = 3493

NongliData(83) = 133973

NongliData(84) = 1386

NongliData(85) = 464219

NongliData(86) = 605

NongliData(87) = 2349

NongliData(88) = 334123

NongliData(89) = 2709

NongliData(90) = 2890

NongliData(91) = 267946

NongliData(92) = 2773

NongliData(93) = 592565

NongliData(94) = 1210

NongliData(95) = 2651

NongliData(96) = 395863

NongliData(97) = 1323

NongliData(98) = 2707

NongliData(99) = 265877

Conector final

'################################ # ###################

############

Operaciones del método principal

Ingrese la fecha. Si no se ingresa, la fecha predeterminada será la actual.

Fecha en formato chino SDay

Qué día de la semana es hoy

Año lunar

SChinaDay Día lunar

Sky Nani es un signo animal.

'######################################### # #####################

Acciones de función pública (inDay, sDay, sWeekDay, sChinaYear, sChinaDay, sChinaAni)

Convierta la fecha a convertir

Si inDay=" " o Not IsDate(inDay), entonces

Obtenga la hora actual del sistema

curTime = Now( )

Otros

curTime = CDate(inDay)

Terminará si...

Si Datediff("d ", curTime, Cdate(" 1921-2-8 "))& gt; entonces 0

Salir de la función

Si... finalizará

Generar el año y mes actual del calendario gregoriano, día = = & gtsDay

curYear = Año(curTime)

curMonth =mes(curTime)

curDay = Día(curTime) )

sDía = curAño & amp "Año"

if(curMes & lt;10)

sDía = sDía & amp0 & amp;Ke mes & amp "Luna"

Otros

sDay = sDay & ampKe月&“月”

Si... terminará

si (curDay & lt; 10 )

sDay = sDay & amp0 & amp;curDay & amp"日"

Otro

sDay = sDay & ampcurDay & amp "日"

Terminará si...

Generar la semana actual del calendario gregoriano = = & gt un día por semana

curWeekday = día laborable ( curTime)

día de la semana = arr nombre de la semana(cur semana)

Hora de inicio 1921 Número de días desde el 8 de febrero: 1921-2-8 (el primer día del primer mes lunar) .

la fecha =(cur año-1921)* 365+Int((cur año-1921)/4)+curDay+mes agregar(cur mes-1)-38

Si ((curYear Mod 4) = 0 y curMonth & gt2) entonces

Fecha = fecha + 1

Si... terminará

Calcular el tallos celestes del calendario lunar Ramas Terrestres Mes y Día.

isEnd = 0

m = 0

-

Hacer

if(NongliData(m)& lt; 4095) Entonces

k = 11

Otro

k = 12

Terminará si...

n = k

-

Hacer

Si (n & lt0) entonces

Exportar Hacer

Terminará si...

Obtiene el valor del enésimo bit binario de NongliData(m)

bit = NongliData(m)

Para i = 1 an paso 1

bit = Int(bit / 2)

Entonces

bit = bit Mod 2

si (la fecha <= 29 + bits) entonces

isEnd = 1

salir Do

terminará si...

TheDate = TheDate - 29 bits

n = n - 1

Anillo

-

Si (isEnd = 1) entonces

Salir Do

Terminará si...

m = m + 1

Timbre

-

curAño = 1921 + m

curMes = k - n + 1

curDía = LaFecha

Si (k = 12) entonces

if(cur mes =(Int(NongliData(m)/65536)+1))entonces

curMonth = 1 - curMonth

si no(cur mes) & gt;(Int (NongliData(m)/65536)+1)) Entonces

curMonth = curMonth - 1

Si... terminará

Si... terminará

Generar los tallos celestes y las ramas terrestres del calendario lunar = = & gtSChinaYear

SChinaYear = "Año Nuevo Lunar" & (año calendario lunar 4)Mod 60)Mod 10); arrDiZhi(((cur año-4)Mod 60)Mod 12);"Año"

Zodíaco

schina ni = arrShuXiang((cur año-4)Mod 60)Mod 12 )

Generar mes y día lunar == > non-liDayStr

if(curMonth <1) entonces

SChinaDay = " salto " &; arrMonName( -1 * curMonth)

Otros

sChinaDay = arrMonName(curMonth)

Terminará si ...

sChinaDay = sChinaDay & amp "Moon"

sChinaDay = sChinaDay & amparrDayName(curDay)

Finalizar función

Fin clase

% & gt