Начнем, возьмем АТМеga16 и одноразрядный 7-ми сигментник. Сделаем просто й счетчик от 0 до 9.
Соберем следующую схему:
#include <mega16.h> #include <delay.h> // Declare your global variables here
void main(void) { int temp=0; // Declare your local variables here // Input/Output Ports initialization // Port A initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00; DDRA=0x00;
// Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0xFF;
// Port C initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTC=0x00; DDRC=0xFF;
// Port D initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTD=0x00; DDRD=0xFF; while (1) { if (PINB.0==1) temp++; // к переменной temp прибавляем еденицу if (temp==10) temp=0; // если temp =10 тогда зануляем switch(temp) // вывести число которое в переменной twmp { case 0:{PORTD=0b11000000; break;} //0 case 1:{PORTD=0b11111001; break;} //1 case 2:{PORTD=0b10100100; break;} //2 case 3:{PORTD=0b10110000; break;} //3 case 4:{PORTD=0b10011001; break;} //4 case 5:{PORTD=0b10010010; break;} //5 case 6:{PORTD=0b10000010; break;} //6 case 7:{PORTD=0b11111000; break;} //7 case 8:{PORTD=0b10000000; break;} //8 case 9:{PORTD=0b10010000; break;} //9 } delay_ms(250); // задержка 250 мс. }; }
Делаем HEX файл и моделируем.
Примечание схема для индикатора с общим катодом, чтобы переделать для дисплея с общим анодом нужно переписать PORTD=0b11000000; break; //0 на PORTD=0b10111111; break; //0 Файлы к проекту находиться в разделе "Файлы" Часть материала взята с сайта http://avru.cwx.ru/ (Kirk99)
|