diff --git a/card10/src/leds.rs b/card10/src/leds.rs
new file mode 100644
index 0000000000000000000000000000000000000000..053bdd663eb09ac5a0c4315a83768a5a377761ce
--- /dev/null
+++ b/card10/src/leds.rs
@@ -0,0 +1,30 @@
+#[link(name = "card10")]
+extern {
+    fn leds_init();
+    fn leds_update();
+    fn leds_set_dim(led: u8,dim: u8);
+    fn leds_set(led: u8,r: u8,g: u8,b: u8);
+    fn leds_set_hsv(led: u8, h: f32, s: f32, v: f32);
+}
+
+pub const LEDS: u8 = 15;
+
+pub fn init() {
+    unsafe { leds_init(); }
+}
+
+pub fn update() {
+    unsafe { leds_update(); }
+}
+
+pub fn set_dim(led: u8,dim: u8) {
+    unsafe { leds_set_dim(led, dim); }
+}
+
+pub fn set(led: u8,r: u8,g: u8,b: u8) {
+    unsafe { leds_set(led, r, g, b); }
+}
+
+pub fn set_hsv(led: u8, h: f32, s: f32, v: f32) {
+    unsafe { leds_set_hsv(led, h, s, v); }
+}
diff --git a/card10/src/lib.rs b/card10/src/lib.rs
index e738d46683899f8ad939bec91fb4ac0b83204c96..163ce14dc0a12ef10300559b4b625e5359f07ad2 100644
--- a/card10/src/lib.rs
+++ b/card10/src/lib.rs
@@ -5,6 +5,7 @@ pub use cortex_m_rt as _;
 pub use cortex_m_rt::entry;
 
 pub mod lcd;
+pub mod leds;
 
 #[link(name = "card10")]
 extern {
diff --git a/watchapp/src/main.rs b/watchapp/src/main.rs
index 478bd4c7ee7b1f864f7e67d51c9d114138662494..7d8a6458a049717f4294cc4243d14a9e6289367c 100644
--- a/watchapp/src/main.rs
+++ b/watchapp/src/main.rs
@@ -2,12 +2,13 @@
 #![no_main]
 
 use panic_abort as _;
-use card10::{entry, lcd};
+use card10::{entry, lcd, leds};
 
 
 #[entry]
 fn main() -> ! {
     card10::init();
+    leds::init();
 
     lcd::set_backlight(1000);
     let mut t = 0;
@@ -23,6 +24,11 @@ fn main() -> ! {
         }
         lcd::update();
 
+        for led in 0..leds::LEDS {
+            leds::set(led, ((t << 2) & 0xFF) as u8, ((t << 1) & 0xFF) as u8, ((t >> 2) & 0xFF) as u8);
+        }
+        leds::update();
+
         t += 1;
     }
 }