#include "SPCE061V004.H"
void delay();
void dsp();
unsigned int g_Data[10] = {0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f};
unsigned int iData[5];
int main(void)
{
unsigned int t,i,j,m;
unsigned long int f,k=0;
t=0x0000;
f=0x0000;
*P_IOA_Dir=0xffff;
*P_IOA_Attrib=0xffff;
*P_IOA_Data=0x0000;
*P_IOB_Dir=0xff00;
*P_IOB_Attrib=0xff00;
*P_IOB_Data=0xff00;
*P_INT_Ctrl=C_IRQ1_TMA+C_IRQ2_TMB; //定时器A和B的溢出中断控制字设置;
asm("INT OFF");
*P_TimerA_Ctrl=C_SourceA_1+C_SourceB_1024Hz; //TimerA:1024Hz
*P_TimerA_Data=0xFDFF; //0.5 Second
*P_TimerB_Ctrl=0x0207; //设置定时器B的时钟源为EXT1外部时钟源;
*P_TimerB_Data=0x0000;
L1: while(1)
{
*P_Watchdog_Clear = C_WDTCLR;
m=0;
if(*P_INT_Ctrl&C_IRQ1_TMA)
{
*P_INT_Clear=C_IRQ1_TMA; //clear INT flag
t++;
}
if(*P_INT_Ctrl&C_IRQ2_TMB)
{
*P_INT_Clear=C_IRQ2_TMB;
k=k+65535;
}
if(t==2)
{
*P_TimerB_Ctrl=0x0006;
*P_TimerA_Ctrl=0x0006;
f=*P_TimerB_Data+k;
break; //TimerA定时一秒后,定时器A和B停止计数,跳出测频程序,进入数码管显示;
}
}
i=f/10000;
iData[4]=i;
j=f%10000;
i=j/1000;
iData[3]=i;
j=j%1000;
i=j/100;
iData[2]=i;
j=j%100;
i=j/10;
iData[1]=i;
j=j%10;
iData[0]=j;
if(f>99999) //最大显示99999HZ;
iData[0]=iData[1]=iData[2]=iData[3]=iData[4]=9;
while(1)
{
dsp();
m++;
if(m>1000)
goto L1; //显示一段时间后,再次进入测频程序;
*P_Watchdog_Clear=0x0001;
}
}
void delay() //延时子程序;
{
unsigned char j,k;
for(j=0;j<2;j++)
for(k=0;k<50;k++);
}
void dsp() //数码管显示子程序;
{
*P_IOA_Data=g_Data[iData[4]];
*P_IOB_Data=0xf7ff;
delay();
*P_IOB_Data=0xffff;
delay();
*P_IOA_Data=g_Data[iData[3]];
*P_IOB_Data=0xefff;
delay();
*P_IOB_Data=0xffff;
delay();
*P_IOA_Data=g_Data[iData[2]];
*P_IOB_Data=0xdfff;
delay();
*P_IOB_Data=0xffff;
delay();
*P_IOA_Data=g_Data[iData[1]];
*P_IOB_Data=0xbfff;
delay();
*P_IOB_Data=0xffff;
delay();
*P_IOA_Data=g_Data[iData[0]];
*P_IOB_Data=0x7fff;
delay();
*P_IOB_Data=0xffff;
}
评论5
最新资源