#define COLUMN 3 // Кількість колонок #define ROW 4 // Кількість рядків #include <mega8.h> #include <delay.h> unsigned char button;//Номер кнопки (позиційний) //Значення що подаються для сканування рядків unsigned char key_tab[ROW] ={0b11111110, 0b11111101, 0b11111011, 0b11110111}; // Функція опитування клавіатури unsigned char scan_key(void) { unsigned char key_value = 0; unsigned char i; for(i = 0;i < ROW;i++)//Виводимо почерзі 0 в рядки { PORTB = key_tab[i]; delay_us(100); switch (PINB & 0xF0)// Зчитуємо значення з порта В { //та обчислюємо номер кнопки case 0b11100000: key_value = 1 + i * COLUMN; return (key_value); case 0b11010000: key_value = 2 + i * COLUMN; return (key_value); case 0b10110000: key_value = 3 + i * COLUMN; return (key_value); break; } } } void main(void) { // Масив цифр для індикатора unsigned char num[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; DDRB |= (1 << 3)|(1 << 2)|(1 << 1)|(1 << 0); // Порт вихода DDRB &= ~(1 << 7)|(1 << 6)|(1 << 5)|(1 << 4); // Порт входа PORTB = 0xF0; // Встановлюємо лог. 1 в порт входа DDRD = 0xFF; // Виход на індикатор PORTD = 0x00; delay_us(100); while(1) { for(button=1;button<10;button++) { if(scan_key()==button) // Виводим значення натисненої кнопки на індикатор PORTD = num[button]; } if(scan_key()==11) // 0 на 11 кнопці PORTD = num[0]; } }
четвер, 15 січня 2015 р.
Матрична клавіатура 3х4 на Atmega8 CodeVision AVR
Підписатися на:
Дописати коментарі
(
Atom
)
Немає коментарів :
Дописати коментар