📄 fnd.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 + -