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/display.c | 10 +--- Lab3.X/lab3_main_c.c | 19 ++++++-- Lab3.X/nbproject/private/private.xml | 13 +++++ Lab3.X/numpad.c | 95 ++++++++++++++++++++++++++++++++++++ 4 files changed, 125 insertions(+), 12 deletions(-) create mode 100644 Lab3.X/nbproject/private/private.xml diff --git a/Lab3.X/display.c b/Lab3.X/display.c index 2c2fd1f..5ad9c4f 100644 --- a/Lab3.X/display.c +++ b/Lab3.X/display.c @@ -2,17 +2,11 @@ #include "display.h" //Functions used for Display - -void delay(long num) { - long i; - for (i; i < num; i++) { - asm("nop"); - } -} void init7seg(void) { TRISB = 0b0000000000000011; //and port B to outputs LATB = 0x0000; //and all of port B to LOW } + void showChar7seg(char myChar, enum DIGIT myDigit) { LATB &= 0x00; switch (myChar) { @@ -65,7 +59,7 @@ void showChar7seg(char myChar, enum DIGIT myDigit) { LATB ^= (0b01110001 << 2); break; default: - LATB ^= (0b1010001 << 2); + LATB ^= (0b11111111 << 2); break; } //END OF SWITCH LATB |= myDigit; diff --git a/Lab3.X/lab3_main_c.c b/Lab3.X/lab3_main_c.c index 1ead16d..406f657 100644 --- a/Lab3.X/lab3_main_c.c +++ b/Lab3.X/lab3_main_c.c @@ -17,6 +17,11 @@ // Fail-Safe Clock Monitor is enabled) #pragma config FNOSC = FRCPLL // Oscillator Select (Fast RC Oscillator with PLL module (FRCPLL)) +void delay(long n) { + for (n=n; n>0; n--) { + asm("nop"); + } +} void setup(void) { CLKDIVbits.RCDIV = 0; //Set RCDIV=1:1 (default 2:1) 32MHz or FCY/2=16M @@ -27,11 +32,17 @@ void setup(void) { int main(void) { setup(); + char right, left, temp; while (1) { - showChar7seg('1', LSB); - delay(170); - showChar7seg('0', MSB); - delay(170); + temp = readKeyPadRAW(); + if (temp != '\0') { + left = right; + right = temp; + } + showChar7seg(right, LSB); + delay(200); + showChar7seg(left, MSB); + delay(200); } } diff --git a/Lab3.X/nbproject/private/private.xml b/Lab3.X/nbproject/private/private.xml new file mode 100644 index 0000000..c10361e --- /dev/null +++ b/Lab3.X/nbproject/private/private.xml @@ -0,0 +1,13 @@ + + + + + + file:/C:/Users/Ross/MPLABXProjects/EE2361Projects/Lab3.X/display.h + file:/C:/Users/Ross/MPLABXProjects/EE2361Projects/Lab3.X/numpad.h + file:/C:/Users/Ross/MPLABXProjects/EE2361Projects/Lab3.X/display.c + file:/C:/Users/Ross/MPLABXProjects/EE2361Projects/Lab3.X/numpad.c + file:/C:/Users/Ross/MPLABXProjects/EE2361Projects/Lab3.X/lab3_main_c.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