8led.c

来自「Embest EudKit-II教学系统配Samsung S3C44B0处理器的」· C语言 代码 · 共 155 行

C
155
字号
/*********************************************************************************************
* File:	8led.c
* Author:	embest	
* Desc:	8-segment digit LED control functions
* History:	
*********************************************************************************************/

/*--- include files ---*/
#include "44b.h"
#include "44blib.h"

/*--- macro defines ---*/
/* Bitmaps for 8-segment */
#define SEGMENT_A		0x80		
#define SEGMENT_B		0x40
#define SEGMENT_C		0x20
#define SEGMENT_D		0x08
#define SEGMENT_E		0x04
#define SEGMENT_F		0x02
#define SEGMENT_G		0x01
#define SEGMENT_P		0x10

#define DIGIT_F	(SEGMENT_A | SEGMENT_G | SEGMENT_E | SEGMENT_F)
#define DIGIT_E	(SEGMENT_A | SEGMENT_G | SEGMENT_E | SEGMENT_F | SEGMENT_D)
#define DIGIT_D	(SEGMENT_B | SEGMENT_C | SEGMENT_D | SEGMENT_F | SEGMENT_E)
#define DIGIT_C	(SEGMENT_A | SEGMENT_D | SEGMENT_E | SEGMENT_G)
#define DIGIT_B	(SEGMENT_C | SEGMENT_D | SEGMENT_F | SEGMENT_E | SEGMENT_G)
#define DIGIT_A	(SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_F | SEGMENT_E | SEGMENT_G)
#define DIGIT_9	(SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_F | SEGMENT_G)
#define DIGIT_8	(SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_D | SEGMENT_F | SEGMENT_E | SEGMENT_G)
#define DIGIT_7	(SEGMENT_A | SEGMENT_B | SEGMENT_C)
#define DIGIT_6	(SEGMENT_A | SEGMENT_C | SEGMENT_D | SEGMENT_F | SEGMENT_E | SEGMENT_G)
#define DIGIT_5	(SEGMENT_A | SEGMENT_C | SEGMENT_D | SEGMENT_F | SEGMENT_G)
#define DIGIT_4	(SEGMENT_B | SEGMENT_C | SEGMENT_F | SEGMENT_G)
#define DIGIT_3	(SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_D | SEGMENT_F)
#define DIGIT_2	(SEGMENT_A | SEGMENT_B | SEGMENT_D | SEGMENT_E | SEGMENT_F)
#define DIGIT_1	(SEGMENT_B | SEGMENT_C)
#define DIGIT_0	(SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_D | SEGMENT_E | SEGMENT_G)
#define All_on  DIGIT_8 | SEGMENT_P

/*--- global variables ---*/
/* Digit Symbol table*/
int szSymbol[] = { DIGIT_0, DIGIT_1, DIGIT_2, DIGIT_3, DIGIT_4, DIGIT_5, DIGIT_6, DIGIT_7,
    			 DIGIT_8, DIGIT_9, DIGIT_A, DIGIT_B, DIGIT_C, DIGIT_D, DIGIT_E, DIGIT_F};
/* LED segment table */
int szSeg[] = { SEGMENT_A, SEGMENT_B, SEGMENT_C, SEGMENT_D, SEGMENT_E, SEGMENT_F, SEGMENT_G, SEGMENT_P};
			  					  
/*--- functions declare ---*/
void d8led_test(void);
void d8led_symbol(int value);
void d8led_segment(int seg_num);
void d8Led_direction(char dir); //dir = 0 : up; dir = 1 : down

/*--- extern functions ---*/
extern void delay(int time);

/*--- function code---*/
/*********************************************************************************************
* name:		d8led_init
* func:		8-segment initialization
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void d8led_init(void)
{
    LED8ADDR = 0 ;
}

/*********************************************************************************************
* name:		d8led_test
* func:		8-segment digit LED test function
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void d8led_test(void)
{
	int i;

	/* display all digit from 0 to F */
	for( i=0; i<16; i++ )
	{
		d8led_symbol(i);
		delay(4000);
	}
}

/*********************************************************************************************
* name:		d8Led_direction
* func:		display 0 - F on 8-segment digit LED
* para:		cdir -- input, decrease (cdir = 1) or increase (cdir = 0) way to display the 16 number
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void d8Led_direction(char cdir)
{
	int i;
    
    if( cdir == 0 )
	{
	  /* display all digit from 0 to F */
	  for( i=0; i<16; i++ )
	  {
		d8led_symbol(i);
		delay(4000);
	  }
	  
	}else{
	  /* display all digit from F to 0 */
	  i = 16;
	  do{
		i--;
		d8led_symbol(i);
		delay(4000);
		
	  }while( i );
	  	
	}
	d8led_init();
}

/*********************************************************************************************
* name:		d8led_symbol
* func:		display digit symbol on 8-segment digit LED's segment
* para:		value --  digit's hexadecimal value
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void d8led_symbol(int nValue)
{
	/* symbol display */
	if( (nValue >= 0) && (nValue < 16) )
		LED8ADDR = ~szSymbol[nValue];	
}

/*********************************************************************************************
* name:		d8led_segment
* func:		8-segment digit LED's segment display control function
* para:		seg_num -- segment number
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void d8led_segment(int nseg_num)
{
	/* segment control */
	if( (nseg_num >= 0) && (nseg_num < 8) )
		LED8ADDR = ~szSeg[nseg_num];	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?