summaryrefslogtreecommitdiff
path: root/frontends/calculator/CEdev/examples/stopwatch/src
diff options
context:
space:
mode:
Diffstat (limited to 'frontends/calculator/CEdev/examples/stopwatch/src')
-rw-r--r--frontends/calculator/CEdev/examples/stopwatch/src/main.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/frontends/calculator/CEdev/examples/stopwatch/src/main.c b/frontends/calculator/CEdev/examples/stopwatch/src/main.c
new file mode 100644
index 0000000..3ec82b1
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/stopwatch/src/main.c
@@ -0,0 +1,60 @@
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Print a stopwatch value on the home screen */
+void print(float elapsed) {
+ /* Float format for printf may be unimplemented, so go through an OS real */
+ real_t elapsed_real;
+
+ /* Max stopwatch value is (2^32 - 1) / 32768 = 131072.00, */
+ /* so create a buffer with room for 9 characters plus a null terminator */
+ char str[10];
+
+ /* If the elapsed time is small enough that the OS would print it using */
+ /* scientific notation, force it down to zero before conversion */
+ elapsed_real = os_FloatToReal(elapsed <= 0.001f ? 0.0f : elapsed);
+
+ /* Convert the elapsed time real to a string */
+ os_RealToStr(str, &elapsed_real, 8, 1, 2);
+
+ /* Print the string */
+ os_SetCursorPos(0, 0);
+ os_PutStrFull(str);
+}
+
+/* Put all your code here */
+void main(void) {
+ /* Clear the homescreen */
+ os_ClrHome();
+
+ /* Display an initial time of zero */
+ print(0.0f);
+
+ /* Disable the timer */
+ timer_Control = TIMER1_DISABLE;
+
+ /* Reset the timer's counter */
+ timer_1_Counter = 0;
+
+ /* Wait for a key press */
+ while (!os_GetCSC());
+
+ /* Enable the timer while setting it to 32768 KHz and making it count up */
+ timer_Control = TIMER1_ENABLE | TIMER1_32K | TIMER1_UP;
+
+ /* Continue running until a key is pressed */
+ do {
+ /* Calculate and print the elapsed time */
+ float elapsed = (float)atomic_load_increasing_32(&timer_1_Counter) / 32768;
+ print(elapsed);
+ } while (!os_GetCSC());
+
+ /* Wait for a key press */
+ while (!os_GetCSC());
+}