Страница 2 из 2
Re: регистр и светодиоды
Добавлено: Вс окт 19, 2014 10:19:17
sirha
Код: Выделить всё
#include <tiny13.h>
#include <delay.h>
bit OldButton,Button;
unsigned char data, dataC,i;
void main(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
PORTB=0x10;
DDRB=0x07;
while (1)
{
// опрос кнопки с антидребезгом
delay_ms(10);
OldButton= Button;
Button= PINB.4;
if(OldButton && !Button) // нажатие кнопки
{
++data; // тот самый счетчик
dataC=data; // во временную переменную
for(i= 0; i<8; i++) // восемь циклов (передача в 595-ю)
{
PORTB.1=dataC&0x01; // импульс записи
PORTB.0=1;
PORTB.0= 0;
dataC>>=1;
// сдвинули переменную
}
PORTB.2= 1; // защелкивание данных в 595-ой
PORTB.2= 0;
};
}
}
Подскажите пожалуста что мне нужно добавить или поменять в этом коде чтобы светодиоды переключались при нажатии кнопки так: первый загорелся ,потом первый потух - второй загорелся,третий загорелся второй потух и так поочереди
Re: регистр и светодиоды
Добавлено: Вс окт 19, 2014 10:59:06
pyzhman
Код: Выделить всё
unsigned char dataF[]= {1,2,4,8,0x10,0x20,0x40,0x80}; // массив данных для управления светодиодами
...
if(++data > 7) data= 0; // тот самый счетчик считает от 0 до 7
dataC= dataF[data];
Или через
Re: регистр и светодиоды
Добавлено: Вс окт 19, 2014 11:30:03
sirha
Спасибо

,скажите а как через switch(data)?
Re: регистр и светодиоды
Добавлено: Вс окт 19, 2014 12:14:35
pyzhman
Код: Выделить всё
switch(data)
{
case 0:
dataC= 0x01;
break;
case 1:
dataC= 0x02;
break;
// и т.д.
}
Re: регистр и светодиоды
Добавлено: Вс окт 19, 2014 13:18:18
sirha
Код: Выделить всё
if(OldButton && !Button) // нажатие кнопки
{
++data; // тот самый счетчик
dataC=data; // во временную переменную
for(i= 0; i<9; i++) // девять циклов (передача в 595-ю)
{
if(++data > 8 ) data= 0; // тот самый счетчик считает от 0 до 8
dataC= dataF[data];
PORTB.1=dataC&0x01; // импульс записи
PORTB.0=1;
PORTB.0= 0;
}
обьясните мне как работает этот код некоторые моменты не понятны
если нажата кнопка то:
во первых чему равна data???
unsigned char - 0 до 255
++data - что тут происходит ?
0,1,2,3
правильно я понил?
далее dataC приравниваем к просто data??? или ужу новую сложенную?
dataC???
dataC = 0,1,2,3 -???
- как токо data будет больше 8 то data опять будет равна 0, но у меня светодиод не тухнет??? последний 8 горит и все
dataC= dataF[data]; - как я понил достает числа из массива??
dataC=dataF[1]
dataC=dataF[2]
и так далее
PORTB.1=dataC&0x01; смысл этого???работает как надо, просто тупо умножаю на 1? - почему я если пишу вот так PORTB.1=dataC то горят все светодиоды кроме одного???
ведь
Код: Выделить всё
unsigned char dataF[]= {0,1,2,4,8,0x10,0x20,0x40,0x80};
не понимаю
