Осваиваю СИ в Atmel Studio и вот решил сразу ставить цели и добиваться. Прошу камнями не кидать, я правда старался.
Делаю игрушку для ребенка "бизиборд". Все как бы просто, но не для меня. Телефонный дисковый номеронабиратель + Семисегментник, который выводит набранную цифру.
Пытаюсь в Протеусе смоделировать нажимая кнопками, имитируя набор номера.... но не работает. Если у кого-то есть свободное время может поможете... буду безумно благодарен.
схемка:
Код программы:
Спойлер
#include <avr/io.h>#include <avr/interrupt.h>
#define F_CPU 8000000UL
#include <util/delay.h>
unsigned char SEGMENTE[] =
{
0b00000000, // 0
0b00000001, // 1
0b00000010, // 2
0b00000011, // 3
0b00000100, // 4
0b00000101, // 5
0b00000110, // 6
0b00000111, // 7
0b00001000, // 8
0b00001001, // 9
};
unsigned char cifra=0;
int main(void)
{
DDRD = 0b00001111; //4 входа и 4 выхода
PORTD = 0b11100000;
while (1)
{
while (PIND & (1<<4)) //если PD4 =1 на протяжении всего набора
{
if (!(PIND & (1<<5))) // если начался набор и PD5=0
{
cifra++;
_delay_ms(2000); //задержка длинна импульса (пока для кнопки)
}
}
if (cifra>0 && cifra<10) // если цифра >0 и <10
{
PORTD = SEGMENTE[cifra]; //вывести на семисегментник
cifra=0;
}
else
{
if (cifra=10)
{
cifra=0;
PORTD = SEGMENTE[cifra];
}
}
Спойлер
#include <Bounce.h>; //так проще устранять дребезг контактов ( http://www.arduino.cc/playground/upload ... Bounce.zip )Bounce bouncer = Bounce(2, 40);
int pulses = 0;
void setup() {
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop() {
while(digitalRead(3) == HIGH) { //пока идет набор
if (bouncer.update()) { //если произошло событие
if (bouncer.read()==0) { //если пришел сигнал с контактной группы
pulses++; //добавить 1 в переменную
bouncer.rebounce(500);
}
}
}
if(pulses > 0 && pulses < 10) { //чтобы в com порт шли только реальные цифры и ничего больше
Serial.println(pulses); //шлем в порт
pulses = 0; // обнуляем переменную
}
else if(pulses == 10) { //если с номеронабирателя пришло 10
pulses = 0; //то реальная цифра - ноль (особенности набирателя), заодно обнуляем переменную
Serial.println(pulses); //шлем в порт
}
}
остальные пины МК заняты, другой схемой.
Заранее спасибо даже за критику. Всем Котам хороший кусок Мяса)




