Будем считать количество нажатий на одну кнопку и зажигать разные светодиоды, в зависимости от того сколько раз нажата кнопка.
Код писал в 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 архив





