Уважаемые посетители! Форум CQHAM.RU существует исключительно за счет показа рекламы. Мы будем благодарны, если Вы не будете блокировать рекламу на нашем Форуме. Просим внести cqham.ru в список исключений для Вашего блокировщика рекламы.
Страница 7 из 7 ПерваяПервая ... 4567
Показано с 61 по 67 из 67

Тема: как программировать "атмегу 8"

  1. #61
    Извините, я неправильно высказался, должно быть одно нажатие кнопки - переключение на следующий сегмент, а не одним нажатием кнопки запустить поочерёдное засвечивание сегментов вплоть до 7.
    Учащийся


  2. #62

    Регистрация
    01.07.2014
    Адрес
    Томск
    Сообщений
    439
    Позывной
    UA9HGC
    // первая кнопка
    if(!(PINC&0x01))
    {
    if(ap==3) // 3 1
    {PORTA = 0b00001110;
    ap = 1;
    delay_ms(100);}
    if(ap==2) // 2 0
    {PORTA = 0b00001011;
    ap=0;
    delay_ms(100);}
    if(ap==1) // 1 2
    {PORTA = 0b00001101;
    ap=2;
    delay_ms(100);}
    if(ap==0) // 0 3
    {PORTA = 0b00000111;
    ap=3;
    delay_ms(100);}
    }
    Что то откопал выглядеть должно как то так.Одно нажатие в регистр А заносим число. Следующее нажатие следующее число.
    В вашем случае в регистр D.

  3. #63

    Регистрация
    12.09.2006
    Адрес
    Болгария, Силистра, KN34PC
    Сообщений
    1,480
    Позывной
    LZ2WSG
    Ето следующий шаг. Подготовитье сегменты каждого числа, например, в массиве, и извлечь набор сегментов для соответствующего числа по номер.
    Код:
    uint8_t num[11] = {
      //hgfedcba
      0b11000000,  // 0
      0b11111001,  // 1
    ...
    И закодируйте светящиеся светодиоды, если возможно, сначала с карандаша на листе бумаги, без копирования 1:1. Спустя время о нем вспомините на неопределенный срок .
    (частично пользуюсь переводчиком)

  4. #64
    Здравствуйте. Не могу понять запись сравнения состояния ножки МК.
    Изначально PORTB=0b00000001, на PB0 подключена кнопка на массу. При нажатии кнопки на РВ0 приходит "0" и выполняется код .
    Автор ролика показывает на макете, что обе записи аналогичны и верны:
    1. IF(~PINB & (1<<0));
    2. IF(0==(PINB & (1<<0))); .
    Во втором случае выглядит, как нажали кнопку, обнулили РВ0, " (0 & 1)==0 верно" и идёт выполнение кода ниже.
    В первом случае, как нажали кнопку, (0 & 1) ==0 инвертируем, и получаем "1"... и идёт выполнение кода ниже.
    Подскажите пожалуйста, где я ошибся.
    Спасибо.
    Учащийся

  5. #65

    Регистрация
    14.06.2018
    Адрес
    Санкт-Петербург
    Сообщений
    1,025
    Первая запись. Вспоминаем о приоритете операций, (логических и арифметических) где говорится, что операция ~ (логическое НЕ) имеет приоритет над & (логическое И), и что круглые скобки круче их обоих.


    Видим, что справа от & обаразуется 1, (по коду, вероятнее всего, очистится регистр r1, затем в его нулевом разряде установится бит и не сдвинется ноль раз влево) Компиляторы сейчас и не такое исправляют. Непросто, да, но единичку справа получили.


    Смотрим налево, ведь для истинности всего выражения требуется, чтобы и с другой стороны оператора & появилась 1.


    Учитывая инверсию, для этого необходимо, чтобы в регистре порта PINB бит 0 был сброшен (нажата кнопка). Все нолики станут единичками, и наоборот, так что вариант сработает, ага. (Главное, чтобы сопутствующая инверсия остальных битов не помешала мысли, ибо инверсия есть, а вдруг там один из выводов подключен на драйвер катапультного кресла программиста. "Не знаю, но я бы лучше ничего не трогал" как тот сапёр из анекдота.)

    1 & 1 дадут 1, истина, что и требовалось

    Вторая запись.

    0==0 тоже истинно, что и требовалось автору для продолжения.

    Получается и не было ошибки, акромя катапульты. Или я вопрос не понял?
    Последний раз редактировалось ozforester; 20.09.2021 в 21:20.

  6. #66

    Регистрация
    14.06.2018
    Адрес
    Санкт-Петербург
    Сообщений
    1,025
    Исправлюсь, ибо глупость написал, PINx регистр только для чтения, отменяется катапульта. К тому же инверсия будет происходить во временном регистре, что не повлияло бы на состояние в любом случае.. Бывает.

    Еще раз кратко запись двух операций,

    Код:
    1. IF(~PINB & (1<<0));
    
    
    ~ 00000001 = 11111110
    1111110 & 000000001 = 0
    false
    
    
    ~ 0000000 => 1111111
    11111111 & 000000001 = 1
    true
    
    
    
    
    2. IF(0==(PINB & (1<<0))); 
    
    
    0 == ( 00000001 & 1 )
    0 == 1
    false
    
    
    0 == ( 00000000 & 1 )
    0 == 0
    true

  7. #67
    Аватар для vadim_d
    Регистрация
    29.10.2006
    Адрес
    Санкт-Петербург
    Сообщений
    14,890
    Цитата Сообщение от ozforester Посмотреть сообщение
    Еще раз кратко запись двух операций
    Надо еще короче . (1<<0) - это маска бита 0, дальше читаем код вслух, с выражениями:

    1. IF(~PINB & (1<<0))[/quote] - "если выделенный маской инверсный бит ненулевой" (то есть прямой был нулевой, кнопка нажата)
    2. IF(0==(PINB & (1<<0))) - "если выделенный маской бит нулевой" - то же самое
    Вадим

Страница 7 из 7 ПерваяПервая ... 4567

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Синтезаторы "Колибри" и "Воробей" AD9951/AD9834/Si570
    от Genadi Zawidowski в разделе Трансиверы, приемники КВ/УКВ
    Ответов: 675
    Последнее сообщение: 07.02.2024, 17:09
  2. Автоматическая станция "Луна-21" с "Луноходом-2"
    от R9AD в разделе Старое радио (Ламповые души)
    Ответов: 0
    Последнее сообщение: 16.01.2018, 17:36
  3. Слет радиолюбителей клайпедского клуба "Швитурис" ("Маяк")
    от LY3QN-Jurijus в разделе Коллективы и Радио
    Ответов: 4
    Последнее сообщение: 15.08.2016, 16:41
  4. "Емкостное реле" журн. " Радио" 2010/5 (датчик приближения человека)
    от СВП в разделе Темы не вошедшие в другие разделы форума
    Ответов: 48
    Последнее сообщение: 18.04.2011, 13:47

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •