Требуется помощь в составлении простенькой микропроцессорной системы.

Stepka
Offline
Зарегистрирован: 10.06.2015

Состав микропроцессорной системы:

- 2 цифровых кнопки.

- 1 микроконтроллер.

- одноразовый индикатор.



При нажатии на кнопку 1 на индикаторе происходит счет в сторону возрастания (1,2,3...).

При нажатии на кнопку 2 - в сторону убывания (...3,2,1).

Кто может помочь?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

не понял. одноразовый? может одноразрядный?

а вообще почитай

http://arduino.ru/forum/obshchii/sozdanie-temy#comment-75012

Stepka
Offline
Зарегистрирован: 10.06.2015

jeka_tm пишет:

не понял. одноразовый? может одноразрядный?

а вообще почитай

http://arduino.ru/forum/obshchii/sozdanie-temy#comment-75012


Одноразрядный. Опечатался...

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

читай по ссылке. внимательно

bwn
Offline
Зарегистрирован: 25.08.2014

Есть такой индикатор, рентгеновский лазер с ядерной накачкой называется, далеко видать)))

vov4ik
Offline
Зарегистрирован: 10.09.2013

Кнопки пин-1 и пин-2, Сдвиговый регистр 74HC59 RCK-4  SI-11  SCK-13, семисегментный индикатор общий минус.

#include  <SPI.h>
bool _gtv1;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
bool _count1I = 0;
int _count1P = 0;
bool _trgs1 = 0;
byte _74HC5951OB1 = 0;
byte _74HC5951TB = 0;
bool _74HC5951NS = 0;
int _sido1TB = 0;
String _sido1TSN;
bool _sido1a1 = 0;
bool _sido1b1 = 0;
bool _sido1c1 = 0;
bool _sido1d1 = 0;
bool _sido1e1 = 0;
bool _sido1f1 = 0;
bool _sido1g1 = 0;
bool _bounseInput3S = 0;
bool _bounseInput3O = 0;
unsigned long _bounseInput3P = 0UL;
bool _bounseInput2S = 0;
bool _bounseInput2O = 0;
unsigned long _bounseInput2P = 0UL;
void setup()
{
pinMode(2, INPUT);
pinMode(3, INPUT);

_bounseInput3O =  digitalRead(3);
_bounseInput2O =  digitalRead(2);
SPI.begin();
pinMode(10, OUTPUT);
pinMode(4, OUTPUT);
}
void loop()
{
bool  _bounceTmp3 =  (digitalRead (3));

if (_bounseInput3S) 
    {
     if (millis() >= (_bounseInput3P + 40)) 
         {_bounseInput3O= _bounceTmp3; _bounseInput3S=0;}
     }
else
    {
     if (_bounceTmp3 != _bounseInput3O )
         {_bounseInput3S=1; _bounseInput3P = millis();} 
      } 
bool  _bounceTmp2 =  (digitalRead (2));

if (_bounseInput2S) 
    {
     if (millis() >= (_bounseInput2P + 40)) 
         {_bounseInput2O= _bounceTmp2; _bounseInput2S=0;}
     }
else
    {
     if (_bounceTmp2 != _bounseInput2O )
         {_bounseInput2S=1; _bounseInput2P = millis();} 
      } 



if ( (_bounseInput2O) || (_bounseInput3O) ) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = millis(); } } else { _gen1I = 0 ; _gen1O= 0;}
 if (_gen1I) {  if ( _isTimer ( _gen1P , 1000 )) { _gen1P = millis(); _gen1O = ! _gen1O;}}
if(0) _count1P = 0;
if (_gen1O) 
   { 
   if (! _count1I)  
      {
        if (_trgs1) {_count1P = _count1P+1;} else {_count1P = _count1P-1;};
       _count1I = 1;
      }
   }
else
   {
   _count1I=0;
   }
if (_count1P < 0 ) _count1P = 0; 
if(_bounseInput2O) _trgs1 = 1;
if(_bounseInput3O) _trgs1 = 0;
_74HC5951NS = 0;
bitWrite(_74HC5951TB, 0, _sido1a1);
bitWrite(_74HC5951TB, 1, _sido1b1);
bitWrite(_74HC5951TB, 2, _sido1c1);
bitWrite(_74HC5951TB, 3, _sido1d1);
bitWrite(_74HC5951TB, 4, _sido1e1);
bitWrite(_74HC5951TB, 5, _sido1f1);
bitWrite(_74HC5951TB, 6, _sido1g1);
bitWrite(_74HC5951TB, 7, 0);
if(! (_74HC5951TB == _74HC5951OB1)){_74HC5951OB1 = _74HC5951TB; _74HC5951NS = 1;}
if (_74HC5951NS) {
digitalWrite(4, 0);
SPI.transfer(_74HC5951OB1);
digitalWrite(4, 1);}
_sido1TSN = String (_count1P);
_sido1TB = _IntToSevenSegment(_charFromStringForIndex(_sido1TSN,1));
_sido1a1 =  bitRead(_sido1TB, 0);
_sido1b1 =  bitRead(_sido1TB, 1);
_sido1c1 =  bitRead(_sido1TB, 2);
_sido1d1 =  bitRead(_sido1TB, 3);
_sido1e1 =  bitRead(_sido1TB, 4);
_sido1f1 =  bitRead(_sido1TB, 5);
_sido1g1 =  bitRead(_sido1TB, 6);

_gtv1 =  _count1P  >=  9;




}
bool _isTimer(unsigned long startTime, unsigned long period )
  {
  unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
  }
byte  _IntToSevenSegment(int value)
  {
 if (value==48) {return 63;}
 if (value==49) {return 6;}
 if (value==50) {return 91;}
 if (value==51) {return 79;}
 if (value==52) {return 102;}
 if (value==53) {return 109;}
 if (value==54) {return 125;}
 if (value==55) {return 7;}  
 if (value==56) {return 127;}
 if (value==57) {return 111;} 
 if (value==45) {return 64;} 
 if (value==65) {return 119;} 
 if (value==67) {return 57;} 
 if (value==99) {return 88;} 
 if (value==100) {return 94;} 
 if (value==69) {return 121;}
 if (value==70) {return 113;} 
 if (value==72) {return 118;} 
 if (value==104) {return 116;} 
 if (value==76) {return 56;}
 if (value==79) {return 63;} 
 if (value==111) {return 92;} 
 if (value==80) {return 115;} 
 if (value==114) {return 80;}
 if (value==83) {return 109;} 
 if (value==116) {return 120;} 
 if (value==85) {return 62;} 
 if (value==117) {return 28;} 
 if (value==110) {return 84;} 
 return 0;
  }
int _charFromStringForIndex(String val, int idx)
 {int lengt=val.length();
  if(lengt < idx) return 0; 
  return val.charAt(lengt-idx);
   }