7セグLEDっぽい何か。
そんな感じのモジュールを書いてみたり。
よくよく見直すと頂けない箇所が結構。
便所の落書きということで。
devkitPro1.5.0用です(ということにしておきます。)。
main.c
/*--------------------------------------------------------------------------------- NumLED module test version 0.01 Oct 02, 2009 (C)2009 REGEKATSU ---------------------------------------------------------------------------------*/ #include <nds.h> #include <stdio.h> #include "NumLED.h" //--------------------------------------------------------------------------------- int main(void) { //--------------------------------------------------------------------------------- char num_led = 0x00; consoleDemoInit(); NumLED_ClearNumLED(); while(1) { swiWaitForVBlank(); NumLED_ShowNumLED(num_led); printf("\x1b[4;6H0x%02X", num_led); scanKeys(); if(keysDown() & KEY_UP){ if(num_led < 0x0F){ num_led++; }else{ num_led = 0x00; } }else if(keysDown() & KEY_DOWN){ if(num_led > 0x00){ num_led--; }else{ num_led = 0x0F; } }else if(keysDown() & KEY_START){ num_led = 0x10; } } } //---------------------------------------------------------------------------------
NumLED.h
/*--------------------------------------------------------------------------------- NumLED module header version 0.01 Oct 02, 2009 (C)2009 REGEKATSU ---------------------------------------------------------------------------------*/ #ifndef _NUM_LED_H_ #define _NUM_LED_H_ #include <nds.h> #include <stdio.h> #ifdef __cplusplus extern "C" { #endif void NumLED_ShowNumLED(char num_led); void NumLED_HideNumLED(void); void NumLED_ClearNumLED(void); #ifdef __cplusplus } #endif #endif //_NUM_LED_H_
NumLED.c
/*--------------------------------------------------------------------------------- NumLED module routine version 0.01 Oct 02, 2009 (C)2009 REGEKATSU ---------------------------------------------------------------------------------*/ #include "NumLED.h" #define NUM_LED_POSX 0 #define NUM_LED_POSY 0 //|SEG|Dp|g |f |e |d |c |b |a | //|bit|07|06|05|04|03|02|01|00| typedef enum{ SEG_A = 0x01, SEG_B = 0x02, SEG_C = 0x04, SEG_D = 0x08, SEG_E = 0x10, SEG_F = 0x20, SEG_G = 0x40, SEG_DP = 0x80 }SEG_LED; const static char st_seg_pattern[] = { //7 Seg LED hexa number pattern 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x67, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x00 }; static char st_seg_led = 0x00; #define IS_SEG_LED(x) ((x) ? true:false) char numLED_GetSegLED(void); void numLED_SetSegLED(char num_led); void numLED_DrawSegLED(char seg_led); //--------------------------------------------------------------------------------- char numLED_GetSegLED(void){ //--------------------------------------------------------------------------------- return st_seg_led; } //--------------------------------------------------------------------------------- void numLED_SetSegLED(char num_led){ //--------------------------------------------------------------------------------- //ToDo 配列外の値を送り込まれた時の対処を講じること。 st_seg_led = st_seg_pattern[(unsigned char)num_led]; } //--------------------------------------------------------------------------------- void numLED_DrawSegLED(char seg_led){ //--------------------------------------------------------------------------------- printf("\x1b[%d;%dH%d", NUM_LED_POSY, NUM_LED_POSX + 1, IS_SEG_LED(seg_led & SEG_A)); printf("\x1b[%d;%dH%d", NUM_LED_POSY + 1, NUM_LED_POSX, IS_SEG_LED(seg_led & SEG_F)); printf("\x1b[%d;%dH%d", NUM_LED_POSY + 1, NUM_LED_POSX + 2, IS_SEG_LED(seg_led & SEG_B)); printf("\x1b[%d;%dH%d", NUM_LED_POSY + 2, NUM_LED_POSX + 1, IS_SEG_LED(seg_led & SEG_G)); printf("\x1b[%d;%dH%d", NUM_LED_POSY + 3, NUM_LED_POSX, IS_SEG_LED(seg_led & SEG_E)); printf("\x1b[%d;%dH%d", NUM_LED_POSY + 3, NUM_LED_POSX + 2, IS_SEG_LED(seg_led & SEG_C)); printf("\x1b[%d;%dH%d", NUM_LED_POSY + 4, NUM_LED_POSX + 1, IS_SEG_LED(seg_led & SEG_D)); printf("\x1b[%d;%dH%d", NUM_LED_POSY + 4, NUM_LED_POSX + 3, IS_SEG_LED(seg_led & SEG_DP)); } //--------------------------------------------------------------------------------- void NumLED_ShowNumLED(char num_led){ //--------------------------------------------------------------------------------- numLED_SetSegLED(num_led); numLED_DrawSegLED(numLED_GetSegLED()); } //--------------------------------------------------------------------------------- void NumLED_HideNumLED(void){ //--------------------------------------------------------------------------------- numLED_SetSegLED(0x10); numLED_DrawSegLED(numLED_GetSegLED()); } //--------------------------------------------------------------------------------- void NumLED_ClearNumLED(void){ //--------------------------------------------------------------------------------- numLED_SetSegLED(0x0F); numLED_DrawSegLED(numLED_GetSegLED()); } //---------------------------------------------------------------------------------