⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fnd.c

📁 ucCos移植到广州友善nano2410
💻 C
字号:
/*****************************************
  NAME: fnd.c
  DESC: 7 Segment Display Test
  HISTORY:

 *****************************************/

#include "..\inc\def.h"
#include "..\inc\option.h"
#include "..\inc\2410addr.h"
#include "..\inc\2410lib.h"

void __irq Timer4Done(void);
void disp_left_bot(U32 d);	
void disp_left_top(U32 d);

#define  CS_FND1 	0    //哭率 FND (LADDR1,LADDR2 - Low)
#define  CS_FND_LP  2    //哭率 FND control (LADDR1-High,LADDR2 - Low)
#define  CS_FND2 	4    //坷弗率 FND (LADDR1-Low,LADDR2 - High)
#define  CS_FND_RP  6    //坷弗率 FND control (LADDR1,LADDR2 - High)
 
#define FND_BASE_ADDR 0x10000000 //nCG2 

#define FDATA_L 	(*(volatile unsigned char *)(FND_BASE_ADDR+CS_FND1))
#define FDATA_L_EN  (*(volatile unsigned char *)(FND_BASE_ADDR+CS_FND_LP))
#define FDATA_R     (*(volatile unsigned char *)(FND_BASE_ADDR+CS_FND2))
#define FDATA_R_EN  (*(volatile unsigned char *)(FND_BASE_ADDR+CS_FND_RP))

// Common Anode type.
// HEX font
const U8 seg_font[]= 
   {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

const seg_blank = 0xff;   // ''
const seg_bar = 0xbf;     // '-'
const seg_all_on = 0x00;  // 8.

const seg_scan[] = 
		{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

U8  seg_data[8];
U8  scan_cnt = 0;

U8 ccount=0,c_first=1;     //1檬甫 父甸扁 困茄 傈开函荐.
U32 min_tick=0,hour_tick=0,sec_tick=0;  //矫埃,盒 狼 函荐
U32 t_count=0;

//秦寸 Scan Line阑 劝己拳 茄促.(Digit Position)
void FLSeg(U8 pos) 
{ 
	FDATA_L_EN = pos;
}

//角力 Data阑 谎府绰 风凭(Digit Data)
void FLDigit(U8 digit) 
{ 
	FDATA_L = digit;
}

void Fnd_display(void)
{
	int i; 
	int digit,d_byte[4];
	
	digit = 1234;	
	
	while(1)
	{
		d_byte[3] =  seg_font[(int) digit/1000];
		d_byte[2] =  seg_font[(int)((digit%1000)/100)];
		d_byte[1] =  seg_font[(int)((digit%100)/10)];
		d_byte[0] =  seg_font[(int)(digit%10)];
		
		for(i=0;i<4;i++)  // 哭率 8 磊府 箭磊
		{
			//单捞磐 刚历 焊郴绊 促澜 胶牡 脚龋甫 焊郴促.
			FLSeg(0x0);
			FLDigit(d_byte[i]);
			FLSeg((1<<(i+4))); //u11
			Delay(10);
		}
	}
}
void Fnd_Init(void)
{
  //int idx,end;
	
	rINTMSK = ~(BIT_TIMER4);
	pISR_TIMER4 = (int)Timer4Done;
	
	Uart_Printf("\n\n        Timer 4 Interrupt Test     \n\n"); 
	rTCFG0  = rTCFG0 & ~(0xffffff)|0x0f0f;  // prescale1-15,prescale0-15
	rTCFG1  = rTCFG1 & ~(0xffffff)|0x001233; //All interrupt,Mux4=1/2,Mux3=1/4,Mux2=1/8,Mux1=1/16,Mux0=1/16
	
	//Timer input clock frequency = PCLK/(prescaler value+1)/(divider value)
	//T (timer per clock)= 1/(PCLK/(prescaler value+1)/(divider value)) (窜困 us)
	//(1/(50MHz/16/2 )) * 0xffff (65535) = 0.039s (25.641Hz)
    //rTCNTB4 = 0x3fff;    //10msec(16383)
    rTCNTB4 = 0xccc;       //1msec
    
	rTCON   = rTCON & ~(0xffffff)|0x6aaa0a;  
						//Auto reload, Inverter off, Manual update, Dead zone disable, Stop  
   	rTCON   = rTCON & ~(0xffffff)|0x599901;  
   						//Auto reload, Inverter off, No operation, Start, Dead zone disable

	Uart_Printf("    Press any key to exit Timer int test\n");	
	
	/*end = 1;
	do
	{
   	   idx = Uart_GetIntNum_GJ() ;
   	   disp_left_bot(idx);
   	   
   	   if(idx == 1234) end=0;
   	       
    }while(end);
	*/
	Uart_Getch();
	
	rTCON   = 0x0;
	rINTMSK |= (BIT_TIMER4);
}

void __irq Timer4Done(void)
{
    int temp;
    
    rSRCPND = BIT_TIMER4;       //Clear pending bit
    rINTPND = BIT_TIMER4;
    //rINTPND;
    
    //7 Segment
    FLSeg(0); //葛电 技弊刚飘 Off
    FLDigit(seg_data[scan_cnt]);      //Segment Data Output
	FLSeg(seg_scan[scan_cnt]);         //Segment Scan Out
	//FLSeg(1<<scan_cnt);         //Segment Scan Out
	
	scan_cnt++;
	if(scan_cnt >=8) scan_cnt = 0;
    
    if(ccount >100) //1檬
    {
        ccount=0;  
        
        if(c_first!=0)  //贸澜 Increase
        {
        	t_count++;
        	
        	if(t_count >9999)
            	c_first = 1;
        	else
            	c_first = 0;
        }
        else
        	t_count--;
        	
        
        disp_left_top(t_count);
        
        if(sec_tick>60) //1盒
        {
        	sec_tick = 0;
        	if(min_tick>60) //1矫埃
        	{
        	  min_tick = 0;
        	  
        	  if(hour_tick >24) //1老
        	     hour_tick = 0;
        	  else
        	     hour_tick++ ;
        	}
        	else
        	  min_tick++;
        }
        else
        	sec_tick++;
        
        temp = min_tick*100+sec_tick;
        disp_left_bot(temp);//	
    }
    else
        ccount++;
}
 

//焊扁俊 哭率俊 困俊乐绰 Segment
void disp_left_top(U32 digit)
{
	seg_data[7] = seg_font[(digit/1000)];
	seg_data[6] = seg_font[(digit%1000)/100];
	seg_data[5] = seg_font[(digit%100)/10];
	seg_data[4] = seg_font[(digit%10)];
}
//哭率 酒贰率 Segment
void disp_left_bot(U32 digit)	
{
	seg_data[3] = seg_font[(digit/1000)];
	seg_data[2] = seg_font[(digit%1000)/100];
	seg_data[1] = seg_font[(digit%100)/10];
	seg_data[0] = seg_font[(digit%10)];
}

⌨️ 快捷键说明

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