Требуется помощь в составлении простенькой микропроцессорной системы.
- Войдите на сайт для отправки комментариев
Ср, 10/06/2015 - 15:25
Состав микропроцессорной системы:
- 2 цифровых кнопки.
- 1 микроконтроллер.
- одноразовый индикатор.
При нажатии на кнопку 1 на индикаторе происходит счет в сторону возрастания (1,2,3...).
При нажатии на кнопку 2 - в сторону убывания (...3,2,1).
Кто может помочь?
не понял. одноразовый? может одноразрядный?
а вообще почитай
http://arduino.ru/forum/obshchii/sozdanie-temy#comment-75012
не понял. одноразовый? может одноразрядный?
а вообще почитай
http://arduino.ru/forum/obshchii/sozdanie-temy#comment-75012
Одноразрядный. Опечатался...
читай по ссылке. внимательно
Есть такой индикатор, рентгеновский лазер с ядерной накачкой называется, далеко видать)))
Кнопки пин-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); }