*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
*
*/
+#ifndef SEVEN_SEGMENT_DEBUG
+#define SEVEN_SEGMENT_DEBUG 0
+#endif
+
static const uint8_t ao_segments[] = {
- (1 << AO_SEGMENT_0) |
- (1 << AO_SEGMENT_1) |
- (1 << AO_SEGMENT_2) |
- (0 << AO_SEGMENT_3) |
- (1 << AO_SEGMENT_4) |
- (1 << AO_SEGMENT_5) |
- (1 << AO_SEGMENT_6), /* 0 */
-
- (0 << AO_SEGMENT_0) |
- (0 << AO_SEGMENT_1) |
- (1 << AO_SEGMENT_2) |
- (0 << AO_SEGMENT_3) |
- (0 << AO_SEGMENT_4) |
- (1 << AO_SEGMENT_5) |
- (0 << AO_SEGMENT_6), /* 1 */
-
- (1 << AO_SEGMENT_0) |
- (0 << AO_SEGMENT_1) |
- (1 << AO_SEGMENT_2) |
- (1 << AO_SEGMENT_3) |
- (1 << AO_SEGMENT_4) |
- (0 << AO_SEGMENT_5) |
- (1 << AO_SEGMENT_6), /* 2 */
-
- (1 << AO_SEGMENT_0) |
- (0 << AO_SEGMENT_1) |
- (1 << AO_SEGMENT_2) |
- (1 << AO_SEGMENT_3) |
- (0 << AO_SEGMENT_4) |
- (1 << AO_SEGMENT_5) |
- (1 << AO_SEGMENT_6), /* 3 */
-
- (0 << AO_SEGMENT_0) |
- (1 << AO_SEGMENT_1) |
- (1 << AO_SEGMENT_2) |
- (1 << AO_SEGMENT_3) |
- (0 << AO_SEGMENT_4) |
- (1 << AO_SEGMENT_5) |
- (0 << AO_SEGMENT_6), /* 4 */
-
- (1 << AO_SEGMENT_0) |
- (1 << AO_SEGMENT_1) |
- (0 << AO_SEGMENT_2) |
- (1 << AO_SEGMENT_3) |
- (0 << AO_SEGMENT_4) |
- (1 << AO_SEGMENT_5) |
- (1 << AO_SEGMENT_6), /* 5 */
-
- (1 << AO_SEGMENT_0) |
- (1 << AO_SEGMENT_1) |
- (0 << AO_SEGMENT_2) |
- (1 << AO_SEGMENT_3) |
- (1 << AO_SEGMENT_4) |
- (1 << AO_SEGMENT_5) |
- (1 << AO_SEGMENT_6), /* 6 */
-
- (1 << AO_SEGMENT_0) |
- (0 << AO_SEGMENT_1) |
- (1 << AO_SEGMENT_2) |
- (0 << AO_SEGMENT_3) |
- (0 << AO_SEGMENT_4) |
- (1 << AO_SEGMENT_5) |
- (0 << AO_SEGMENT_6), /* 7 */
-
- (1 << AO_SEGMENT_0) |
- (1 << AO_SEGMENT_1) |
- (1 << AO_SEGMENT_2) |
- (1 << AO_SEGMENT_3) |
- (1 << AO_SEGMENT_4) |
- (1 << AO_SEGMENT_5) |
- (1 << AO_SEGMENT_6), /* 8 */
-
- (1 << AO_SEGMENT_0) |
- (1 << AO_SEGMENT_1) |
- (1 << AO_SEGMENT_2) |
- (1 << AO_SEGMENT_3) |
- (0 << AO_SEGMENT_4) |
- (1 << AO_SEGMENT_5) |
- (1 << AO_SEGMENT_6), /* 9 */
-
- (1 << AO_SEGMENT_0) |
- (1 << AO_SEGMENT_1) |
- (1 << AO_SEGMENT_2) |
- (1 << AO_SEGMENT_3) |
- (1 << AO_SEGMENT_4) |
- (1 << AO_SEGMENT_5) |
- (0 << AO_SEGMENT_6), /* A */
-
- (0 << AO_SEGMENT_0) |
- (1 << AO_SEGMENT_1) |
- (0 << AO_SEGMENT_2) |
- (1 << AO_SEGMENT_3) |
- (1 << AO_SEGMENT_4) |
- (1 << AO_SEGMENT_5) |
- (1 << AO_SEGMENT_6), /* b */
-
- (1 << AO_SEGMENT_0) |
- (1 << AO_SEGMENT_1) |
- (0 << AO_SEGMENT_2) |
- (0 << AO_SEGMENT_3) |
- (1 << AO_SEGMENT_4) |
- (0 << AO_SEGMENT_5) |
- (1 << AO_SEGMENT_6), /* c */
-
- (0 << AO_SEGMENT_0) |
- (0 << AO_SEGMENT_1) |
- (1 << AO_SEGMENT_2) |
- (1 << AO_SEGMENT_3) |
- (1 << AO_SEGMENT_4) |
- (1 << AO_SEGMENT_5) |
- (1 << AO_SEGMENT_6), /* d */
-
- (1 << AO_SEGMENT_0) |
- (1 << AO_SEGMENT_1) |
- (0 << AO_SEGMENT_2) |
- (1 << AO_SEGMENT_3) |
- (1 << AO_SEGMENT_4) |
- (0 << AO_SEGMENT_5) |
- (1 << AO_SEGMENT_6), /* E */
-
- (1 << AO_SEGMENT_0) |
- (1 << AO_SEGMENT_1) |
- (0 << AO_SEGMENT_2) |
- (1 << AO_SEGMENT_3) |
- (1 << AO_SEGMENT_4) |
- (0 << AO_SEGMENT_5) |
- (0 << AO_SEGMENT_6), /* F */
+ (1 << 0) |
+ (1 << 1) |
+ (1 << 2) |
+ (0 << 3) |
+ (1 << 4) |
+ (1 << 5) |
+ (1 << 6), /* 0 */
+
+ (0 << 0) |
+ (0 << 1) |
+ (1 << 2) |
+ (0 << 3) |
+ (0 << 4) |
+ (1 << 5) |
+ (0 << 6), /* 1 */
+
+ (1 << 0) |
+ (0 << 1) |
+ (1 << 2) |
+ (1 << 3) |
+ (1 << 4) |
+ (0 << 5) |
+ (1 << 6), /* 2 */
+
+ (1 << 0) |
+ (0 << 1) |
+ (1 << 2) |
+ (1 << 3) |
+ (0 << 4) |
+ (1 << 5) |
+ (1 << 6), /* 3 */
+
+ (0 << 0) |
+ (1 << 1) |
+ (1 << 2) |
+ (1 << 3) |
+ (0 << 4) |
+ (1 << 5) |
+ (0 << 6), /* 4 */
+
+ (1 << 0) |
+ (1 << 1) |
+ (0 << 2) |
+ (1 << 3) |
+ (0 << 4) |
+ (1 << 5) |
+ (1 << 6), /* 5 */
+
+ (1 << 0) |
+ (1 << 1) |
+ (0 << 2) |
+ (1 << 3) |
+ (1 << 4) |
+ (1 << 5) |
+ (1 << 6), /* 6 */
+
+ (1 << 0) |
+ (0 << 1) |
+ (1 << 2) |
+ (0 << 3) |
+ (0 << 4) |
+ (1 << 5) |
+ (0 << 6), /* 7 */
+
+ (1 << 0) |
+ (1 << 1) |
+ (1 << 2) |
+ (1 << 3) |
+ (1 << 4) |
+ (1 << 5) |
+ (1 << 6), /* 8 */
+
+ (1 << 0) |
+ (1 << 1) |
+ (1 << 2) |
+ (1 << 3) |
+ (0 << 4) |
+ (1 << 5) |
+ (1 << 6), /* 9 */
+
+ (1 << 0) |
+ (1 << 1) |
+ (1 << 2) |
+ (1 << 3) |
+ (1 << 4) |
+ (1 << 5) |
+ (0 << 6), /* A */
+
+ (0 << 0) |
+ (1 << 1) |
+ (0 << 2) |
+ (1 << 3) |
+ (1 << 4) |
+ (1 << 5) |
+ (1 << 6), /* b */
+
+ (1 << 0) |
+ (1 << 1) |
+ (0 << 2) |
+ (0 << 3) |
+ (1 << 4) |
+ (0 << 5) |
+ (1 << 6), /* c */
+
+ (0 << 0) |
+ (0 << 1) |
+ (1 << 2) |
+ (1 << 3) |
+ (1 << 4) |
+ (1 << 5) |
+ (1 << 6), /* d */
+
+ (1 << 0) |
+ (1 << 1) |
+ (0 << 2) |
+ (1 << 3) |
+ (1 << 4) |
+ (0 << 5) |
+ (1 << 6), /* E */
+
+ (1 << 0) |
+ (1 << 1) |
+ (0 << 2) |
+ (1 << 3) |
+ (1 << 4) |
+ (0 << 5) |
+ (0 << 6), /* F */
};
+
void
-ao_seven_segment_set(uint8_t digit, uint8_t value)
+ao_seven_segment_direct(uint8_t digit, uint8_t segments)
{
uint8_t s;
+
+ for (s = 0; s <= 7; s++)
+ ao_lcd_set(digit, s, !!(segments & (1 << s)));
+ ao_lcd_flush();
+}
+
+void
+ao_seven_segment_set(uint8_t digit, uint8_t value)
+{
uint8_t segments;
if (value == AO_SEVEN_SEGMENT_CLEAR)
/* Check for decimal point */
if (value & 0x10)
- segments |= (1 << AO_SEGMENT_7);
+ segments |= (1 << 7);
}
-
- for (s = 0; s <= 7; s++)
- ao_lcd_set(digit, s, !!(segments & (1 << s)));
- ao_lcd_flush();
+ ao_seven_segment_direct(digit, segments);
}
void
}
-#if 0
+#if SEVEN_SEGMENT_DEBUG
static void
ao_seven_segment_show(void)
{
void
ao_seven_segment_init(void)
{
-#if 0
+#if SEVEN_SEGMENT_DEBUG
ao_cmd_register(ao_seven_segment_cmds);
#endif
}