GroupA / Mbed 2 deprecated WaG_final

Dependencies:   mbed

Fork of Lab_6_WaG by GroupA

Committer:
phn10
Date:
Thu Feb 22 02:03:30 2018 +0000
Revision:
6:749a691e2abf
Parent:
4:0ed77d8b3e42
Child:
7:161fe3793ddb
change variable to defined constant

Who changed what in which revision?

UserRevisionLine numberNew contents of line
spm71 0:ee6e5c60dd2d 1 /******************************************************************************
spm71 0:ee6e5c60dd2d 2 * EECS 397
spm71 0:ee6e5c60dd2d 3 *
spm71 0:ee6e5c60dd2d 4 * Assignment Name: Lab 4: display_test2
spm71 0:ee6e5c60dd2d 5 *
spm71 0:ee6e5c60dd2d 6 * Authors: Sam Morrison and Phong Nguyen
spm71 0:ee6e5c60dd2d 7 *
spm71 0:ee6e5c60dd2d 8 * Purpose: Configures the board for 5-digit display
spm71 0:ee6e5c60dd2d 9 *
spm71 0:ee6e5c60dd2d 10 * Last Modified: 02/19/2018
spm71 0:ee6e5c60dd2d 11 *
spm71 0:ee6e5c60dd2d 12 ******************************************************************************/
spm71 0:ee6e5c60dd2d 13 #include "mbed.h"
spm71 0:ee6e5c60dd2d 14 #include <stdlib.h>
spm71 0:ee6e5c60dd2d 15 #include <stdio.h>
spm71 0:ee6e5c60dd2d 16 #include <string.h>
spm71 0:ee6e5c60dd2d 17
phn10 6:749a691e2abf 18 DigitalOut SS(CHIP_SELECT);
spm71 0:ee6e5c60dd2d 19
phn10 6:749a691e2abf 20 SPI spi(MOSI, MISO, SCLK);
spm71 0:ee6e5c60dd2d 21 Serial pc(USBTX, USBRX);
spm71 0:ee6e5c60dd2d 22
spm71 1:1b05289d0bf5 23 bool num_range(char input[5]);
spm71 4:0ed77d8b3e42 24 int convert(int dec);
spm71 1:1b05289d0bf5 25 char to_command(char input, int place);
spm71 4:0ed77d8b3e42 26 int bcd[4];
spm71 1:1b05289d0bf5 27
spm71 0:ee6e5c60dd2d 28 int main(void) {
spm71 0:ee6e5c60dd2d 29 SS = 1;
spm71 0:ee6e5c60dd2d 30
spm71 0:ee6e5c60dd2d 31 spi.format(16,0);
spm71 0:ee6e5c60dd2d 32 spi.frequency(1000000);
spm71 0:ee6e5c60dd2d 33
spm71 0:ee6e5c60dd2d 34 SS = 0;
spm71 0:ee6e5c60dd2d 35 spi.write(0x0C01); //normal operation
spm71 0:ee6e5c60dd2d 36 SS = 1;
spm71 0:ee6e5c60dd2d 37
spm71 0:ee6e5c60dd2d 38 SS = 0;
spm71 0:ee6e5c60dd2d 39 spi.write(0x090F); //decode to bits 0:3
spm71 0:ee6e5c60dd2d 40 SS = 1;
spm71 0:ee6e5c60dd2d 41
spm71 0:ee6e5c60dd2d 42 SS = 0;
spm71 0:ee6e5c60dd2d 43 spi.write(0x0F00); //set to normal mode
spm71 0:ee6e5c60dd2d 44 SS = 1;
spm71 0:ee6e5c60dd2d 45
spm71 0:ee6e5c60dd2d 46 SS = 0;
spm71 0:ee6e5c60dd2d 47 spi.write(0x0A0F); //intensity set to max
spm71 0:ee6e5c60dd2d 48 SS = 1;
spm71 0:ee6e5c60dd2d 49
spm71 0:ee6e5c60dd2d 50 SS = 0;
spm71 0:ee6e5c60dd2d 51 spi.write(0x0B04); //display digits 0:4
spm71 0:ee6e5c60dd2d 52 SS = 1;
spm71 0:ee6e5c60dd2d 53
spm71 0:ee6e5c60dd2d 54 SS = 0;
spm71 0:ee6e5c60dd2d 55 spi.write(0x0100); //set digit 1 to 0
spm71 0:ee6e5c60dd2d 56 SS = 1;
spm71 0:ee6e5c60dd2d 57
spm71 0:ee6e5c60dd2d 58 SS = 0;
spm71 0:ee6e5c60dd2d 59 spi.write(0x0200); //set digit 2 to 0
spm71 0:ee6e5c60dd2d 60 SS = 1;
spm71 0:ee6e5c60dd2d 61
spm71 0:ee6e5c60dd2d 62 SS = 0;
spm71 0:ee6e5c60dd2d 63 spi.write(0x0300); //set digit 3 to 0
spm71 0:ee6e5c60dd2d 64 SS = 1;
spm71 0:ee6e5c60dd2d 65
spm71 0:ee6e5c60dd2d 66 SS = 0;
spm71 0:ee6e5c60dd2d 67 spi.write(0x0400); //set digit 4 to 0
spm71 0:ee6e5c60dd2d 68 SS = 1;
spm71 0:ee6e5c60dd2d 69
spm71 0:ee6e5c60dd2d 70 SS = 0;
spm71 0:ee6e5c60dd2d 71 spi.write(0x0500); //set digit 5 to 0
spm71 0:ee6e5c60dd2d 72
spm71 0:ee6e5c60dd2d 73 float command = 0x0100;
spm71 2:b444464ebe67 74 int input;
spm71 1:1b05289d0bf5 75 //char command_text[10] = "0x0";
spm71 0:ee6e5c60dd2d 76 while(1) {
spm71 0:ee6e5c60dd2d 77 pc.printf("Select a digit between 0 and 9999:\n");
spm71 2:b444464ebe67 78 bool check = scanf("%d", &input);
spm71 2:b444464ebe67 79 while (check != 1) {
spm71 0:ee6e5c60dd2d 80 pc.printf("Select a digit between 0 and 9999:\n");
spm71 2:b444464ebe67 81 check = scanf("%d", &input);
spm71 0:ee6e5c60dd2d 82 }
spm71 0:ee6e5c60dd2d 83
spm71 1:1b05289d0bf5 84 /*
spm71 2:b444464ebe67 85 while (num_range(input) == false) { //ask for input until 0-9999 is selected
spm71 2:b444464ebe67 86 pc.printf("Select a digit between 0 and 9999:\n");
spm71 2:b444464ebe67 87 scanf("%d", input);
spm71 2:b444464ebe67 88 }
spm71 2:b444464ebe67 89
spm71 2:b444464ebe67 90
spm71 0:ee6e5c60dd2d 91 command_text[3] = place + '0';
spm71 0:ee6e5c60dd2d 92 command_text[4] = '0';
spm71 0:ee6e5c60dd2d 93 command_text[5] = input;
spm71 0:ee6e5c60dd2d 94
spm71 0:ee6e5c60dd2d 95 command = atof(command_text); //converts string to float
spm71 1:1b05289d0bf5 96 */
spm71 0:ee6e5c60dd2d 97
spm71 0:ee6e5c60dd2d 98 pc.printf("command: %s\n", command_text);
spm71 0:ee6e5c60dd2d 99
spm71 0:ee6e5c60dd2d 100
spm71 0:ee6e5c60dd2d 101 SS = 0;
spm71 1:1b05289d0bf5 102 spi.write(command); // need to cycle 4 times
spm71 0:ee6e5c60dd2d 103 SS = 1;
spm71 0:ee6e5c60dd2d 104 //pc.printf("command: &f\n", commmand);
spm71 0:ee6e5c60dd2d 105 }
spm71 1:1b05289d0bf5 106
spm71 0:ee6e5c60dd2d 107 /*
spm71 0:ee6e5c60dd2d 108 SS = 0;
spm71 0:ee6e5c60dd2d 109 spi.write(0x0100); //set digit 0 to 0
spm71 0:ee6e5c60dd2d 110 SS = 1;
spm71 0:ee6e5c60dd2d 111 */
spm71 0:ee6e5c60dd2d 112 }
spm71 1:1b05289d0bf5 113
spm71 1:1b05289d0bf5 114 bool num_range(char input[5]) {
spm71 1:1b05289d0bf5 115 bool result = true;
spm71 4:0ed77d8b3e42 116 for (int i = 0; i < 5; i++) {
spm71 4:0ed77d8b3e42 117 if (i > 3)
spm71 1:1b05289d0bf5 118 if (input[i] != 0) //checks for number larger than 9999
spm71 1:1b05289d0bf5 119 result = false;
spm71 1:1b05289d0bf5 120 if (input[i] < 48 or input[i] > 57) //checks for digits outside 0-9
spm71 1:1b05289d0bf5 121 result = false;
spm71 1:1b05289d0bf5 122 }
spm71 1:1b05289d0bf5 123 return result;
spm71 1:1b05289d0bf5 124 }
spm71 1:1b05289d0bf5 125
spm71 4:0ed77d8b3e42 126 void mod_bcd(int num) {
spm71 4:0ed77d8b3e42 127 int size = 4;
spm71 4:0ed77d8b3e42 128 int dec_arr[size];
spm71 4:0ed77d8b3e42 129 int place = 0;
spm71 4:0ed77d8b3e42 130 while (num != 0) { //converts decimal input to decimal array using %mod
spm71 3:293ff9cb705d 131 int val = num % 10;
spm71 4:0ed77d8b3e42 132 dec_arr[place] = val;
spm71 3:293ff9cb705d 133 num = num/10;
spm71 4:0ed77d8b3e42 134 place++;
spm71 3:293ff9cb705d 135 }
spm71 4:0ed77d8b3e42 136 for (int i = 0; i < size; i++) { //converts decimal array to binary array
spm71 4:0ed77d8b3e42 137 bcd[i] = convert(dec_arr[i]);
spm71 3:293ff9cb705d 138 }
spm71 3:293ff9cb705d 139 }
spm71 3:293ff9cb705d 140
spm71 3:293ff9cb705d 141
spm71 1:1b05289d0bf5 142 char to_command(char input, int place) {
spm71 1:1b05289d0bf5 143
spm71 1:1b05289d0bf5 144 }
spm71 4:0ed77d8b3e42 145
spm71 4:0ed77d8b3e42 146 int convert(int dec) {//convert decimal to binary
spm71 4:0ed77d8b3e42 147 if (dec == 0) //function complete
spm71 4:0ed77d8b3e42 148 return 0;
spm71 4:0ed77d8b3e42 149 else //recursive call until converted
spm71 4:0ed77d8b3e42 150 return (dec % 2 + 10 * convert(dec / 2));
spm71 4:0ed77d8b3e42 151 }
spm71 0:ee6e5c60dd2d 152