Lab 6 code.
Dependencies: mbed
Fork of WaG by
main.cpp@1:1b05289d0bf5, 2018-02-20 (annotated)
- Committer:
- spm71
- Date:
- Tue Feb 20 17:17:55 2018 +0000
- Revision:
- 1:1b05289d0bf5
- Parent:
- 0:ee6e5c60dd2d
- Child:
- 2:b444464ebe67
Updated input and set up for two BCD conversion functions
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 | |
spm71 | 0:ee6e5c60dd2d | 18 | DigitalOut SS(PC_7); |
spm71 | 0:ee6e5c60dd2d | 19 | |
spm71 | 0:ee6e5c60dd2d | 20 | SPI spi(PA_7, PA_6, PA_5); |
spm71 | 0:ee6e5c60dd2d | 21 | Serial pc(USBTX, USBRX); |
spm71 | 0:ee6e5c60dd2d | 22 | |
spm71 | 1:1b05289d0bf5 | 23 | bool num_range(char input[5]); |
spm71 | 1:1b05289d0bf5 | 24 | char to_command(char input, int place); |
spm71 | 1:1b05289d0bf5 | 25 | |
spm71 | 0:ee6e5c60dd2d | 26 | int main(void) { |
spm71 | 0:ee6e5c60dd2d | 27 | SS = 1; |
spm71 | 0:ee6e5c60dd2d | 28 | |
spm71 | 0:ee6e5c60dd2d | 29 | spi.format(16,0); |
spm71 | 0:ee6e5c60dd2d | 30 | spi.frequency(1000000); |
spm71 | 0:ee6e5c60dd2d | 31 | |
spm71 | 0:ee6e5c60dd2d | 32 | SS = 0; |
spm71 | 0:ee6e5c60dd2d | 33 | spi.write(0x0C01); //normal operation |
spm71 | 0:ee6e5c60dd2d | 34 | SS = 1; |
spm71 | 0:ee6e5c60dd2d | 35 | |
spm71 | 0:ee6e5c60dd2d | 36 | SS = 0; |
spm71 | 0:ee6e5c60dd2d | 37 | spi.write(0x090F); //decode to bits 0:3 |
spm71 | 0:ee6e5c60dd2d | 38 | SS = 1; |
spm71 | 0:ee6e5c60dd2d | 39 | |
spm71 | 0:ee6e5c60dd2d | 40 | SS = 0; |
spm71 | 0:ee6e5c60dd2d | 41 | spi.write(0x0F00); //set to normal mode |
spm71 | 0:ee6e5c60dd2d | 42 | SS = 1; |
spm71 | 0:ee6e5c60dd2d | 43 | |
spm71 | 0:ee6e5c60dd2d | 44 | SS = 0; |
spm71 | 0:ee6e5c60dd2d | 45 | spi.write(0x0A0F); //intensity set to max |
spm71 | 0:ee6e5c60dd2d | 46 | SS = 1; |
spm71 | 0:ee6e5c60dd2d | 47 | |
spm71 | 0:ee6e5c60dd2d | 48 | SS = 0; |
spm71 | 0:ee6e5c60dd2d | 49 | spi.write(0x0B04); //display digits 0:4 |
spm71 | 0:ee6e5c60dd2d | 50 | SS = 1; |
spm71 | 0:ee6e5c60dd2d | 51 | |
spm71 | 0:ee6e5c60dd2d | 52 | SS = 0; |
spm71 | 0:ee6e5c60dd2d | 53 | spi.write(0x0100); //set digit 1 to 0 |
spm71 | 0:ee6e5c60dd2d | 54 | SS = 1; |
spm71 | 0:ee6e5c60dd2d | 55 | |
spm71 | 0:ee6e5c60dd2d | 56 | SS = 0; |
spm71 | 0:ee6e5c60dd2d | 57 | spi.write(0x0200); //set digit 2 to 0 |
spm71 | 0:ee6e5c60dd2d | 58 | SS = 1; |
spm71 | 0:ee6e5c60dd2d | 59 | |
spm71 | 0:ee6e5c60dd2d | 60 | SS = 0; |
spm71 | 0:ee6e5c60dd2d | 61 | spi.write(0x0300); //set digit 3 to 0 |
spm71 | 0:ee6e5c60dd2d | 62 | SS = 1; |
spm71 | 0:ee6e5c60dd2d | 63 | |
spm71 | 0:ee6e5c60dd2d | 64 | SS = 0; |
spm71 | 0:ee6e5c60dd2d | 65 | spi.write(0x0400); //set digit 4 to 0 |
spm71 | 0:ee6e5c60dd2d | 66 | SS = 1; |
spm71 | 0:ee6e5c60dd2d | 67 | |
spm71 | 0:ee6e5c60dd2d | 68 | SS = 0; |
spm71 | 0:ee6e5c60dd2d | 69 | spi.write(0x0500); //set digit 5 to 0 |
spm71 | 0:ee6e5c60dd2d | 70 | |
spm71 | 0:ee6e5c60dd2d | 71 | float command = 0x0100; |
spm71 | 1:1b05289d0bf5 | 72 | char input[5]; |
spm71 | 1:1b05289d0bf5 | 73 | //char command_text[10] = "0x0"; |
spm71 | 0:ee6e5c60dd2d | 74 | while(1) { |
spm71 | 0:ee6e5c60dd2d | 75 | pc.printf("Select a digit between 0 and 9999:\n"); |
spm71 | 1:1b05289d0bf5 | 76 | scanf("%5s", input); |
spm71 | 1:1b05289d0bf5 | 77 | while (num_range(input) == false) { //ask for input until 0-9999 is selected |
spm71 | 0:ee6e5c60dd2d | 78 | pc.printf("Select a digit between 0 and 9999:\n"); |
spm71 | 1:1b05289d0bf5 | 79 | scanf("%5s", input); |
spm71 | 0:ee6e5c60dd2d | 80 | } |
spm71 | 0:ee6e5c60dd2d | 81 | |
spm71 | 1:1b05289d0bf5 | 82 | /* |
spm71 | 0:ee6e5c60dd2d | 83 | command_text[3] = place + '0'; |
spm71 | 0:ee6e5c60dd2d | 84 | command_text[4] = '0'; |
spm71 | 0:ee6e5c60dd2d | 85 | command_text[5] = input; |
spm71 | 0:ee6e5c60dd2d | 86 | |
spm71 | 0:ee6e5c60dd2d | 87 | command = atof(command_text); //converts string to float |
spm71 | 1:1b05289d0bf5 | 88 | */ |
spm71 | 0:ee6e5c60dd2d | 89 | |
spm71 | 0:ee6e5c60dd2d | 90 | pc.printf("command: %s\n", command_text); |
spm71 | 0:ee6e5c60dd2d | 91 | |
spm71 | 0:ee6e5c60dd2d | 92 | |
spm71 | 0:ee6e5c60dd2d | 93 | SS = 0; |
spm71 | 1:1b05289d0bf5 | 94 | spi.write(command); // need to cycle 4 times |
spm71 | 0:ee6e5c60dd2d | 95 | SS = 1; |
spm71 | 0:ee6e5c60dd2d | 96 | //pc.printf("command: &f\n", commmand); |
spm71 | 0:ee6e5c60dd2d | 97 | } |
spm71 | 1:1b05289d0bf5 | 98 | |
spm71 | 0:ee6e5c60dd2d | 99 | /* |
spm71 | 0:ee6e5c60dd2d | 100 | SS = 0; |
spm71 | 0:ee6e5c60dd2d | 101 | spi.write(0x0100); //set digit 0 to 0 |
spm71 | 0:ee6e5c60dd2d | 102 | SS = 1; |
spm71 | 0:ee6e5c60dd2d | 103 | */ |
spm71 | 0:ee6e5c60dd2d | 104 | } |
spm71 | 1:1b05289d0bf5 | 105 | |
spm71 | 1:1b05289d0bf5 | 106 | bool num_range(char input[5]) { |
spm71 | 1:1b05289d0bf5 | 107 | bool result = true; |
spm71 | 1:1b05289d0bf5 | 108 | for (int i = 1; i < 6; i++) { |
spm71 | 1:1b05289d0bf5 | 109 | if (i > 4) |
spm71 | 1:1b05289d0bf5 | 110 | if (input[i] != 0) //checks for number larger than 9999 |
spm71 | 1:1b05289d0bf5 | 111 | result = false; |
spm71 | 1:1b05289d0bf5 | 112 | if (input[i] < 48 or input[i] > 57) //checks for digits outside 0-9 |
spm71 | 1:1b05289d0bf5 | 113 | result = false; |
spm71 | 1:1b05289d0bf5 | 114 | } |
spm71 | 1:1b05289d0bf5 | 115 | return result; |
spm71 | 1:1b05289d0bf5 | 116 | } |
spm71 | 1:1b05289d0bf5 | 117 | |
spm71 | 1:1b05289d0bf5 | 118 | char to_command(char input, int place) { |
spm71 | 1:1b05289d0bf5 | 119 | |
spm71 | 1:1b05289d0bf5 | 120 | } |
spm71 | 0:ee6e5c60dd2d | 121 |