Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Fork of Lab_6_WaG by
main.cpp@6:749a691e2abf, 2018-02-22 (annotated)
- 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?
User | Revision | Line number | New 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 |