Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <c8051f340.h>
- #include "time.h"
- #include "uart.h"
- void OSCILLATOR_Init (void);
- void PORT_Init (void);
- char Keypad_Scan();
- char taster;
- char taster_pred;
- char enable = 0;
- char cnt = 0;
- void main(void)
- {
- OSCILLATOR_Init(); // Inicijalizacija oscilatora (Fosc = 22.1184 MHz)
- TIME_Init(); // Inicijalizacija sistemskog vremena (koristi se prekid tajmera 2)
- PORT_Init(); // Inicijalizacija portova
- UART0_Init();
- while(1) {
- taster_pred = taster;
- taster = Keypad_Scan();
- if(taster && (!taster_pred)) {
- UART0_PutChar(taster);
- }
- }
- }
- void PORT_Init (void)
- {
- P2MDIN |= 0x0F; // 4 najniza bita porta P2 -> digitalni
- P2MDOUT = 0x0C; // Pinovi za LED -> push-pull izlazi
- // Crossbar inicijalizacija
- XBR1 = 0x40; // Dozvola crossbar-a i slabih pull-up otpornika
- }
- char Keypad_Scan()
- {
- unsigned char col;
- XBR1 = 0x40; //dozvola crossbar-a i pull-up otpornika
- P1MDOUT = 0x00; //svi pinovi su open-drain
- for(col = 0x01; col != 0x10; col <<= 1)
- {
- P1MDIN = col | 0xf0; //nule u masci su HiZ pinovi
- P1 = ~col; //adresiranje kolone
- delay_ms(2);
- //visi nibl predstavlja kolonu, a nizi stanja tastera:
- switch((col << 4) | ((~P1) >> 4))
- {
- //prva kolona:
- case 0x11:
- return '1';
- case 0x12:
- return '2';
- case 0x14:
- return '3';
- case 0x18:
- return 'A';
- //druga kolona:
- case 0x21:
- return '4';
- case 0x22:
- return '5';
- case 0x24:
- return '6';
- case 0x28:
- return 'B';
- //treca kolona:
- case 0x41:
- return '7';
- case 0x42:
- return '8';
- case 0x44:
- return '9';
- case 0x48:
- return 'C';
- //cetvrta kolona:
- case 0x81:
- return '*';
- case 0x82:
- return '0';
- case 0x84:
- return '#';
- case 0x88:
- return 'D';
- }
- }
- return 0; //nije detektovan nijedan taster
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement