Управляем одной кнопкой (на языке С)

Будем считать количество нажатий на одну кнопку и зажигать разные светодиоды, в зависимости от того сколько раз нажата кнопка.

Код писал в MPLab X 5.35 и компилятор MPlab XC8 версии 2.10, как установить её на Linux смотрите здесь:

Скачать MPLAB X v5.35 + MPLAB XC8 можно здесь:
“https://web.archive.org/web/20200724202813/https://www.microchip.com/development-tools/pic-and-dspic-downloads-archive”

“rutube.ru/video/eb28c94503b777a0a6ffc61dc9a5b3ed/”

Схема соединения:

Код на Си для Atmega8515, кнопка на ножке PA1, светодиоды на ножках PC3,PC4,PC5,PC7:

#include <xc.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
 
#define F_CPU 1000000UL // 1 MHz clock speed
  
int main(void)
{
PORTC=0xFF;
DDRC=0xFF; 
 
DDRA = 0b0000010;  // Конфигурируем вывод порта PA1 - как вход
PORTA |= ( 1 << 1 ); // Подключаем к PA1 подтягивающий резистор на плюс питания
char in = 1;  // Объявляем переменную in и записываем в неё число 1
char ip = 0; // Объявляем переменную in и записываем в неё число 0 - будет показывать какая кнопка включена

while (1)
      {
      
       
          if (!(PINA & (1<<PINA1)) && in == 1 )    /* если PA1 стал равен нулю и значение in при этом = 1, то мы поймали замыкание кнопки на входе, т. е. перепад из 1 в 0 */
          {
            in = 0;    // 1. Стало быть уровень входного сигнала стал равен нулю
            ip++;    // увеличиваем значение на 1
            _delay_ms(100);    // Задержка 100мс ждём окончания дребезга
          }

         if (PINA & (1 << PINA1) && in == 0)    /* если PA1 стал равен единице и in = 0,
         то мы поймали на входе размыкание кнопки, т. е. перепад из 0 в 1 */
         {
               in = 1;    // В этот момент уровень входного сигнала стал равен нулю
               _delay_ms(100);    /* Задержка 100мс - опять ждём окончания дребезга,
               больше ничего в момент размыкания кнопки делать не будем */
         }
       
if (ip == 1)
{
PORTC = 0b0001000;    // зажигаем светодиод на ножке PC3
}
if (ip == 2)
{
PORTC = 0b0010000;    // зажигаем светодиод на ножке PC4
}
if (ip == 3)
{
PORTC = 0b00100000;    // зажигаем светодиод на ножке PC5
}
if (ip == 4)
{
PORTC = 0b10000000;    // зажигаем светодиод на ножке PC7
}
       
      }
}

Скачать файл с кодом на языке Си и hex файл:
– скачать tar.gz архив
– скачать zip архив

Добавить комментарий