--- a/led7seg.inc Sat May 08 20:58:32 2010 +0300
+++ b/led7seg.inc Sat May 08 20:59:22 2010 +0300
@@ -87,7 +87,54 @@
; Done
ret
-
+
+;; Display an 8-bit hexadecimal value on the display
+;; Input: r16
+LED7_ShowHex:
+ ; base16
+ ldi r17, 16
+
+ ; 1's
+ call div8u
+
+ ; r16 = result, r15 = remainder
+ mov r17, r15
+
+ ; Continue
+ rjmp LED7_Show
+
+;; Display an 8-bit decimal value on the display
+;; Input: r16
+LED7_ShowDec:
+ ; base10
+ ldi r17, 10
+
+ ; 1's
+ call div8u
+ mov r8, r15
+
+ ; 10's
+ call div8u
+ mov r9, r16 ; 100's
+
+ ; 1's from r8
+ rcall LED7_LoadChar
+ mov r17, r8
+
+ ; 10's from r15
+ mov r8, r15
+ rcall LED7_LoadChar
+ mov r16, r8
+
+ ; Set dots for 100's
+ sbrc r9, 0
+ ori r17, 0b10000000 ; +100
+ sbrc r9, 1
+ ori r16, 0b10000000 ; +200
+
+ ; Continue
+ rjmp LED7_ShowRaw
+
;; Display a single digit on the display
;; Input: r16, r17
LED7_Show:
@@ -95,9 +142,9 @@
rcall LED7_LoadChar
mov r16, r8
- mov r8, r16
+ mov r8, r17
rcall LED7_LoadChar
- mov r16, r8
+ mov r17, r8
;; Continue