7セグLEDっぽい何か。


7セグLEDっぽい何か。
そんな感じのモジュールを書いてみたり。


よくよく見直すと頂けない箇所が結構。
便所の落書きということで。


devkitPro1.5.0用です(ということにしておきます。)。


NumLED test


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());
}

//---------------------------------------------------------------------------------