Программирование BASCOM
Меню сайта
Категории каталога
Мои статьи [115]
Наш опрос
Оцените мой сайт
Всего ответов: 1246
Главная » Статьи » Мои статьи

КАЛЕНДАРЬ ХРИСТИАНСКИХ ПРАЗДНИКОВ (CALENDAR OF CHRISTIAN HOLIDAYS) BASCOMAVR

Для одного проекта часов на светодиодной матрице понадобилось реализовать функцию вывода поздравлений с христианскими праздниками. 

Реализаций для микроконтроллера я не нашел, поэтому пришлось разобраться с этим вопросом.

Решил сделать запись на этот сайт, он ещё живой, несмотря на то, что последняя статья была более трех лет назад!

Код для получения даты Пасхи по новому стилю написал Сергей Шилов. От него я и оттолкнулся.


'================ ХРИСТИАНСКИЕ ПРАЗДНИКИ ================
'***************************************************************************************
Christian_holidays:
'(
   Праздники, почитаемые всеми христианами - это праздники, «на которые имеются указания в Священном Писании»:
   Рождество Христово, Крещение Господнее, Сретение, Вход Господа Иисуса Христа в Иерусалим, или Вербное Воскресенье,
   Благовещение, Страстной четверг, Светлое Христово Воскресение – Пасха, Вознесение, Троица – Сошествие Святого Духа, Преображение Господнее.
   Главными праздниками христиан являются Пасха и Рождество Христово.
   Они могут отмечаться как по григорианскому календарю, вместе с католической церковью и западным протестантским миром,
   так и по юлианскому календарю, — вместе с большинством православных церквей.
')

   Dim A_ch As Word , B_ch As Word , C_ch as Word , D_ch As Word , E_ch As Word    'Служебные переменные
   Dim Year_ch As Word                                            'Текущий год в полном формате (2020)
   Dim Day_ch , Month_ch As Byte                            'День и месяц Пасхи
   Dim Day_in , Month_in As Byte                              'День и месяц Входа в Иерусалим
   Dim Day_as , Month_as As Byte                            'День и месяц Вознесения
   Dim Day_tr , Month_tr As Byte                               'День и месяц Троицы
   Dim Christian_string As String * 254                      'Строка с поздравлением

   Gosub Getdate                                                       'Получить текущую дату (DS3231, NTP, ... - Day, Month, Year)

  '===Не выходящие из числа праздники===

  'Рождество Христово —7 января
   If Month = 1 And Day = 7 Then Christian_string = "С ПРАЗДНИКОМ РОЖДЕСТВА ХРИСТОВА!"
  'Крещение Господне —19 января
   If Month = 1 And Day = 19 Then Christian_string = "С ПРАЗДНИКОМ КРЕЩЕНИЯ! "
  'Сретение Господне —15 февраля
   If Month = 2 And Day = 15 Then Christian_string = "С ПРАЗДНИКОМ СРЕТЕНИЯ! "
  'Благовещение 7 апреля
   If Month = 4 And Day = 7 Then Christian_string = "С ПРАЗДНИКОМ БЛАГОВЕЩЕНИЯ! "
  'Преображение Господне — 19 августа
   If Month = 8 And Day = 19 Then Christian_string = "С ПРАЗДНИКОМ ПРЕОБРАЖЕНИЯ! "

  '===Выходящие из числа праздники===

  'Дата меняется из года в год, в зависимости от даты празднования Пасхи.
  'В Православной Церкви день Пасхи в ХХ — ХХI вв. выпадает на период от 7 апреля (22 марта) до 8 мая (25 апреля).

   Year_ch = Year + 2000
'   For Year_ch = 2020 To 2100
   A_ch = Year_ch Mod 4
   B_ch = Year_ch Mod 7
   C_ch = Year_ch Mod 19
   D_ch = 19 * C_ch
   D_ch = D_ch + 15
   D_ch = D_ch Mod 30
   E_ch = 4 * B_ch
   E_ch = E_ch + A_ch
   E_ch = E_ch + A_ch
   A_ch = 6 * D_ch
   E_ch = E_ch + A_ch
   E_ch = E_ch + 6
   E_ch = E_ch Mod 7
   C_ch = D_ch + E_ch

      ' Пасха (в 2021 году — 2 мая)
   If C_ch > 26 Then
      Day_ch = C_ch - 26
      Month_ch = 5
   Else
      Day_ch = C_ch + 4
      Month_ch = 4
   End If
   If Month = Month_ch And Day = Day_ch Then Christian_string = "СО СВЕТЛЫМ ПРАЗДНИКОМ ПАСХИ - ВОСКРЕСЕНИЯ ХРИСТОВА! ХРИСТОС ВОСКРЕС! ВОИСТИНУ ВОСКРЕС!"

      ' Вход Господень в Иерусалим — воскресенье, за 7 дней перед Пасхой
   If Day_ch > 7 Then
      Month_in = Month_ch
      Day_in = Day_ch - 7
   Else
      Month_in = Month_ch - 1
      If Month_in = 4 Then
         Day_in = 23 + Day_ch
      Else
         Day_in = 24 + Day_ch
      End If
   End If
   If Month = Month_in And Day = Day_in Then Christian_string = "С ПРАЗДНИКОМ ВХОДА ГОСПОДНЯ В ИЕРУСАЛИМ!"

      ' Вознесение Господне — 40-й день после Пасхи, всегда в четверг  (май, июнь)
   If Month_ch = 4 Then
      If Day_ch < 23 Then
         Month_as = 5
         Day_as = Day_ch + 9
      Else
         Month_as = 6
         Day_as = Day_ch - 22
      End If
   Else
      Month_as = 6
      Day_as = Day_ch + 8
   End If
   If Month = Month_as And Day = Day_as Then Christian_string = "С ПРАЗДНИКОМ ВОЗНЕСЕНИЯ!"

      ' День Святой Троицы — 50-й день после Пасхи, всегда в воскресенье. (май, июнь)
   If Month_ch = 4 Then
      If Day_ch < 13 Then
         Month_tr = 5
         Day_tr = Day_ch + 19
      Else
         Month_tr = 6
         Day_tr = Day_ch - 12
      End If
   Else
      Month_tr = 6
      Day_tr = Day_ch + 18
   End If
   If Month = Month_tr And Day = Day_tr Then Christian_string = "С ПРАЗДНИКОМ СВЯТОЙ ТРОИЦЫ!"

   Print #1 , Str(Year_ch) ; " Вход: " ; Str(Day_in) ; "." ; Str(Month_in) ; " Пасха: " ; Str(Day_ch) ; "." ; Str(Month_ch) ; " Вознесение: " ; Str(Day_as) ; "." ; Str(Month_as) ; " Троица: " ; Str(Day_tr) ; "." ; Str(Month_tr)
'   Next Year_ch

   If Weekday = 1 And Christian_string <>"" Then Christian_string = "С ПРАЗДНИКОМ ВОСКРЕСЕНИЯ!"    'Каждое Воскресенье, если нет другого праздника

Return


Если захотите проверить совпадение дат (вплоть до 2100 года) этого кода с известными таблицами, уберите комментарий с цикла(выделен красным цветом).

И сверяйте с любым известным источником, которых полно в сети, например - Пасхалия XXI век. Даты Прощеного и Вербного Воскресений, Пасхи, Вознесения, Троицы с 2001 по 2100 годы

Вот что получилось:

2020 ===Вход: 12.4 ===Пасха: 19.4 ===Вознесение: 28.5 ===Троица: 7.6
2021 ===Вход: 25.4 ===Пасха: 2.5 ===Вознесение: 10.6 ===Троица: 20.6
2022 ===Вход: 17.4 ===Пасха: 24.4 ===Вознесение: 2.6 ===Троица: 12.6
2023 ===Вход: 9.4 ===Пасха: 16.4 ===Вознесение: 25.5 ===Троица: 4.6
2024 ===Вход: 28.4 ===Пасха: 5.5 ===Вознесение: 13.6 ===Троица: 23.6
2025 ===Вход: 13.4 ===Пасха: 20.4 ===Вознесение: 29.5 ===Троица: 8.6
2026 ===Вход: 5.4 ===Пасха: 12.4 ===Вознесение: 21.5 ===Троица: 31.5
2027 ===Вход: 25.4 ===Пасха: 2.5 ===Вознесение: 10.6 ===Троица: 20.6
2028 ===Вход: 9.4 ===Пасха: 16.4 ===Вознесение: 25.5 ===Троица: 4.6
2029 ===Вход: 1.4 ===Пасха: 8.4 ===Вознесение: 17.5 ===Троица: 27.5
2030 ===Вход: 21.4 ===Пасха: 28.4 ===Вознесение: 6.6 ===Троица: 16.6
2031 ===Вход: 6.4 ===Пасха: 13.4 ===Вознесение: 22.5 ===Троица: 1.6
2032 ===Вход: 25.4 ===Пасха: 2.5 ===Вознесение: 10.6 ===Троица: 20.6
2033 ===Вход: 17.4 ===Пасха: 24.4 ===Вознесение: 2.6 ===Троица: 12.6
2034 ===Вход: 2.4 ===Пасха: 9.4 ===Вознесение: 18.5 ===Троица: 28.5
2035 ===Вход: 22.4 ===Пасха: 29.4 ===Вознесение: 7.6 ===Троица: 17.6
2036 ===Вход: 13.4 ===Пасха: 20.4 ===Вознесение: 29.5 ===Троица: 8.6
2037 ===Вход: 29.3 ===Пасха: 5.4 ===Вознесение: 14.5 ===Троица: 24.5
2038 ===Вход: 18.4 ===Пасха: 25.4 ===Вознесение: 3.6 ===Троица: 13.6
2039 ===Вход: 10.4 ===Пасха: 17.4 ===Вознесение: 26.5 ===Троица: 5.6
2040 ===Вход: 29.4 ===Пасха: 6.5 ===Вознесение: 14.6 ===Троица: 24.6
2041 ===Вход: 14.4 ===Пасха: 21.4 ===Вознесение: 30.5 ===Троица: 9.6
2042 ===Вход: 6.4 ===Пасха: 13.4 ===Вознесение: 22.5 ===Троица: 1.6
2043 ===Вход: 26.4 ===Пасха: 3.5 ===Вознесение: 11.6 ===Троица: 21.6
2044 ===Вход: 17.4 ===Пасха: 24.4 ===Вознесение: 2.6 ===Троица: 12.6
2045 ===Вход: 2.4 ===Пасха: 9.4 ===Вознесение: 18.5 ===Троица: 28.5
2046 ===Вход: 22.4 ===Пасха: 29.4 ===Вознесение: 7.6 ===Троица: 17.6
2047 ===Вход: 14.4 ===Пасха: 21.4 ===Вознесение: 30.5 ===Троица: 9.6
2048 ===Вход: 29.3 ===Пасха: 5.4 ===Вознесение: 14.5 ===Троица: 24.5
2049 ===Вход: 18.4 ===Пасха: 25.4 ===Вознесение: 3.6 ===Троица: 13.6
2050 ===Вход: 10.4 ===Пасха: 17.4 ===Вознесение: 26.5 ===Троица: 5.6
2051 ===Вход: 30.4 ===Пасха: 7.5 ===Вознесение: 15.6 ===Троица: 25.6
2052 ===Вход: 14.4 ===Пасха: 21.4 ===Вознесение: 30.5 ===Троица: 9.6
2053 ===Вход: 6.4 ===Пасха: 13.4 ===Вознесение: 22.5 ===Троица: 1.6
2054 ===Вход: 26.4 ===Пасха: 3.5 ===Вознесение: 11.6 ===Троица: 21.6
2055 ===Вход: 11.4 ===Пасха: 18.4 ===Вознесение: 27.5 ===Троица: 6.6
2056 ===Вход: 2.4 ===Пасха: 9.4 ===Вознесение: 18.5 ===Троица: 28.5
2057 ===Вход: 22.4 ===Пасха: 29.4 ===Вознесение: 7.6 ===Троица: 17.6
2058 ===Вход: 7.4 ===Пасха: 14.4 ===Вознесение: 23.5 ===Троица: 2.6
2059 ===Вход: 27.4 ===Пасха: 4.5 ===Вознесение: 12.6 ===Троица: 22.6
2060 ===Вход: 18.4 ===Пасха: 25.4 ===Вознесение: 3.6 ===Троица: 13.6
2061 ===Вход: 3.4 ===Пасха: 10.4 ===Вознесение: 19.5 ===Троица: 29.5
2062 ===Вход: 23.4 ===Пасха: 30.4 ===Вознесение: 8.6 ===Троица: 18.6
2063 ===Вход: 15.4 ===Пасха: 22.4 ===Вознесение: 31.5 ===Троица: 10.6
2064 ===Вход: 6.4 ===Пасха: 13.4 ===Вознесение: 22.5 ===Троица: 1.6
2065 ===Вход: 19.4 ===Пасха: 26.4 ===Вознесение: 4.6 ===Троица: 14.6
2066 ===Вход: 11.4 ===Пасха: 18.4 ===Вознесение: 27.5 ===Троица: 6.6
2067 ===Вход: 3.4 ===Пасха: 10.4 ===Вознесение: 19.5 ===Троица: 29.5
2068 ===Вход: 22.4 ===Пасха: 29.4 ===Вознесение: 7.6 ===Троица: 17.6
2069 ===Вход: 7.4 ===Пасха: 14.4 ===Вознесение: 23.5 ===Троица: 2.6
2070 ===Вход: 27.4 ===Пасха: 4.5 ===Вознесение: 12.6 ===Троица: 22.6
2071 ===Вход: 12.4 ===Пасха: 19.4 ===Вознесение: 28.5 ===Троица: 7.6
2072 ===Вход: 3.4 ===Пасха: 10.4 ===Вознесение: 19.5 ===Троица: 29.5
2073 ===Вход: 23.4 ===Пасха: 30.4 ===Вознесение: 8.6 ===Троица: 18.6
2074 ===Вход: 15.4 ===Пасха: 22.4 ===Вознесение: 31.5 ===Троица: 10.6
2075 ===Вход: 31.3 ===Пасха: 7.4 ===Вознесение: 16.5 ===Троица: 26.5
2076 ===Вход: 19.4 ===Пасха: 26.4 ===Вознесение: 4.6 ===Троица: 14.6
2077 ===Вход: 11.4 ===Пасха: 18.4 ===Вознесение: 27.5 ===Троица: 6.6
2078 ===Вход: 1.5 ===Пасха: 8.5 ===Вознесение: 16.6 ===Троица: 26.6
2079 ===Вход: 16.4 ===Пасха: 23.4 ===Вознесение: 1.6 ===Троица: 11.6
2080 ===Вход: 7.4 ===Пасха: 14.4 ===Вознесение: 23.5 ===Троица: 2.6
2081 ===Вход: 27.4 ===Пасха: 4.5 ===Вознесение: 12.6 ===Троица: 22.6
2082 ===Вход: 12.4 ===Пасха: 19.4 ===Вознесение: 28.5 ===Троица: 7.6
2083 ===Вход: 4.4 ===Пасха: 11.4 ===Вознесение: 20.5 ===Троица: 30.5
2084 ===Вход: 23.4 ===Пасха: 30.4 ===Вознесение: 8.6 ===Троица: 18.6
2085 ===Вход: 8.4 ===Пасха: 15.4 ===Вознесение: 24.5 ===Троица: 3.6
2086 ===Вход: 31.3 ===Пасха: 7.4 ===Вознесение: 16.5 ===Троица: 26.5
2087 ===Вход: 20.4 ===Пасха: 27.4 ===Вознесение: 5.6 ===Троица: 15.6
2088 ===Вход: 11.4 ===Пасха: 18.4 ===Вознесение: 27.5 ===Троица: 6.6
2089 ===Вход: 24.4 ===Пасха: 1.5 ===Вознесение: 9.6 ===Троица: 19.6
2090 ===Вход: 16.4 ===Пасха: 23.4 ===Вознесение: 1.6 ===Троица: 11.6
2091 ===Вход: 1.4 ===Пасха: 8.4 ===Вознесение: 17.5 ===Троица: 27.5
2092 ===Вход: 20.4 ===Пасха: 27.4 ===Вознесение: 5.6 ===Троица: 15.6
2093 ===Вход: 12.4 ===Пасха: 19.4 ===Вознесение: 28.5 ===Троица: 7.6
2094 ===Вход: 4.4 ===Пасха: 11.4 ===Вознесение: 20.5 ===Троица: 30.5
2095 ===Вход: 17.4 ===Пасха: 24.4 ===Вознесение: 2.6 ===Троица: 12.6
2096 ===Вход: 8.4 ===Пасха: 15.4 ===Вознесение: 24.5 ===Троица: 3.6
2097 ===Вход: 28.4 ===Пасха: 5.5 ===Вознесение: 13.6 ===Троица: 23.6
2098 ===Вход: 20.4 ===Пасха: 27.4 ===Вознесение: 5.6 ===Троица: 15.6
2099 ===Вход: 5.4 ===Пасха: 12.4 ===Вознесение: 21.5 ===Троица: 31.5
2100 ===Вход: 24.4 ===Пасха: 1.5 ===Вознесение: 9.6 ===Троица: 19.6
 

Категория: Мои статьи | Добавил: bascom (23.09.2020)
Просмотров: 329
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Copyright Radan Studio © 2021