Добрый вечер) спаял индикатор матричный. учусь работать с ним. написал прогу что бы просто выводила числа. а хочу сделать так что бы при нажатии на кнопку число изменялось. допустим увеличивалось на 1. не могу допетрить)))) перепробовал кучу вариантов. нефига...
сам код. схемы в протеусе нету, тестирую сразу в железе.
схема такая к порту D подключены столбцы, к порту B строки матрицы, к PB7 кнопка одним выводом на минус. контроллер тини2313.
Раздел: AVR
сам код. схемы в протеусе нету, тестирую сразу в железе.
схема такая к порту D подключены столбцы, к порту B строки матрицы, к PB7 кнопка одним выводом на минус. контроллер тини2313.
#include <avr/io.h>
#include <math.h>
#include <util/delay.h>
unsigned short k[] = {0b1000000,0b0100000,0b0010000,0b0001000,0b0000100}; //столбцы
unsigned short i3[10][5] = { //строки
{0b1110000,0b1110110,0b1110110,0b1110110,0b1110000}, //0
{0b1111101,0b1111001,0b1110101,0b1111101,0b1111101}, //1
{0b1110000,0b1111110,0b1110000,0b1110111,0b1110000},//2
{0b1110000,0b1111110,0b1111000,0b1111110,0b1110000}, //3
{0b1110110,0b1110110,0b1110000,0b1111110,0b1111110}, //4
{0b1110000,0b1110111,0b1110000,0b1111110,0b1110000} //5
};
int but(void) //изменение переменной по нажатию кнопки которая выбирает цифру из массива
{
int v=0;
if ((PINB&(1<<PB7))==0)
{
v++;
}
_delay_ms(50);
return v;
}
int b(int c, int y) // функция вывода числа на матрицу
{
while(c<5)
{
PORTD=k[c];
PORTB=i3[y][c];
c++;
_delay_ms(1);
}
}
int main(void)
{
DDRB|=(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(0<<7);
DDRD=0xff;
PORTD=0xff;
PORTB|=(1<<7);
while(1)
{
int c = but();
int z = 0;
b(c,z);
}
}
Раздел: AVR