Среда разработки: microC PRO for PIC
Микроконтроллер: PIC16F887
Программатор: PICkit 3
Код программы:
unsigned short kp, cnt, oldstate = 0; char txt[6];
// Keypad module connections char keypadPort at PORTD; const char kod[] = { 0b00010100, 0b11010111, 0b10001100, 0b10000101, 0b01000111, 0b00100101, 0b00100100, 0b10010111, 0b00000100, 0b00000101 };
int count; int i = 0; void setdigit(char d) // Дисплей { porta = d; portb.RB7 = d.B7; portb.RB6 = d.b6; }
void main() { cnt = 0; // Сбросить счетчик Keypad_Init(); // Инициализация клавиатуры ANSEL = 0; // Настройка контактов AN как цифровой ввод-вывод ANSELH = 0; ANSEL = 0b0000011; 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 = 0B1100000; TRISB = 0X01; //intcon.INTE = 1; //intcon.INTF = 0; //intcon.PEIE = 1; //intcon.GIE = 1;
do { kp = 0; // Сбросить переменную ключевого кода
// Подождите, пока клавиша будет нажата и отпущена do kp = Keypad_Key_Press(); // Сохранить код ключа в переменной kp //kp = Keypad_Key_Click(); while (!kp); PORTE = 0B0000110; // Подготовьте значение для вывода, преобразуйте ключ в его значение ASCII switch (kp) {
case 1: setDigit(kod[1]); break; // 1 case 2: setDigit(kod[2]); break; // 2 case 3: setDigit(kod[3]); break; // 3 // case 4: setDigit(kod[4]); break; // A case 5: setDigit(kod[4]); break; // 4 case 6: setDigit(kod[5]); break; // 5 case 7: setDigit(kod[6]); break; // 6 // case 8: setDigit(kod[8]); break; // B case 9: setDigit(kod[7]); break; // 7 case 10: setDigit(kod[8]); break; // '*' //case 11: setDigit(kod[1]); break; // '0' //case 12: setDigit(kod[1]); break; // '#' //default: kp += 48; // case 10: kp = 56; break; // 8 case 11: setDigit(kod[9]); break; // 9 //case 12: kp = 67; break; // C //case 13: kp = 42; break; // * case 14: setDigit(kod[0]); break; // 0 //case 15: kp = 35; break; // # //case 16: kp = 68; break; // D
} } while (1); }