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.
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" p>
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 p>
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> 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