SMS-сообщения с пустым номером отправителя. Дачные ворота самостоятельно подписались на платные сервисы МТС и начали рассылать СМС. Оператор связи затруднился это объяснить

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

Подобной техникой могут воспользоваться спаммеры, ведь это идеальная технология для того, чтобы безнаказанно отправлять на мобильные устройства пользователей любые рекламные сообщения.

Еще одной интересной характеристикой данной атаки является то, что злоумышленнику необязательно знать номер атакуемого. Достаточно лишь, чтобы сотовый телефон, представляющий интерес, находился в охватываемой им зоне. Подобная тактика позволяет осуществлять достаточно хитрые психологические атаки. Ведь вредитель может видеть все, что делает жертва, и при этом посылать сообщения без обратного адреса, которые содержат текст, напрямую имеющий отношение к тому, что происходит с пострадавшим.

Если вы получаете SMS с пустым номером отправителя, то вполне возможно, что злоумышленник находится рядом с вами и не факт, что он знает номер вашего мобильного телефона.

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

Если в визитной карточке заполнить только поле «Имя», то на мобильный телефон придет карточка в виде SMS-сообщения, с текстом, отображающим только содержание поля «Имя». Номера отправителя в SMS не будет. Поле имени может насчитывать до 248 символов, что позволяет создать полноценное сообщение.

ЗАЩИТА ОТ АТАКИ

Защищаться от данной атаки не надо. О ней достаточно просто знать.

И напоследок, хотим рассказать читателям об интересной технической новинке - бинарных часах . Изюминкой этих устройств является оригинальный способ определения времени. В таких часах отсчет времени происходит по количеству горящих светодиодов или их положению на циферблате.

Дополнительные материалы:

  • Желание воспользоваться чем-либо бесплатным часто побуждает людей пренебрегать основными канонами безопасности. Этот факт играет существенную роль в возможности осуществления этой […]
  • В настоящее время мобильные телефоны выполняют не только функции средства связи, но также с успехом функционируют как записные книжки, устройства для доступа в Интернет и полноценные […]
  • Интеграция современных информационных технологий в мобильную связь предоставляет не только широкие возможности пользователям, но и несет в себе серьезную угрозу. Согласившись на […]
  • NFC-телефоны все чаще находят применение в самых различных областях. В столицах стран Европы и в Японии они используются для оплаты поездок на метро. Этот вид сервиса прост и удобен. […]

Автоматически отправленные смс с устройства абонента МТС – довольно обсуждаемая тема на специализированных форумах. Кто-то винит в этом вирусы, а кто-то непосредственно мобильного оператора. Данный материал расскажет о сообщениях с номеров 1453 и 1307. Вы узнаете что это за опция в МТС, как её отключить и сколько стоят такие SMS?

Что это такое?

СМС с номера 1453 и 1307 – это автоматическая опция от MTS Info, которая распространяется на всех абонентов. По умолчанию, отправленные и принятые сообщения с этих коротких номеров бесплатны, хотя изредка за данную транзакцию снимают деньги с баланса.

Есть быть более конкретным — данная отправка необходима для передачи служебной информации в рамках сервиса «МТС Инфо». Под такой информацией следует понимать динамические обновления для приложения и меню СИМ-карты. Помимо указанных номеров, могут быть представлены и другие — 9125, 9118, 9091, 4674, 111.

Эти сообщения также могут сигнализировать и об активации платных подписок на развлекательный (познавательный) контент от МТС. Они оформляются путём отправки любого текста на короткие номера «1453» и «1307» соответственно, списания за использование происходит ежедневно с момента подключения.

Также пользователям могут и приходить сообщения с тех же номеров, с примерным текстом — «содержимое не поддерживается» или «nullnullnull». Переживать не стоит — это те же системные оповещения.

Способ «подключения» платного контента

При поверхностном изучении ситуации может показаться, что виной «автоматическому» подключению бесполезных материалов служит вирус, попавший на смартфон после посещения сомнительных сайтов.

На самом деле, такой сценарий вполне реален – пользователь просто переходит по рекламному баннеру, кликает на другой с текстом «Ок/Согласен», оформляя списания со своего номера, причём немаленькие.

Но это совершенно не тот случай – постараемся на примере объяснить почему. Судя по развёрнутому рассказу одного из абонентов МТС, подписки по номерам 1453 и 1307 умудрилась самостоятельно оформить его GSM-реле.

Простым языком – человек установил сим-карту оператора MTS для автоматизации дачных ворот. Такой механизм направлен на принятие сообщений со специальными командами, отправлять их, перенаправлять он не умеет. В итоге, судя по выписке со счёта, произошло настоящее чудо – сначала система получала сообщения от различных коротких номеров, в том числе 1453 и 1307, а потом отправила ответные.

Данный шаг активировал платные подписки, стоимость которых варьируется от 4 до 8 рублей в день. Сомневаться в рассказе не приходится – пользователь предоставил скриншоты из выписки по номеру, в которой чётко видны десятки входящих и исходящих сообщений.

Как такое возможно?

Опираясь на вышеуказанный факт остаётся лишь поблагодарить компанию МТС – видимо, она самостоятельно подключает платные услуги пользователям. Именно об этих услугах и сигнализируют сообщения. И заметить это действительно не так уж и просто, если конечно сим-карта не обслуживает ворота – 4 рубля в день не сильно выделяются на фоне расходов человека, постоянно висящего на телефоне.

Что по этому поводу думают операторы МТС?

Ровным счётом – ничего. От прямых вопросов о том, как стала возможна подобная ситуация, если «Подписка может быть оформлена исключительно с согласия владельца номера», интернет-помощники уходят.

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

Ссылка на поиск услуг по короткому номеру — moskva.mts.ru/uslugi-po-korotkim-nomeram .

СМС с номера 1453 и 1307 — как отключить?

Если у вас снимаются деньги за передачу этих SMS, то нужно проверить все свои подписки. Для начала – проверим список всех подключённых платных подписок. Для этого: набираем *152*2#. После перенаправления будут доступны следующие действия:

    • Просмотр всего списка доступных платных подписок согласно тарифному плану.
  • Перечень уже подключённых подписок.
  • Отключение выбранных/всех платных услуг.

Если нет возможности, не получается разобраться – звоним напрямую в контактный центр МТС, идём в ближайший офис с паспортом. Объясняем оператору суть проблемы, требуем отключение активных подписок, а также подключения бесплатной услуги «Запрет контента».

Последняя обезопасит вас от подобных ситуаций, запретив подписки даже с вашего согласия. Также можно запросить потраченную на автоматически подключенные услуги сумму обратно на счёт – это можно сделать как по телефону, так и в сервисном центре МТС. Ответ должен прийти в течение 30 дней – прецедентов возврата много, так что стоит попробовать.

Есть вариант проставить запрет на короткие номера 1453 и 1307. Но лучше уточнить данный шаг у оператора.

Заключение

Итак, теперь вы знаете, что СМС с номеров 1453 и 1307 являются вспомогательной опцией сервиса «МТС Инфо», бесплатны и передают лишь внутреннюю информацию. К сожалению, факты снятия денег говорят сами для себя. В любом случае, информация предоставлена лишь для ознакомления и не претендует на истину в последней инстанции.

На мой личный телефон приходят СМС от номера 1453. Также часто получаю уведомления, что сообщение отправлено мной, хотя с моей стороны никаких действий не было. Пользуюсь телефоном только я, мой оператор - МТС.

Коротко о главном. 1453 — подписка на какой-то платный контент, это может быть игра, видео, музыка или еще какая-то услуга. Возможно имеет отношение к виджету МТС. Еще может приходить номер с 1307 — та же песня. Что делать? Звонить оператору и спрашивать что за дела, также возможно нужно будет заказать детализацию счета — там может быть точное название услуги (спросить у оператора).

Обновленная информация. Номер 1453, а также 1307, 9125 — могут принадлежать услуге МТС ИНФО. Она подключается всем абонентам, и отключить ее нереально. Но смс — бесплатные. И деньги списывать не должны — но у некоторых списываются. Пока все туманно. Важно:

Жалобы такого рода можно услышать от многих абонентов, иногда после получения или отправки СМС еще и баланс счета оказывается в минусе. Это уже как-то совсем неинтересно, хочется узнать, кто шлет СМС, зачем и можно ли избавиться от подобной переписки.

Характерные особенности непонятных сообщений:

  1. В основном номер отправителя - 1453.
  2. Чаще всего СМС нерегистрируемое, экран пустой.
  3. Возможен текст следующего плана - nullnullnull.
  4. Вместо слов могут быть и странные крякозяблики (всякие буквы, символы, цифры).
  5. Преимущественно СМС приходят ночью, иногда по нескольку раз через каждые полчаса.

Если в СМС просят что-то сделать — там пойти куда-то, отправить СМС, перейти по ссылке, оценить фото, видео, позвонить на номер — никогда ничего не делайте. Скорее всего это развод чистой воды. Будьте осторожны также если указываете где-то свой номер или отправляете СМС на короткий номер чтобы что-то оплатить — смотрите чтобы потом деньги с вас не списывали!

Что это за СМС от МТС?

Приходят да и ладно, никому ничем не мешают. Если бы так, то еще полбеды. Хотя тоже выглядит странно - СМС что-то кому-то шлет без ведома владельца. Вроде бы сообщение пустое, но что-то оно да и значит. Может инфа какая конфиденциальная с телефона утекает. Хорошего мало.

И уж совсем плохо, если вместе с СМС уплывают денежки. Давайте разбираться. Как и предполагалось, номер 1453 принадлежит оператору МТС и является сервисным. Используется для обмена инфой служебного характера. Еще детальнее - информация касается динамического обновления тех или иных приложений, а также имеющегося в сим-карте меню.

Если что — подавайте запрос на распечатку всех используемых услуг, требуете от оператора, нужно разобраться ведь:



Почему СМС пустое?

Четкого ответа на это вопрос не существует, но логично предполагать, что текста нет, так как оператор МТС ничего не сообщает лично абоненту, а последний ничего не обязан отвечать. Поэтому содержимое не поддерживается - это сугубо сервисные сообщения. Тем не менее, СМС продолжают курсировать туда обратно по нескольку раз в сутки.

Еще вопрос - почему имеет место списание денег со счета, причем, не так уж и редко. Скорее всего, пользователь телефона подписался на платные услуги, хотя многие абоненты утверждают, что они этого не делали.

Судя по жалобам людей, в последнее время такого плана подписки стали регулярными. При детализации (услуга доступна любому абоненту) оказывается, что деньги взимались не в пользу МТС, незаконность их списания признается и деньги возвращаются.

Но зачем каждый раз заморачиваться с детализацией, если можно раз и навсегда поставить себе запрет абсолютно на все короткие номера. Итак, звоним оператору и озвучиваем свою просьбу, скорее, возмущенное требование. Однако, как оказалось, это не выход. Не исключены ситуации, когда понадобится помощь справочной МТС, но при отключенной услуге скорее всего вы туда не дозвонитесь!

О чем говорит короткий номер и для чего он нужен?

Уже понятно, что короткий номер 1453 принадлежит МТС. Ясно, что сообщения (входящие и исходящие) отправляются автоматически. Номер 1453 подключен к каждому МТС абоненту. Если последний желает получать какой-либо контент познавательного или развлекательного характера, то именно с помощью этого номера он может оформить подписку. Это делается очень быстро, практически моментально и не всегда является осознанным решением абонента:

  1. Человек едет в транспорте, услышал сигнал СМС.
  2. Занят важными делами, и в это время пришло сообщение.
  3. Часто СМС приходят ночью.
  4. Действия человека - он смотрит, так как обеспокоен, а вдруг что-то важное.
  5. Именно в этом случае высока вероятность ошибочно нажать кнопку Согласиться вместо Отказаться.
  6. Дело сделано, списание денег будет осуществляться регулярно.

Сегодня реклама разного рода буквально атакует отовсюду, причем, очень искусно, умело и профессионально, маскируясь под разные невинные услуги. И очевидно, что вряд ли к списанию средств каким-то боком имеет отношение столь солидная компания, как МТС. Просто технологии настолько стремительно развиваются, что одна автоматизация может быть успешно побеждена другой, более агрессивной.

Откуда они знают мой номер и как отключить эти СМС?

В любом случае необходимо принять меры и разобраться, если со счета уходят деньги. С автоматическими СМС, никому не приносящими вреда и являющимися частью сервисного обслуживания вряд ли удастся справиться, так как они работают у каждого абонента МТС по умолчанию. Поэтому и номер абонента известен, ведь сообщение идет от оператора.

Чтобы не кормить платные подписки, от которых вы, как говорится, ни сном, ни духом не знаете, можно прибегнуть к следующим действиям:

  1. Для начала выяснить наличие активных подписок. Как это сделать - комбинация *152*2#. Уточнить информацию можно на официальном сайте МТС.
  2. Создать для платного контента отдельный счет. Баланс не пополнять. Никакая платная подписка не подключится, если денег на счету нет.
  3. Обратиться к оператору МТС с просьбой отключить услугу платного контента.
  4. Как отмечалось выше, можно вообще запретить короткие номера. Опять же целесообразность данного действия лучше уточнить у оператора.

Какой делаем вывод

Сервисные СМС от МТС (они есть у каждого оператора) сами по себе вредоносными вряд ли могут быть, так как интересы мобильного оператора вовсе не преследуют цель дурачить своих абонентов. Но при наличии утечки финансов разобраться однозначно нужно. Непременно надо заказать детализацию сообщений и звонков - это лучший способ что-то прояснить в конфликтной ситуации.

По моему личному мнению, пользоваться современными гаджетами нужно очень внимательно. Оптимальный вариант поведения абонента - ни с чем не соглашаться, не нажимать ОК или Согласен ни на каких подозрительных сообщениях и обновлениях. Такая осторожность принесет только пользу, никто и ничто постороннее и посягающее на ваши деньги в ваш телефон не проникнет.

А если понадобится подключить какую-то информационную или развлекательную услугу по собственному желанию, то с этим сегодня проблем никаких. Благо, все мы люди грамотные.

19.10.2017
Оценка 1 Оценка 2 Оценка 3 Оценка 4 Оценка 5

DS1307 - микросхема часов реального времени с интерфейсом I2C(TWI) . Часы / календарь хранят следующую информацию: секунды, минуты, часы, день, дату, месяц и год. Конец месяца автоматически подстраивается для месяцев, в которых менее 31 дня, включая поправку для високосного года. Часы работают в 24-часовом или 12-часовом формате с индикатором AM/PM. DS1307 имеет встроенную схему контроля питания, которая обнаруживает пропадание питания и автоматически переключает схему на питание от батареи.

Vbat - вход батареи для любого стандартного 3 Вольтового литиевого элемента или другого источника энергии. Для нормальной работы напряжение батареи должно поддерживаться между 2.5 и 3.5 В. Уровень, при котором запрещён доступ к часам реального времени и пользовательскому ОЗУ, установлен внутренней схемой равным 1.25 x Vbat. Литиевая батарея ёмкостью 35 mAh или больше достаточна для питания DS1307 в течение более чем 10 лет при отсутствии питания.
SCL (Последовательный Тактовый Вход) - SCL используется, чтобы синхронизировать передачу данных через последовательный интерфейс.
SDA (Вход/Выход Последовательных Данных) - SDA - вход / выход данных для 2-проводного последовательного интерфейса. Это выход с открытым стоком, который требует внешнего притягивающего резистора.
SQW/OUT (Меандр / Выходной Драйвер) - Когда бит SQWE установлен в 1, на выходе SQW/OUT вырабатываются импульсы в форме меандра одной из четырех частот: 1 Гц., 4 кГц., 8 кГц., 32 кГц. Вывод SQW/OUT - с открытым стоком, требует внешнего притягивающего резистора.
X1, X2 - выводы для подключения стандартного кристалла кварца 32.768 кГц. Внутренняя схема генератора рассчитана на работу с кристаллом, имеющим номинальную емкость (CL) 12.5 пФ.
GND – Земля.
VCC – питание 5 вольт.

DS1307 работает как ведомое устройство на последовательной шине. Для доступа к нему надо установить состояние START и передать код идентификации устройства, сопровождаемый адресом регистра. К последующим регистрам можно обращаться последовательно, пока не установлено состояние STOP . Когда VСС падает ниже 1.25 x Vbat, устройство прекращает связь и сбрасывает адресный счетчик. В это время оно не будет реагировать на входные сигналы, чтобы предотвратить запись ошибочной информации. Когда VСС падает ниже Vbat, устройство переключается в режим хранения с низким потреблением. При включении питания устройство переключает питание с батареи на VСС , когда напряжение питания превысит Vbat + 0.2V, и реагирует на входные сигналы, когда VСС станет более 1.25 x Vbat. Когда питание находится в пределах нормы, устройство полностью доступно, и данные могут быть записаны и считаны. Когда к устройству подключена трёхвольтовая батарея и VСС ниже 1.25 x Vbat, чтение и запись запрещены. Однако отсчёт времени при этом работает. Когда VСС падает ниже Vbat, питание ОЗУ и отсчёта времени переключается на внешнюю батарею 3 В.

Информацию о времени и дате получают, считывая соответствующие регистры. Регистры часов показаны в таблице ниже. Время и календарь устанавливаются или инициализируются путём записи байтов в соответствующие регистры. Содержание регистров времени и календаря хранится в двоично-десятичном (BCD) формате, поэтому перед выводом информации на LCD дисплей или семисегментный индикатор необходимо преобразовать двоично-десятичный код в двоичный или ANSII - код.

Бит 7 регистра 0 - это бит остановки хода часов (Clock Halt). Когда этот бит установлен в 1, генератор остановлен. Когда сброшен в ноль, генератор работает, а часы считают время.

DS1307 может работать в 12-часовом или 24-часовом режиме. Бит 6 регистра часов задаёт один из этих режимов. Когда он равен 1, установлен 12-часовой режим. В 12-часовом режиме высокий уровень бита 5 сообщает о послеполуденном времени. В 24-часовом режиме бит 5 - второй бит 10 часов (20-23 часа).

Регистр управления DS1307 предназначен для управления работой вывода SQW/OUT . Бит OUT - управление выходом. Этот бит управляет выходным уровнем на выводе SQW/OUT , когда генерация меандра запрещена. Если SQWE = 0, логический уровень на выводе SQW/OUT равен 1, если OUT = 1, и 0 - если OUT = 0. SQWE - Разрешение меандра. Когда этот бит установлен в 1, разрешается генерация меандра. Частота меандра зависит от значений битов RS0 и RS1. Эти биты управляют частотой меандра, когда его генерация разрешена. В таблице ниже показаны частоты, которые могут быть заданы RS битами.

DS1307 поддерживает двунаправленные 2-проводную шину и протокол передачи данных. Устройство, которое посылает данные на шину, называется передатчиком, а устройство, получающее данные - приемником. Устройство, которое управляет передачей, называется ведущим. Устройства, которые управляются ведущим - ведомые. Шина должна управляться ведущим устройством, которое вырабатывает последовательные такты (SCL), управляет доступом к шине, и генерирует состояния СТАРТ и СТОП. DS1307 работает как ведомое на 2-х проводной шине.

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

1. Режим записи в DS1307 . Последовательные данные и такты получены через SDA и SCL. После передачи каждого байта передаётся подтверждающий бит ASK . Состояния START и STOP опознаются как начало и конец последовательной передачи. Распознавание адреса выполняется аппаратно после приема адреса ведомого и бита направления. Байт адреса содержит семибитный адрес DS1307, равный 1101000, сопровождаемым битом направления (R/W), который при записи равен 0. После получения и расшифровки байта адреса DS1307 выдаёт подтверждение ASK на линии SDA. После того, как DS1307 подтверждает адрес ведомого и бит записи, ведущий передает адрес регистра DS1307. Тем самым будет установлен указатель регистра в DS1307. Тогда ведущий начнет передавать байты данных в DS1307, который будет подтверждать каждый полученный байт. По окончании записи ведущий сформирует состояние STOP .

2. Режим чтения из DS1307 . Первый байт принимается и обрабатывается как в режиме ведомого приёмника. Однако в этом режиме бит направления укажет, что направление передачи изменено. Последовательные данные передаются по SDA от DS1307, в то время как последовательные такты - по SCL в DS1307. Состояния START и STOP опознаются как начало и конец последовательной передачи. Байт адреса - первый байт, полученный после того, как ведущим сформировано состояние START . Байт адреса содержит семибитный адрес DS1307, равный 1101000, сопровождаемым битом направления (R/W), который при чтении равен 1. После получения и расшифровки байта адреса DS1307 выдаёт подтверждение ASK на линии SDA. Тогда DS1307 начинает передавать данные, начинающиеся с адреса регистра, на которые указывает указатель регистра. Если указатель регистра не записан перед инициированием режима чтения, то первый адрес, который читается - это последний адрес, оставшийся в указателе регистра. DS1307 должен получить неподтверждение NOASK , чтобы закончить чтение.

Рассмотрим особенности работы с DS1307 на примере простых часов, которые будут показывать часы, минуты и секунды. Данные будут выводиться на LCD дисплей 16х2. Две кнопки "Часы+" и "Минуты+" позволят подвести нужное время. Микроконтроллер Atmega 8 тактируется от внутреннего генератора частотой 1 MHz, поэтому не забудьте поменять фьюзы. Ниже представлена схема подключения.

Управляющая программа включает в себя наборы функций работы с шиной TWI, часами DS1307, LCD дисплеем.

I2CInit - инициализация шины;
I2CStart - передача условия START;
I2CStop - передача условия STOP;
I2CWriteByte - запись данных;
I2CReadByte - чтение данных;
DS1307Read - функция чтения данных из DS1307;
DS1307Write - Функция записи данных в DS1307;
lcd_com - передача команды в LCD;
lcd_data - передача данных в LCD;
lcd_string - функция вывода строки в LCD;
lcd_num_to_str - функция вывода символа типа int;
lcd_init - инициализация LCD.

Ниже представлен код программы:

#include #include // Функция инициализация шины TWI void I2CInit(void) { TWBR = 2; // Настройка частоты шины TWSR = (1 << TWPS1)|(1 << TWPS0); // Предделитель на 64 TWCR |= (1 << TWEN); // Включение модуля TWI } // Функция СТАРТ void I2CStart(void) { TWCR = (1 << TWINT)|(1 << TWEN)|(1 << TWSTA); // Передача условия СТАРТ while(!(TWCR & (1 << TWINT))); // Ожидание установки флага TWINT } // Функция СТОП void I2CStop(void) { TWCR = (1 << TWINT)|(1 << TWEN)|(1 << TWSTO); // Передача условия СТОП while(TWCR & (1 << TWSTO)); // Ожидание завершения передачи условия СТОП } // Функция записи данных по шине uint8_t I2CWriteByte(uint8_t data) { TWDR = data; // Загрузка данных в TWDR TWCR = (1 << TWEN)|(1 << TWINT); // Сброс флага TWINT для начала передачи данных while(!(TWCR & (1 << TWINT))); // Ожидание установки флага TWINT // Проверка статуса // Если адрес DS1307+R и принято "подтверждение"(0x18) // или адрес DS1307+W и принято "подтверждение"(0x40) // или передается байт данных и принято "подтверждение"(0x28) if((TWSR & 0xF8) == 0x18 || (TWSR & 0xF8) == 0x40 || (TWSR & 0xF8) == 0x28) return 1; // OK else return 0; // ОШИБКА } // Функция чтения данных по шине uint8_t I2CReadByte(uint8_t *data,uint8_t ack) { // Возвращаем "подтверждение" после приема if(ack) TWCR |= (1 << TWEA); // Возвращаем "неподтверждение" после приема // Ведомое устройство не получает больше данных // обычно используется для распознования последнего байта else TWCR &= ~(1 << TWEA); // Разрешение приема данных после сброса TWINT TWCR |= (1 << TWINT); while(!(TWCR & (1 << TWINT))); // Ожидание установки флага TWINT // Проверка статуса // Если принят байт данных и возвращается "подтверждение"(0x50) // или принят байт данных и возвращается "ненеподтверждение"(0x58) if((TWSR & 0xF8) == 0x50 || (TWSR & 0xF8) == 0x58) { *data = TWDR; // Читаем данные из TWDR return 1; // OK } else return 0; // ОШИБКА } // Функция чтения данных из DS1307 uint8_t DS1307Read(uint8_t address,uint8_t *data) { uint8_t res; I2CStart(); // СТАРТ res = I2CWriteByte(0b11010000); // адрес DS1307+W if(!res) return 0; // ОШИБКА // Передача адреса необходимого регистра res = I2CWriteByte(address); if(!res) return 0; // ОШИБКА I2CStart(); // Повторный СТАРТ res = I2CWriteByte(0b11010001); // адрес DS1307+R if(!res) return 0; // ОШИБКА // Чтение данных с "неподтверждением" res = I2CReadByte(data,0); if(!res) return 0; // ОШИБКА I2CStop(); // СТОП return 1; // OK } // Функция записи данных в DS1307 uint8_t DS1307Write(uint8_t address,uint8_t data) { uint8_t res; I2CStart(); // СТАРТ res = I2CWriteByte(0b11010000); // адрес DS1307+W if(!res) return 0; // ОШИБКА // Передача адреса необходимого регистра res = I2CWriteByte(address); if(!res) return 0; // ОШИБКА res = I2CWriteByte(data); // Запись данных if(!res) return 0; // ОШИБКА I2CStop(); // СТОП return 1; // OK } // Функции работы с LCD #define RS PD0 #define EN PD2 // Функция передачи команды void lcd_com(unsigned char p) { PORTD &= ~(1 << RS); // RS = 0 (запись команд) PORTD |= (1 << EN); // EN = 1 (начало записи команды в LCD) PORTD &= 0x0F; PORTD |= (p & 0xF0); // старший нибл _delay_us(100); PORTD &= ~(1 << EN); // EN = 0 (конец записи команды в LCD) _delay_us(100); PORTD |= (1 << EN); // EN = 1 (начало записи команды в LCD) PORTD &= 0x0F; PORTD |= (p << 4); // младший нибл _delay_us(100); PORTD &= ~(1 << EN); // EN = 0 (конец записи команды в LCD) _delay_us(100); } // Функция передачи данных void lcd_data(unsigned char p) { PORTD |= (1 << RS)|(1 << EN); // RS = 1 (запись данных), EN - 1 (начало записи команды в LCD) PORTD &= 0x0F; PORTD |= (p & 0xF0); // старший нибл _delay_us(100); PORTD &= ~(1 << EN); // EN = 0 (конец записи команды в LCD) _delay_us(100); PORTD |= (1 << EN); // EN = 1 (начало записи команды в LCD) PORTD &= 0x0F; PORTD |= (p << 4); // младший нибл _delay_us(100); PORTD &= ~(1 << EN); // EN = 0 (конец записи команды в LCD) _delay_us(100); } // Функция вывода строки на LCD void lcd_string(unsigned char command, char *string) { lcd_com(0x0C); lcd_com(command); while(*string != "\0") { lcd_data(*string); string++; } } // Функция вывода переменной void lcd_num_to_str(unsigned int value, unsigned char nDigit) { switch(nDigit) { case 4: lcd_data((value/1000)+"0"); case 3: lcd_data(((value/100)%10)+"0"); case 2: lcd_data(((value/10)%10)+"0"); case 1: lcd_data((value%10)+"0"); } } // Функция инициализации LCD void lcd_init(void) { PORTD = 0x00; DDRD = 0xFF; _delay_ms(50); // Ожидание готовности ЖК-модуля // Конфигурирование четырехразрядного режима PORTD |= (1 << PD5); PORTD &= ~(1 << PD4); // Активизация четырехразрядного режима PORTD |= (1 << EN); PORTD &= ~(1 << EN); _delay_ms(5); lcd_com(0x28); // шина 4 бит, LCD - 2 строки lcd_com(0x08); // полное выключение дисплея lcd_com(0x01); // очистка дисплея _delay_us(100); lcd_com(0x06); // сдвиг курсора вправо lcd_com(0x0C); // включение дисплея, курсор не видим } int main(void) { _delay_ms(100); DDRC = 0x00; PORTC = 0xFF; lcd_init(); // Инициализация LCD I2CInit(); // Инициализация шины I2C lcd_string(0x81, "«acГ Ѕa DS1307"); // Часы на DS1307 lcd_string(0xC4, " : : "); // Запускаем ход часов uint8_t temp; DS1307Read(0x00,&temp); temp &= ~(1 << 7); // обнуляем 7 бит DS1307Write(0x00,temp); while(1) { unsigned char hour, minute, second, temp; // Читаем данные и преобразуем из BCD в двоичную систему DS1307Read(0x00,&temp); // Чтение регистра секунд second = (((temp & 0xF0) >> 4)*10)+(temp & 0x0F); DS1307Read(0x01,&temp); // Чтение регистра минут minute = (((temp & 0xF0) >> 4)*10)+(temp & 0x0F); DS1307Read(0x02,&temp); // Чтение регистра часов hour = (((temp & 0xF0) >> 4)*10)+(temp & 0x0F); lcd_com(0xC4); lcd_num_to_str(hour, 2); // Выводим на экран часы lcd_com(0xC7); lcd_num_to_str(minute, 2); // Выводим на экран минуты lcd_com(0xCA); lcd_num_to_str(second, 2); // Выводим на экран секунды if((PINC & (1 << PC0)) == 0) // Если нажата кнопка { while((PINC & (1 << PC0)) == 0){} // Ждем отпускания кнопки hour++; // Увеличиваем часы на 1 if(hour > 23) hour = 0; // Преобразуем из двоичной системы в BCD и записываем в DS1307 uint8_t temp; temp = ((hour/10) << 4)|(hour%10); DS1307Write(0x02, temp); _delay_ms(100); } if((PINC & (1 << PC1)) == 0) // Если нажата кнопка { while((PINC & (1 << PC1)) == 0){} // Ждем отпускания кнопки minute++; // Увеличиваем минуты на 1 if(minute > 59) minute = 0; // Преобразуем из двоичной системы в BCD и записываем в DS1307 uint8_t temp; temp = ((minute/10) << 4)|(minute%10); DS1307Write(0x01, temp); _delay_ms(100); } } }



Понравилась статья? Поделиться с друзьями: