diff --git a/examples/accellog.py b/examples/accellog.py
new file mode 100644
index 0000000000000000000000000000000000000000..81f44f19a8fe1616f6d696aa2fe38e7a178156e3
--- /dev/null
+++ b/examples/accellog.py
@@ -0,0 +1,14 @@
+# log the accelerometer values to a file, 1 per second
+
+f = open('motion.dat', 'w')                 # open the file for writing
+
+for i in range(60):                         # loop 60 times
+    time = pyb.time()                       # get the current time
+    accel = pyb.accel()                     # get the accelerometer data
+
+    # write time and x,y,z values to the file
+    f.write('{} {} {} {}\n'.format(time, accel[0], accel[1], accel[2]))
+
+    pyb.delay(1000)                         # wait 1000 ms = 1 second
+
+f.close()                                   # close the file
diff --git a/examples/conwaylife.py b/examples/conwaylife.py
new file mode 100644
index 0000000000000000000000000000000000000000..fb62ce69e88bc84b1b2196b9d8a15ed6996569c0
--- /dev/null
+++ b/examples/conwaylife.py
@@ -0,0 +1,43 @@
+# do 1 iteration of Conway's Game of Life
+def conway_step():
+    for x in range(128):        # loop over x coordinates
+        for y in range(32):     # loop over y coordinates
+            # count number of neigbours
+            num_neighbours = (lcd.get(x - 1, y - 1) +
+                lcd.get(x, y - 1) +
+                lcd.get(x + 1, y - 1) +
+                lcd.get(x - 1, y) +
+                lcd.get(x + 1, y) +
+                lcd.get(x + 1, y + 1) +
+                lcd.get(x, y + 1) +
+                lcd.get(x - 1, y + 1))
+
+            # check if the centre cell is alive or not
+            self = lcd.get(x, y)
+
+            # apply the rules of life
+            if self and not (2 <= num_neighbours <= 3):
+                lcd.reset(x, y) # not enough, or too many neighbours: cell dies
+            elif not self and num_neighbours == 3:
+                lcd.set(x, y)   # exactly 3 neigbours around an empty cell: cell is born
+
+# randomise the start
+def conway_rand():
+    lcd.clear()                 # clear the LCD
+    for x in range(128):        # loop over x coordinates
+        for y in range(32):     # loop over y coordinates
+            if pyb.rand() & 1:  # get a 1-bit random number
+                lcd.set(x, y)   # set the pixel randomly
+
+# loop for a certain number of frames, doing iterations of Conway's Game of Life
+def conway_go(num_frames):
+    for i in range(num_frames):
+        conway_step()           # do 1 iteration
+        lcd.show()              # update the LCD
+
+# PC testing
+import lcd
+import pyb
+lcd = lcd.LCD(128, 32)
+conway_rand()
+conway_go(100)
diff --git a/examples/lcd.py b/examples/lcd.py
new file mode 100644
index 0000000000000000000000000000000000000000..3303337bfb0e1ddb14719bf2b0c98d369ea07b17
--- /dev/null
+++ b/examples/lcd.py
@@ -0,0 +1,36 @@
+# LCD testing object for PC
+# uses double buffering
+class LCD:
+    def __init__(self, width, height):
+        self.width = width
+        self.height = height
+        self.buf1 = [[0 for x in range(self.width)] for y in range(self.height)]
+        self.buf2 = [[0 for x in range(self.width)] for y in range(self.height)]
+
+    def clear(self):
+        for y in range(self.height):
+            for x in range(self.width):
+                self.buf1[y][x] = self.buf2[y][x] = 0
+
+    def show(self):
+        print('') # blank line to separate frames
+        for y in range(self.height):
+            for x in range(self.width):
+                self.buf1[y][x] = self.buf2[y][x]
+        for y in range(self.height):
+            row = ''.join(['*' if self.buf1[y][x] else ' ' for x in range(self.width)])
+            print(row)
+
+    def get(self, x, y):
+        if 0 <= x < self.width and 0 <= y < self.height:
+            return self.buf1[y][x]
+        else:
+            return 0
+
+    def reset(self, x, y):
+        if 0 <= x < self.width and 0 <= y < self.height:
+            self.buf2[y][x] = 0
+
+    def set(self, x, y):
+        if 0 <= x < self.width and 0 <= y < self.height:
+            self.buf2[y][x] = 1
diff --git a/examples/ledangle.py b/examples/ledangle.py
new file mode 100644
index 0000000000000000000000000000000000000000..35c9148a4935366144c0fdfbbb9f3420ffcded20
--- /dev/null
+++ b/examples/ledangle.py
@@ -0,0 +1,22 @@
+def led_angle(seconds_to_run_for):
+    # make LED objects
+    l1 = pyb.Led(1)
+    l2 = pyb.Led(2)
+
+    for i in range(20 * seconds_to_run_for):
+        # get x-axis
+        accel = pyb.accel()[0]
+
+        # turn on LEDs depending on angle
+        if accel < -10:
+            l1.on()
+            l2.off()
+        elif accel > 10:
+            l1.off()
+            l2.on()
+        else:
+            l1.off()
+            l2.off()
+
+        # delay so that loop runs at at 1/50ms = 20Hz
+        pyb.delay(50)
diff --git a/examples/mandel.py b/examples/mandel.py
index b13b7d87f8e3cdfae05623a12a1476a1c2a958a6..996132a9154dbb7fe3e4cdde49bce559c178ad7a 100644
--- a/examples/mandel.py
+++ b/examples/mandel.py
@@ -1,14 +1,22 @@
-@micropython.native
-def in_set(c):
-    z = 0
-    for i in range(40):
-        z = z*z + c
-        if abs(z) > 60:
-            return False
-    return True
+def mandelbrot():
+    # returns True if c, complex, is in the Mandelbrot set
+    @micropython.native
+    def in_set(c):
+        z = 0
+        for i in range(40):
+            z = z*z + c
+            if abs(z) > 60:
+                return False
+        return True
 
-for v in range(31):
-    line = []
+    lcd.clear()
     for u in range(91):
-        line.append('*' if in_set((u / 30 - 2) + (v / 15 - 1) * 1j) else ' ')
-    print(''.join(line))
+        for v in range(31):
+            if in_set((u / 30 - 2) + (v / 15 - 1) * 1j):
+                lcd.set(u, v)
+    lcd.show()
+
+# PC testing
+import lcd
+lcd = lcd.LCD(128, 32)
+mandelbrot()
diff --git a/examples/pyb.py b/examples/pyb.py
new file mode 100644
index 0000000000000000000000000000000000000000..5e24f40e4ae0aaee5d1b57f0ee9cf678e9af712c
--- /dev/null
+++ b/examples/pyb.py
@@ -0,0 +1,11 @@
+# pyboard testing functions for PC
+
+def delay(n):
+    pass
+
+rand_seed = 1
+def rand():
+    global rand_seed
+    # for these choice of numbers, see P L'Ecuyer, "Tables of linear congruential generators of different sizes and good lattice structure"
+    rand_seed = (rand_seed * 653276) % 8388593
+    return rand_seed