aboutsummaryrefslogtreecommitdiffstats
path: root/Lab3.X/lab3_main_MAYA_C.c
diff options
context:
space:
mode:
Diffstat (limited to 'Lab3.X/lab3_main_MAYA_C.c')
-rw-r--r--Lab3.X/lab3_main_MAYA_C.c245
1 files changed, 245 insertions, 0 deletions
diff --git a/Lab3.X/lab3_main_MAYA_C.c b/Lab3.X/lab3_main_MAYA_C.c
new file mode 100644
index 0000000..bd12cf7
--- /dev/null
+++ b/Lab3.X/lab3_main_MAYA_C.c
@@ -0,0 +1,245 @@
+#include "xc.h"
+#include "numpad.h"
+#include "display.h"
+
+// CW1: FLASH CONFIGURATION WORD 1 (see PIC24 Family Reference Manual 24.1)
+#pragma config ICS = PGx1 // Comm Channel Select (Emulator EMUC1/EMUD1 pins are shared with PGC1/PGD1)
+#pragma config FWDTEN = OFF // Watchdog Timer Enable (Watchdog Timer is disabled)
+#pragma config GWRP = OFF // General Code Segment Write Protect (Writes to program memory are allowed)
+#pragma config GCP = OFF // General Code Segment Code Protect (Code protection is disabled)
+#pragma config JTAGEN = OFF // JTAG Port Enable (JTAG port is disabled)
+
+
+// CW2: FLASH CONFIGURATION WORD 2 (see PIC24 Family Reference Manual 24.1)
+#pragma config I2C1SEL = PRI // I2C1 Pin Location Select (Use default SCL1/SDA1 pins)
+#pragma config IOL1WAY = OFF // IOLOCK Protection (IOLOCK may be changed via unlocking seq)
+#pragma config OSCIOFNC = ON // Primary Oscillator I/O Function (CLKO/RC15 functions as I/O pin)
+#pragma config FCKSM = CSECME // Clock Switching and Monitor (Clock switching is enabled,
+// Fail-Safe Clock Monitor is enabled)
+#pragma config FNOSC = FRCPLL // Oscillator Select (Fast RC Oscillator with PLL module (FRCPLL))
+
+#define NOKEY 255
+
+void delay(long d) {
+ for (d=d; d > 0; d--) {
+ asm("nop");
+ }
+}
+char cycle();
+
+
+//============================================================================//
+
+int main(void) {
+ init7seg();
+ initKeyPad();
+ char key = 'N';
+ char right, left;
+ int debounce = 250;
+ //RB<9:2> will drive the cathodes of the seven-segment display
+ //RB<11:10> will drive the right and left anodes respectively
+ //RA<3:0> will drive inputs of keypad
+ //RB<15:12> will cycle to sense RA inputs
+ while (1) {
+ if (debounce == 0) {
+ key = cycle();
+ if (key != 'N') {
+ left = right;
+ right = key;
+ }
+ debounce = 250;
+ }
+
+ showChar7seg(right, MSB);
+ delay(500);
+ showChar7seg(left, LSB);
+ delay(200);
+
+ debounce--;
+// while (!IFS0bits.T1IF);
+// IFS0bits.T1IF = 0;
+ }
+}
+
+//============================================================================//
+
+
+//void test7seg(void) {
+// long int wait = 500000;
+// showChar7seg('1', 0);
+// delay(wait);
+// showChar7seg('1', 1);
+// delay(wait);
+// showChar7seg('2', 0);
+// delay(wait);
+// showChar7seg('2', 1);
+// delay(wait);
+// showChar7seg('3', 0);
+// delay(wait);
+// showChar7seg('3', 1);
+// delay(wait);
+// showChar7seg('4', 0);
+// delay(wait);
+// showChar7seg('4', 1);
+// delay(wait);
+// showChar7seg('5', 0);
+// delay(wait);
+// showChar7seg('5', 1);
+// delay(wait);
+// showChar7seg('6', 0);
+// delay(wait);
+// showChar7seg('6', 1);
+// delay(wait);
+// showChar7seg('7', 0);
+// delay(wait);
+// showChar7seg('7', 1);
+// delay(wait);
+// showChar7seg('8', 0);
+// delay(wait);
+// showChar7seg('8', 1);
+// delay(wait);
+// showChar7seg('9', 0);
+// delay(wait);
+// showChar7seg('9', 1);
+// delay(wait);
+// showChar7seg('0', 0);
+// delay(wait);
+// showChar7seg('0', 1);
+// delay(wait);
+// showChar7seg('A', 0);
+// delay(wait);
+// showChar7seg('A', 1);
+// delay(wait);
+// showChar7seg('b', 0);
+// delay(wait);
+// showChar7seg('b', 1);
+// delay(wait);
+// showChar7seg('C', 0);
+// delay(wait);
+// showChar7seg('C', 1);
+// delay(wait);
+// showChar7seg('d', 0);
+// delay(wait);
+// showChar7seg('d', 1);
+// delay(wait);
+// showChar7seg('E', 0);
+// delay(wait);
+// showChar7seg('E', 1);
+// delay(wait);
+// showChar7seg('F', 0);
+// delay(wait);
+// showChar7seg('F', 1);
+// delay(wait);
+// return;
+//}
+
+//void showChar7seg(char myChar, int myDigit) {
+// //1,2,3,4,5,6,7,8,9,0,A,b,C,d,E, and F
+// LATB &= 0xF000;
+// if (myDigit == 1) {
+// if (myChar == '1') {
+// LATB |= 0x067F;
+// } else if (myChar == '2') {
+// LATB |= 0x0497;
+// } else if (myChar == '3') {
+// LATB |= 0x0437;
+// } else if (myChar == '4') {
+// LATB |= 0x0667;
+// } else if (myChar == '5') {
+// LATB |= 0x0527;
+// } else if (myChar == '6') {
+// LATB |= 0x0507;
+// } else if (myChar == '7') {
+// LATB |= 0x047F;
+// } else if (myChar == '8') {
+// LATB |= 0x0407;
+// } else if (myChar == '9') {
+// LATB |= 0x0427;
+// } else if (myChar == '0') {
+// LATB |= 0x040F;
+// } else if (myChar == 'A') {
+// LATB |= 0x0447;
+// } else if (myChar == 'b') {
+// LATB |= 0x0707;
+// } else if (myChar == 'C') {
+// LATB |= 0x058F;
+// } else if (myChar == 'd') {
+// LATB |= 0x0617;
+// } else if (myChar == 'E') {
+// LATB |= 0x0587;
+// } else if (myChar == 'F') {
+// LATB |= 0x05C7;
+// }
+// } else if (myDigit == 0) {
+// if (myChar == '1') {
+// LATB |= 0x0A7F;
+// } else if (myChar == '2') {
+// LATB |= 0x0897;
+// } else if (myChar == '3') {
+// LATB |= 0x0837;
+// } else if (myChar == '4') {
+// LATB |= 0x0A67;
+// } else if (myChar == '5') {
+// LATB |= 0x0927;
+// } else if (myChar == '6') {
+// LATB |= 0x0907;
+// } else if (myChar == '7') {
+// LATB |= 0x087F;
+// } else if (myChar == '8') {
+// LATB |= 0x0807;
+// } else if (myChar == '9') {
+// LATB |= 0x0827;
+// } else if (myChar == '0') {
+// LATB |= 0x080F;
+// } else if (myChar == 'A') {
+// LATB |= 0x0847;
+// } else if (myChar == 'b') {
+// LATB |= 0x0B07;
+// } else if (myChar == 'C') {
+// LATB |= 0x098F;
+// } else if (myChar == 'd') {
+// LATB |= 0x0A17;
+// } else if (myChar == 'E') {
+// LATB |= 0x0987;
+// } else if (myChar == 'F') {
+// LATB |= 0x09C7;
+// }
+// }
+// return;
+//}
+
+
+
+char cycle() {
+ int i = 0;
+ char key = 'N';
+ while (i < 4) {
+ if (i == 0) {
+ LATBbits.LATB12 = 0;
+ LATBbits.LATB13 = 1;
+ LATBbits.LATB14 = 1;
+ LATBbits.LATB15 = 1;
+ } else if (i == 1) {
+ LATBbits.LATB12 = 1;
+ LATBbits.LATB13 = 0;
+ LATBbits.LATB14 = 1;
+ LATBbits.LATB15 = 1;
+ } else if (i == 2) {
+ LATBbits.LATB12 = 1;
+ LATBbits.LATB13 = 1;
+ LATBbits.LATB14 = 0;
+ LATBbits.LATB15 = 1;
+ } else if (i == 3) {
+ LATBbits.LATB12 = 1;
+ LATBbits.LATB13 = 1;
+ LATBbits.LATB14 = 1;
+ LATBbits.LATB15 = 0;
+ }
+ key = readKeyPadRAW();
+ if (key != 'N') {
+ return key;
+ }
+ i++;
+ }
+ return key;
+} \ No newline at end of file