Red de conocimientos turísticos - Preguntas y respuestas turísticas - 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 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

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>

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>

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>

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