Среда разработки: microC PRO for PIC
Микроконтроллер: PIC16F887
Программатор: PICkit 3
Код программы:
const char kod[]={0b00010100, 0b11010111, 0b10001100, 0b10000101, 0b01000111, 0b00100101, 0b00100100, 0b10010111, 0b00000100, 0b00000101}; // Коды индикатора
int count; // Переменная счетчик int i =0; void interrupt(){ // Функция обработки прерываний if(INTCON.INTF) { // Если прерывание от внешнего источника count = 0; // Сбросим счетчик PORTB.RB1 = 0; // Выключим реле INTCON.INTF = 0; // Сбросим флаг прерывания } }
void setDigit(char d){ PORTA = d; PORTB.RB7 = d.B7; PORTB.RB6 = d.B6; }
void main() { // Основная программа ANSEL = 0b00000011; // Настраиваем аналоговые вывода ANSELH = 0x00; // Как цифровые TRISB.RB0 = 1; // Вход внешнего прерывания TRISC.RC5 = 1; // Вход фотодатчика TRISB.RB1 = 0; // Выход на реле TRISE.RE0 = 0; PORTE.RE0 = 1; // Реле отключено TRISE.RE1 = 0; PORTE.RE1 = 1; // Настройка портов управления анодами TRISE.RE2 = 0; PORTE.RE2 = 1; TRISA = 0b11000000; // Выводы данных на дисплей TRISB = 0x01; // Ничего не отображаем INTCON.INTE = 1; // Разрешаем внешнее прерывание INTCON.INTF = 0; // Сбросим флаг внешнего прерывания INTCON.PEIE = 1; // Разрешим прерывания от периферии INTCON.GIE = 1; // Глобальное разрешение прерываний count = 0; do { PORTE = 0b0000011; setDigit(kod[count]); if (Button(&PORTC, 5,200, 0)) { count ++; PORTB.RB1 = 0; } if (count> 9) { count=0; PORTB.RB1 = 1; } }while(1); }