Baron Marshall / TTU_CSC1300
Revision:
0:1201a9a37799
Child:
1:62c831ab7306
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TTU_CSC1300.h	Sun Jun 28 21:13:40 2020 +0000
@@ -0,0 +1,339 @@
+// macros, defines, globals,and prototypes for the TTU_F031 library
+
+#ifndef TTU_CSC1300_H
+#define TTU_CSC1300_H
+
+#include "mbed.h"
+
+/*************************************************************************
+ * 
+ * DEFINES and MACROS
+ * 
+ **************************************************************************/
+#define     FALSE           0
+#define     TRUE            (~FALSE)
+#define     BIT0            0x00000001
+#define     BIT1            0x00000002
+#define     BIT2            0x00000004
+#define     BIT3            0x00000008
+
+#define     SEG_A           0xFE
+#define     SEG_B           0xFD
+#define     SEG_C           0xFB
+#define     SEG_D           0xF7
+#define     SEG_E           0xEF
+#define     SEG_F           0xDF
+#define     SEG_G           0xBF
+#define     SEG_DP          0x7F
+
+#define PATTERN_BLANK       0xFF
+#define PATTERN_0           (SEG_A & SEG_B & SEG_C & SEG_D & SEG_E & SEG_F)
+#define PATTERN_1           (SEG_B & SEG_C)
+#define PATTERN_2           (SEG_A & SEG_B & SEG_D & SEG_E & SEG_G)
+#define PATTERN_3           (SEG_A & SEG_B & SEG_C & SEG_D & SEG_G)
+#define PATTERN_4           (SEG_B & SEG_C & SEG_F & SEG_G)
+#define PATTERN_5           (SEG_A & SEG_C & SEG_D & SEG_F & SEG_G)
+#define PATTERN_6           (SEG_A & SEG_C & SEG_D & SEG_E & SEG_F & SEG_G)
+#define PATTERN_7           (SEG_A & SEG_B & SEG_C)
+#define PATTERN_8           (SEG_A & SEG_B & SEG_C & SEG_D & SEG_E & SEG_F & SEG_G)
+#define PATTERN_9           (SEG_A & SEG_B & SEG_C & SEG_D & SEG_F & SEG_G)
+#define PATTERN_A           (SEG_A & SEG_B & SEG_C & SEG_E & SEG_F & SEG_G)
+#define PATTERN_B           (SEG_C & SEG_D & SEG_E & SEG_F & SEG_G)
+#define PATTERN_C           (SEG_A & SEG_D & SEG_E & SEG_F)
+#define PATTERN_D           (SEG_B & SEG_C & SEG_D & SEG_E & SEG_G)
+#define PATTERN_E           (SEG_A & SEG_D & SEG_E & SEG_F & SEG_G)
+#define PATTERN_F           (SEG_A & SEG_E & SEG_F & SEG_G)
+
+/*************************************************************************
+ * 
+ * HW to peripheral pin mappings
+ * 
+**************************************************************************/
+#define     SCL_PIN         PA_9
+#define     SDA_PIN         PA_10
+#define     LED0_PIN        PA_12
+#define     LED1_PIN        PB_0
+#define     LED3_PIN        PB_7
+#define     PWM1_PIN        PB_1
+#define     LED2_PIN        PF_0
+#define     CS_SD_PIN       PF_1
+#define     SPK_PIN         PA_8
+#define     CS_LCD_PIN      PA_11
+#define     MOSI_PIN        PB_5
+#define     MISO_PIN        PB_4
+#define     SCLK_PIN        PB_3
+#define     LGT_SENS_PIN    PA_0
+#define     POT_PIN         PA_1
+#define     TEMP_SENS_PIN   PA_3
+#define     PWM2_PIN        PA_4
+#define     SW4_PIN         PA_5
+#define     SW5_PIN         PA_6
+#define     CS_7SEG_PIN     PA_7
+#define     TX_PIN          PA_12
+#define     RX_PIN          PA_15          
+
+/*************************************************************************
+ * 
+ * Other useful defines
+ * 
+ **************************************************************************/
+#define     I2C_SPEED_STD       100000
+#define     I2C_SPEED_FAST      400000
+#define     I2C_SPEED_FASTPLUS  1000000
+
+#define     SPI_SPEED_100KBPS   100000
+#define     SPI_SPEED_500KBPS   500000
+#define     SPI_SPEED_1MBPS     1000000
+
+/*************************************************************************
+ *
+ * USEFUL MACROS
+ *
+ *************************************************************************/
+
+/*************************************************************************
+ *
+ * G L O B A L     V A R I A B L E S
+ *
+ *************************************************************************/
+extern SPI         spi;
+//extern I2C         i2c;
+extern Serial      pc;
+
+// create the LEDs
+extern DigitalOut      led0;
+extern DigitalOut      led1;
+extern DigitalOut      led2;
+/* only uncomment the following line if your Nucleo32 F031K6
+** has removed the solder jumper SB18 on the underside
+*/
+extern DigitalOut      led3;
+
+// create the speaker
+extern DigitalOut      speaker;
+
+//create the chip-selects
+extern DigitalOut      cs_sd;
+extern DigitalOut      cs_lcd;
+extern DigitalOut      cs_7seg;
+
+// create the switches
+extern DigitalIn       sw4;
+extern DigitalIn       sw5;
+
+// create the analog sensors
+extern AnalogIn        lightSensor;
+extern AnalogIn        pot;
+extern AnalogIn        tempSensor;
+ 
+/*************************************************************************
+ *
+ * P R O T O T Y P E S
+ *
+ *************************************************************************/
+void init_spi(int i_spiBaud);
+//void init_i2c(int i_i2cBaud);
+void init_serial(int i_serialBaud);
+void init_leds(void);
+void init_all(void);
+
+/* TEXTLCD
+ * 
+ * A TextLCD library targeted the F031K6 + Edubase-V2 combination
+ * implmements a 16x2 HD44780 LCD module using a 4-bit inteface
+ * connected via a 74HC595 using the chip's SPI
+ *
+ * This work is based upon the TextLCD mbed library by Simon Ford
+ * found at https://os.mbed.com/users/simon/code/TextLCD/
+ *
+ * Copyright (c) 2007-2010, sford, http://mbed.org
+ * Copyright (c) 2020, jwbruce   (jwbruce@tntech.edu)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+ 
+/**  A TextLCD interface for driving 4-bit HD44780-based LCDs
+ *
+ * Supports only the 16x2 display on the EduBase-V2 board
+ *
+ * @code
+ * #include "mbed.h"
+ * #include "TextLCD.h"
+ * 
+ * TextLCD lcd(TextLCD::LCD_CURSOR_ON_BLINKING_ON);     // select your cursor style
+ * 
+ * int main() {
+ *     lcd.printf("Hello World!\n");
+ * }
+ * @endcode
+ */
+class TextLCD : public Stream {
+public:
+
+    typedef enum {
+        LCD_CURSOR_OFF_BLINKING_OFF = 0,
+        LCD_CURSOR_OFF_BLINKING_ON = 0x01,        
+        LCD_CURSOR_ON_BLINKING_OFF = 0x02,
+        LCD_CURSOR_ON_BLINKING_ON = 0x03,
+        LCD_CURSOR_DEFAULT = 0x03
+    } LCDCursor;
+  
+    /** Declare a TextLCD interface */
+    TextLCD(LCDCursor cur);      // default constructor
+ 
+#if DOXYGEN_ONLY
+    /** Write a character to the LCD
+     *
+     * @param c The character to write to the display
+     */
+    int putc(int c);
+ 
+    /** Write a formated string to the LCD
+     *
+     * @param format A printf-style format string, followed by the
+     *               variables to use in formating the string.
+     */
+    int printf(const char* format, ...);
+#endif
+ 
+    /** Locate to a screen column and row
+     *
+     * @param column  The horizontal position from the left, indexed from 0
+     * @param row     The vertical position from the top, indexed from 0
+     */
+    void setLocation(int column, int row);
+ 
+    /** Clear the screen and locate to 0,0 */
+    void cls();
+ 
+    /** low-level single character putter **/
+    void setCharacter(int row, int column, int c);
+    void setCursor(LCDCursor c);
+ 
+protected:
+ 
+    // Stream implementation functions
+    virtual int _putc(int value);
+    virtual int _getc();
+ 
+    int address(int column, int row);
+    void writeNibble(char incoming, unsigned char rs);
+    void writeCommand(int command);
+    void writeData(int data);
+ 
+    int _column;
+    int _row;
+    int _maxColumns;
+    int _maxRows;
+    int _cursorState;
+    
+};
+ 
+ 
+/* F031K6 + Edubase-V2 7-segment LED Library
+ * for the 4 seven-segment LEDs inteface connected via two 74HC595s using SPI
+ *
+ * Copyright (c) 2020, jwbruce   (jwbruce@tntech.edu)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+ 
+/**  A 7-segment LED interface for driving 4 connected seven-segment LEDs
+ *
+ * @code
+ * #include "mbed.h"
+ * #include "TextLCD.h"
+ * 
+ * TextLCD lcd(p10, p12, p15, p16, p29, p30); // rs, e, d4-d7
+ * 
+ * int main() {
+ *     lcd.printf("Hello World!\n");
+ * }
+ * @endcode
+ */
+class SSLED {
+public:
+
+    typedef enum {
+        LED_PATTERN_0 = ~0x3F,
+        LED_PATTERN_1 = ~0x06,
+        LED_PATTERN_2 = ~0x5B,
+        LED_PATTERN_3 = ~0x4F,
+        LED_PATTERN_4 = ~0x66,
+        LED_PATTERN_5 = ~0x6D,
+        LED_PATTERN_6 = ~0x7D,
+        LED_PATTERN_7 = ~0x07,
+        LED_PATTERN_8 = ~0x7F,
+        LED_PATTERN_9 = ~0x6F,
+        LED_PATTERN_A = ~0x77,
+        LED_PATTERN_B = ~0x7C,
+        LED_PATTERN_C = ~0x39,
+        LED_PATTERN_D = ~0x5E,
+        LED_PATTERN_E = ~0x79,
+        LED_PATTERN_F = ~0x71,
+        LED_PATTERN_G = ~0x40,        
+        LED_PATTERN_H = ~0x76,
+        LED_PATTERN_I = ~0x30,
+        LED_PATTERN_J = ~0x1E,
+        LED_PATTERN_L = ~0x38,
+        LED_PATTERN_N = ~0x54,      
+        LED_PATTERN_O = ~0x3F,
+        LED_PATTERN_P = ~0x73,        
+        LED_PATTERN_Q = ~0x67,        
+        LED_PATTERN_R = ~0x50,        
+        LED_PATTERN_S = LED_PATTERN_5,        
+        LED_PATTERN_T = ~0x78,
+        LED_PATTERN_U = ~0x1C,        
+        LED_PATTERN_V = ~0x2A,
+        LED_PATTERN_Y = ~0x6E,        
+        LED_PATTERN_BLANK = ~0x00,
+        LED_PATTERN_SPACE = LED_PATTERN_BLANK,
+        LED_PATTERN_DASH = ~0x40,         
+        LED_PATTERN_DEGREES = ~0xC3, 
+        LED_PATTERN_DECIMALPT = ~0x80,
+        LED_PATTERN_QUESTION = ~0x53
+    } LEDPattern;
+  
+    /** Declare a 7-segment LED interface */
+    // constructor
+    SSLED(int display, int pattern);      
+ 
+    /** Write a pattern to a chosen display */
+    void setDisplay(int display, int pattern); // change patterns to blank and write the displays
+};
+ 
+ 
+
+#endif
\ No newline at end of file