В чем проблема, что я не учел и почему так проиходит?
Схема
Текст программы в CodeVision
Спойлер
Код: Выделить всё
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 01.10.2014
Author :
Company :
Comments:
Chip type : ATtiny2313A
AVR Core Clock frequency: 8,000000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 32
*****************************************************/
#include <tiny2313a.h>
#include <delay.h>
char Flag1 = 0; // создаем флажок для кнопки 1
char Flag2 = 0; // создаем флажок для кнопки 2
char Flag3 = 0; // создаем флажок для кнопки 3
char Number = 0; //Счетчик
char or = 1; //0(+) если 1(-)
//char tmp=0;
static flash unsigned char Replacement[] = {
(0b00111111), //0
(0b00000110), //1
(0b01011011), //2
(0b01001111), //3
(0b01100110), //4
(0b01101101), //5
(0b01111101), //6
(0b00000111), //7
(0b01111111), //8
(0b01101111) //9
};
void Translation(unsigned char tmp)
{
unsigned char Hundreds = 0;
unsigned char Ten = 0;
unsigned char Units = 0;
Units = tmp;
while(Units >= 100)
{
Units -= 100;
Hundreds ++;
}
while(Units >= 10)
{
Units -= 10;
Ten ++;
}
PORTB.5 = 1;
PORTD = Replacement[Hundreds];
delay_ms(100);
PORTB.5 = 0;
PORTB.6 = 1;
PORTD = Replacement[Ten];
delay_ms(100);
PORTB.6 = 0;
PORTB.7 = 1;
PORTD = Replacement[Units];
delay_ms(100);
PORTB.7 = 0;
}
void main(void)
{
//PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB |= ((1<<5)|(1<<6)|(1<<7));
//PORTD = 0x00;
DDRD = 0xFF;
while (1)
{
if(PINB.0 == 0) // опрашиваем кнопку 1(+)
{
Flag1 = 1; //кнопка нажата (устанавливаем флаг в 1)
delay_ms(10); //задержка (защита от дребезга)
}
if(( Flag1 == 1 ) && (PINB.0 == 1 )) //условие если кнопка была нажата а потом отпущена
{
Number += 1;
Flag1 = 0;
// if (or == 0) //Если нажата кнопка 3(-)
// {Number -= 1; Flag1 = 0;} // увеличиваем счетную переменную на единицу и сбрасываем флажок
// if (or == 1) //Если нажата кнопка 3(+)
// {Number += 1; Flag1 = 0;} // увеличиваем счетную переменную на единицу и сбрасываем флажок
}
// if( PINB.1 == 0) // опрашиваем кнопку 2(+)
// {
// Flag2 = 1; //кнопка нажата (устанавливаем флаг в 1)
// delay_ms(3); //задержка (защита от дребезга)
// }
//
// if(( Flag2 == 1 ) && (PINB.1 == 1)) //условие если кнопка была нажата о потом отпущена
// { or=0; Flag2=0;} // уменьшаем счетную переменную на единицу и сбрасываем флажок
//
// if( PINB.2 == 0) // опрашиваем кнопку 2(+)
// {
// Flag3 = 1; //кнопка нажата (устанавливаем флаг в 1)
// delay_ms(3); //задержка (защита от дребезга)
// }
//
// if(( Flag3 == 1 ) && (PINB.2 == 1)) //условие если кнопка была нажата о потом отпущена
// { or = 1; Flag3 = 0;} // уменьшаем счетную переменную на единицу и сбрасываем флажок
Translation(Number);
}
}


