From 98850dad7260f2dc33e5726222be4decdf098e18 Mon Sep 17 00:00:00 2001 From: RossTheRoss Date: Sun, 23 Feb 2020 19:38:25 -0600 Subject: I hate this (Lab 3 partially working again) --- Lab3.X/numpad.c | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) (limited to 'Lab3.X/numpad.c') diff --git a/Lab3.X/numpad.c b/Lab3.X/numpad.c index fcd87cc..271b324 100644 --- a/Lab3.X/numpad.c +++ b/Lab3.X/numpad.c @@ -7,3 +7,98 @@ void initKeyPad(void) { CNPU1bits.CN13PUE = 1; CNPU1bits.CN14PUE = 1; } +void padDelay(long n) { + for (n=n; n>0; n--) { + asm("nop"); + } +} +// 1 2 3 4 5 6 7 8 +// RA0 RA1 RA2 RA3 RB15 RB14 RB13 RB12 +char readKeyPadRAW(void) { + int i; + char num; + num = (!_RB15 << 3) | (!_RB14 << 2) | (!_RB13 << 1) | !_RB12; + LATB |= (0b1111 << 12); + for (i = 0; i < 4; i++) { + LATB ^= 0b1 << (15 - i); + padDelay(10); + switch (i) { + case 0: + switch (num) { + case 0b1110: + return 'A'; + break; + case 0b1101: + return '3'; + break; + case 0b1011: + return '2'; + break; + case 0b111: + return '1'; + break; + } break; + case 1: + switch (num) { + case 0b1110: + return 'b'; + break; + case 0b1101: + return '6'; + break; + case 0b1011: + return '5'; + break; + case 0b111: + return '4'; + break; + } break; + case 2: + switch (num) { + case 0b1110: + return 'C'; + break; + case 0b1101: + return '9'; + break; + case 0b1011: + return '8'; + break; + case 0b111: + return '7'; + break; + } break; + case 3: + switch (num) { + case 0b1110: + return 'd'; + break; + case 0b1101: + return 'E'; + break; + case 0b1011: + return '0'; + break; + case 0b111: + return 'F'; + break; + } break; + } //END switch(i); + LATB |= (0b1111 << 12); + } + return '\0'; +} +/* +Outputs<8:5> = 0b0111; // Set Row 1 output Low +delay(1us); // this delay could be lower, probably 2-3 cycles +RowOne = Inputs<4:1>; // returns 0b1111 (no buttons pressed in row 1) + +Outputs<8:5> = 0b1011; // Set Row 2 output Low +delay(1us); +RowTwo = Inputs<4:1>; // returns 0b1101 (the ?6? key was pressed!) +... +Outputs<8:5> = 0b1110; // Set Row 4 output Low +delay(1us); +RowFour = Inputs<4:1>; // returns 0b1111 (no buttons pressed in row 4) + + */ \ No newline at end of file -- cgit v1.2.3