- Код: Выделить всё • Развернуть
print(751);
Но при выполнении того же действия при нажатии кнопки происходит что то совсем не понятное моему разуму: число 0751 выводится поразрядно, начиная с младшего, с задержкой около секунды и после отрисовки и отпускания кнопки остается висеть на индикаторе (я ожидал 0000 увидеть)
Пожалуйста, не могли бы вы посмотреть код и сказать, что в нем не то?
- Код: Выделить всё • Развернуть
if (PINA.1==0) print(751);
- Код: Выделить всё • Развернуть
#include <mega16.h>
#include <delay.h>
unsigned char segment[10]= { 0x40,0x76,0xC,0x24,0x32,0x21,0x1,0x74,0x0,0x20 }, data[4]= {0,0,0,0};
void cifra(int z)
{
PORTC=0xFF;
PORTC = segment[z];
delay_ms(5);
}
void print(int n)
{
data[0]=n%10; n = n/10;
data[1]=n%10; n = n/10;
data[2]=n%10; n = n/10;
data[3]=n%10;
}
void initialization()
{
DDRC=0xFF;
PORTC=0xFF;
DDRA=0xFD;
PORTA=0xFD;
TCCR0=0x05;
TCNT0=0x16;
OCR0=0x00;
TIMSK=0x01;
#asm("sei");
}
void main(void)
{
initialization();
while (1)
{
if (PINA.1==0) print(751);
}
}
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0x16;
PORTA=0x10; cifra(data[0]);
PORTA=0x20; cifra(data[1]);
PORTA=0x40; cifra(data[2]);
PORTA=0x80; cifra(data[3]);
}