Без описания |
Поиск в теме | Версия для печати |
Andrey 2004 |
Отправлено: 27 Марта, 2019 - 18:41:38
|
Капитан
Сообщений всего: 46
Дата рег-ции: Дек. 2018
|
Predator пишет:С кнопками - примерно так:
сработало прерывание на таймер (пусть каждые 100 мс) - проверяем, что там с портом, если нажата кнопка -
Спасибо, понял, наверно так и сделаю.
(Добавление)
Вот сделал программу для семисегментного индикатора:
CODE://-----------------------------***Семисигментный индикатор c массивом***-----------------------------//
# define F_CPU 1000000UL
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#define razriad PORTC
#define chislo PORTB
unsigned int razr1 = 0, razr2 = 0, razr3 = 0, razr4 = 0;
unsigned char LOL;
//----------------------------------------------------------------------------------------//
ISR(TIMER0_OVF_vect)
{
if (LOL == 1) {razriad = 0b00000001; chislo = chisla [razr1];}
if (LOL == 2) {razriad = 0b00000010; chislo = chisla [razr2];}
if (LOL == 3) {razriad = 0b00000100; chislo = chisla [razr3];}
if (LOL == 4) {razriad = 0b00001000; chislo = chisla [razr4];}
LOL++;
if( LOL > 4 ) LOL = 0;
}
int chisla [10]=
{
0b00111111,//0
0b00000110,//1
0b01011011,//2
0b01001111,//3
0b01100110,//4
0b01101101,//5
0b01111101,//6
0b00000111,//7
0b01111111,//8
0b01101111,//9
};
void vse_chislo (unsigned int razbivka_chisla)
{
razr1 = razbivka_chisla/1000;//тысячи
razr2 = razbivka_chisla%1000/100;//сотни
razr3 = razbivka_chisla%100/10;//десятки
razr4 = razbivka_chisla%10;//еденицы
}
int main(void)
{
DDRC=0xFF;
PORTC=0x00;
DDRB=0xFF;
PORTB=0x00;
TCCR0|=(1<<1); TCCR0&= ~ ((1<<0)|(1<<2));
TIMSK|=(1<<0);
TCNT0 = 0;
sei();
//----------------------------------------------------------------------------------------//
razriad=0b00000001;
chislo = 0b00111111;
while(1)
{
vse_chislo (1987);
}
}
Но при компиляции выдает ошибку:
Error 'chisla' undeclared (first use in this function)
При двойном щелчке кидает вот сюда:
CODE:if (LOL == 1) {razriad = 0b00000001; chislo = (сюда)chisla [razr1];}
Что не так ?? |
|
|
Predator |
Отправлено: 27 Марта, 2019 - 20:10:59
|
Супермодератор
Сообщений всего: 1307
Дата рег-ции: Июль 2012
|
CODE:
int chisla [10]=
{
0b00111111,//0
0b00000110,//1
0b01011011,//2
0b01001111,//3
0b01100110,//4
0b01101101,//5
0b01111101,//6
0b00000111,//7
0b01111111,//8
0b01101111,//9
};
перенесите выше, чем
CODE:
ISR(TIMER0_OVF_vect)
{
if (LOL == 1) {razriad = 0b00000001; chislo = chisla [razr1];}
if (LOL == 2) {razriad = 0b00000010; chislo = chisla [razr2];}
if (LOL == 3) {razriad = 0b00000100; chislo = chisla [razr3];}
if (LOL == 4) {razriad = 0b00001000; chislo = chisla [razr4];}
LOL++;
if( LOL > 4 ) LOL = 0;
}
иначе вы сперва используете, потом объявляете. Некоторые компиляторы умеют такое разруливать, но это скорее исключение. |
|
|
|
Поиск в теме | Версия для печати |
Страниц (6): « 1 2 3 4 [5] 6 » |
« С чего начать? » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|
|
|