Labmbed device drivers

Dependencies:   TextLCD mbed

Revision:
0:416329806e55
Child:
1:04e1ee8faa04
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Jan 11 11:19:03 2017 +0000
@@ -0,0 +1,105 @@
+// Demo Program for Labmbed Board
+
+#include "mbed.h"
+#include "TextLCD.h"
+
+TextLCD lcd(p15, p16, p17, p18, p19, p20); // LCD: RS, E, D4-D7
+SPI spi(p5, p6, p7);                       // SPI: MOSI, MISO, SCLK (MISO not used with LCD)
+DigitalOut lat(p8);
+I2C i2c(p9, p10);                          // I2C: SDA, SCL
+
+int led_bits = 0;                          // global LED status used for readback
+const int tmp102addr = 0x92;               // TMP102 temperature I2C address
+
+
+void initleds() {
+    lat = 0;                               // latch must start low
+    spi.format(16,0);                      // SPI 16 bit data, low state, high going clock
+    spi.frequency(1000000);                // 1MHz clock rate
+}
+
+void setleds(int ledall) {
+    led_bits = ledall;
+    spi.write((led_bits & 0x03ff) | ((led_bits & 0xa800) >> 1) | ((led_bits & 0x5400) << 1));
+    lat = 1;                               // latch pulse start 
+    lat = 0;                               // latch pulse end
+}
+
+void setled(int ledno, int ledstate) {
+    ledno = ((ledno - 1) & 0x0007) + 1;    // limit led number
+    ledno = (8 - ledno) * 2;               // offset of led state in 'led_bits'
+    ledstate = ledstate & 0x0003;          // limit led state
+    ledstate = ledstate << ledno;
+    int statemask = 0x0003;
+    statemask = ((statemask << ledno) ^ 0xffff);
+    led_bits = ((led_bits & statemask) | ledstate);
+    setleds(led_bits);
+}
+
+int readled(int ledno) {
+    ledno = ((ledno - 1) & 0x0007) + 1;    // limit led number
+    ledno = (8 - ledno) * 2;               // offset of led state in 'led_bits'
+    int ledstate = led_bits;
+    ledstate = ledstate >> ledno;
+    return (ledstate & 0x0003);    
+}
+
+int readleds() {
+    return led_bits;
+}
+
+//int readswitch(int switchno) {
+//}
+
+//int readswitches(int switchno) {
+//}
+
+//int readkey(int keyno) {
+//}
+
+//int readkeyrow(int keyrow) {
+//}
+
+//int readkeys() {
+//}
+
+float readtemp() {
+    char cmd[2];
+    cmd[0] = 0x01;
+    cmd[1] = 0x00;
+    i2c.write(tmp102addr, cmd, 2);
+    wait(0.5);
+    cmd[0] = 0x00;
+    i2c.write(tmp102addr, cmd, 1);
+    i2c.read(tmp102addr, cmd, 2);
+    return (float((cmd[0]<<8)|cmd[1]) / 256.0);    
+}
+
+int main() {
+    
+    initleds();
+  
+    while(1) {
+
+    setled (5,2);
+    setled (6,1);
+    setled (7,3);
+    
+    int led = readled(6);
+    lcd.printf("                \n");
+    lcd.printf("LED6 = %d\n", led);
+    wait(3);
+    
+    setleds(0x5555);
+    led = readleds();
+    lcd.printf("                \n");
+    lcd.printf("LEDs = %d\n", led);
+    wait(3);
+    
+    float temp = readtemp();
+    lcd.printf("                \n");   
+    lcd.printf("Temp = %f\n", temp);
+    wait(3);
+    
+    }
+}