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 los tallos lunares y las ramas terrestres de la fecha y el signo zodiacal del año actual.
' ## - ##
Objetivo atenuado
Día atenuado, lunes, domingo, domingo, domingo
Establecer objChinaDay =Nuevo Día de China
Llame a objChinaDay. acción("",día,semana,año,mes,mes,mes)
Respuesta. Escriba la fecha y"?"fecha actual
respuesta. Escribe una semana&"?"semana
respuesta. Escriba sChinaYear & amp"?"Año lunar
respuesta. Escriba sChinaDay & amp"?"fecha lunar
respuesta. Escriba sChinaAni & amp"?"zodiac
Nota de derechos de autor: este código no es original y se desconoce el autor original.
'****************************************** ***************************************
Día de la clase de China
dim arr nombre de la semana (7), MonthAdd (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
Inicializar datos
Sub Class_Initialize()
-
Definir cadena de visualización
Nombre de esta semana
arr semana nombre (0) = "*"
arr nombre de la semana (1) = "Domingo"
arr nombre de la semana (2) = "Lunes"
arr nombre de la semana (3) = "Martes"
nombre de la semana de llegada (4) = "miércoles"
nombre de la semana de llegada (5) = "jueves"
arr nombre de la semana (6) = "Viernes"
arr nombre de la semana (7) = "Sábado"
Nombre de Tiangan
arr tiangan (0) = " A"
arretiangan (1) = "B"
arr tiangan (2) = "c"
ArrTianGan (3) = D
arr tiangan (4) = "E"
Alan Tiangan (5) = Ji
"Geng"
ArrTianGan (7) = >ArrDiZhi (0)="hijo"
ArrDiZhi(1)="feo"
ArrDiZhi(2)=Yin
ArrDiZhi(3)=Mao p>
arrdi zhi (4) = "Chen"
ArrDiZhi (5) = "Si"
ArrDiZhi (6) = "Mediodía"
ArrDiZhi (7) = "No"
"Dios"
ArrDiZhi (9) = Unidad
ArrDiZhi (10) = "Xu"
ArrDiZhi (11) = "Mar"
Nombre del zodiaco
arr shuxiang (0) = "Rata"
arr shuxiang (1 ) = "buey"
arr shuxiang (2) = tigre
arr shuxiang (3) = "conejo"
arr shuxiang (4) = "dragón" ”
ArrShuXiang (5) = “serpiente”
arr shuxiang (6) = caballo
Abdu Xiang (7) = oveja
arr shuxiang (8) = mono
Abduxiang (9) = pollo
arr shuxiang (10) = "perro"
arr shuxiang (11) = " cerdo"
Nombre de la fecha del calendario lunar
arrDayName (0) = "*"
ArrDayName (1) = "primer grado"
nombre del día de llegada (2) = "Nivel 2"
nombre del día de llegada (3) = "Tercer grado"
nombre del día de llegada (4) = "Nivel 4"
ArrDayName(5)="El quinto día"
ArrDayName(6)="El sexto día"
ArrDayName(7)="El séptimo día" p> p>
arr día nombre (8) = "Nivel 8"
ArrDayName (9) = "Noveno día"
ArrDayName (10) = "Día 10"
ArrDayName(11)="Once"
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 del día de llegada (20) = " Veinte"
ArrDayName (21) = "21"
ArrDayName (22) = "22"
ArrDayName (23) = "23"
ArrDayName(24)="24"
ArrDayName(25)="25"
ArrDayName(26)="26"
p>ArrDayName(27)="27"
ArrDayName(28)="28"
ArrDayName(29)="29"
ArrDayName(30) ="30"
Nombre del mes lunar
arrMonName(0)="*"
ArrMonName(1)="Número positivo"
ArrMonName(2)="dos"
ArrMonName(3)="tres"
ArrMonName(4)="cuatro"
ArrMonName(5 )="cinco"
ArrMonName(6)="seis"
ArrMonName(7)="siete"
ArrMonName(8) ="Ocho"
ArrMonName(9)="Nueve"
ArrMonName(10)="Diez"
ArrMonName(11)="Invierno"
ArrMonName(12)="La"
-
Definición de datos de tolerancia
El número de días antes de cada mes en el calendario gregoriano
p>
AgregarMes(0) = 0
AgregarMes(1) = 31
AgregarMes(2) = 59
AgregarMes( 3) = 90
AgregarMes(4) = 120
AgregarMes(5) = 151
AgregarMes(6) = 181
SumaMes(7) = 212
AgregaMes(8) = 243
AgregaMes(9) = 273
AgregaMes(10) = 304
MonthAdd( 11) = 334
Datos lunares
NongliData (0) = 2635
NongliData (1) = 333387
<p>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 p> p>
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
NongliData (50) = 330077
NongliData (51) = 1197
NongliData (52) = 2637
NongliData (53) = 268877
NongliData (54) = 3365
NongliData (55) = 531109< /p >
NongliDatos(
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
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 p> p>
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 Xin Chou
Día lunar SChinaDay
Sinani es un signo del zodíaco.
'######################################### # #####################
Acciones de función pública (día, día, semana, año, día, día)
Convierta la fecha a convertir
Si inDay="" o no es una fecha (inDay), entonces
Obtenga la hora actual del sistema
curTime = Ahora ( )
Otros
curTime = CDate(inDay)
Terminará si...
if Datediff("d" ,curTime, Cdate("1921-2-8"))> Entonces 0
Salir de la función
Terminará si...
Generar el año calendario actual, Mes, día = = & gtsDay
cur Año = Año (curTime)
curMonth = mes (curTime)
curDay = Día (curTime) )
sDay = curYear & amp "año"
if (cur mes <10)
sDay = sDay & amp "0" y 科月& ; "Luna"
Otros
sDay = sDay & ampKe Yue&. "moon"
terminará si amp"日"
Otros
sDay = sDay & amp科德日& amp"日"
Terminará si...
Generar calendario gregoriano actual semana = => día de barrido
curWeekday = día laborable (curTime)
sweek day = arrWeekName(cur semana)
Desde 1921 El número de días desde la hora inicial: 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)+curDay+MonthAdd(cur mes-1)-38
if((cur año Mod 4) = 0 y curMonth & gt¿Y luego qué?
Fecha = fecha + 1
Terminará si...
Calcula los tallos celestes, ramas terrestres, mes y día.
isEnd = 0
m = 0
-
hacer
if(NongliData(m)& lt; entonces 4095
k = 11
Otro
k = 12
Terminará si...
n = k
-
Hacer
si(n<0) entonces
Salir de Do
Terminará si...
Obtener 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 módulo 2
si (la fecha <= 29 + dígitos) entonces
isEnd = 1
Salir Do
terminará si...
Fecha = fecha - 29 dígitos
n = n - 1
anillo
-
si (isEnd = 1), entonces
p>Salir Do
Terminará si...
m = m + 1
Timbre
-
curAño = 1921 + m
curMes = k - n + 1
curDía = fecha
Si (k = 12 ) entonces
Si (cur mes = (Int(NongliData(m)/65536)+1), entonces
Mes = 1 - mes
si no (cur mes & gt ;(Int(NongliData(m)/65536)+1) entonces
curMonth = curMonth - 1
Si... terminará
Si... terminará
Generar los tallos celestiales y las ramas terrestres del calendario lunar = =>ChinaYear
SChinaYear="Año Nuevo Lunar"& arrTianGan ((cur Año- 4) Mod 60) Mod 10); arrDiZhi (((curYear-4) Mod 60) Mod 12)
Generar constelación de animales ==> Schina ni
schina. ni = arr shuxiang( (cur año-4) Mod 60) Mod 12)
Generar mes y día lunar = => NongliDayStr
if (cur mes<1)
SChinaDay = "leap"&;arrMonName(-1 * mes actual)
Otro
sChinaDay = arrMonName(mes actual)
Si. .. terminará
sChinaDay = sChinaDay & amp "moon"
sChinaDay = sChinaDay & amparr nombre del día (curDay)
Finalizar función
Finalizar clase
% & gt