l利用DSP28335进行简单的定时器秒表设计,可利用按键实现正向计时、倒计时、暂停、继续以及清零的功能,通过简单的配置调试能利用4位数码管进行显示,且通过LED等进行反馈。调试的过程中由于中断函数放置的位置不同导致实现的功能不同,将中断放于主函数之后所有的问题迎刃而解,但是在编写调试之初中断函数在定时器初始化函数.c文件中,按键选择功能无法正常实现。对于我出现的问题希望有大佬帮忙解答一下。
主函数部分:
void main()
{
char key;
//系统初始化
InitSysCtrl();
InitPieCtrl();
IER=0x0000;
IFR=0x0000;
InitPieVectTable();
//外设初始化
LED_Init();
SMG_Init();
BEEP_Init();
KEY_Init();
//设置定时器0的中断入口地址为中断向量表的INT0
EALLOW;
PieVectTable.TINT0=&TIM0_IRQn;
EDIS;
while(1)
{
LED3_TOGGLE;
key=KEY_Scan(0);
switch(key)
{
case 1://KEY1_PRESS://开始计时
mod=0;
TIM0_Init(150,1000);
break;
case 3://KEY3_PRESS://暂停计时
mod=1;
TIM0_Init(150,1000);
break;
case 5://KEY5_PRESS://计时清零
mod=2;
ms=0;
sec=0;
min=0;
TIM0_Init(150,1000);
break;
case 7://KEY7_PRESS://正计时
mod=3;
if(flag==1)
{
ms=0;
sec=0;
min=0;
}
TIM0_Init(150,1000);
break;
case 9://KEY9_PRESS://倒计时
mod=4;
TIM0_Init(150,1000);
break;
}
LED4_TOGGLE;
}
}
中断函数:
interrupt void TIM0_IRQn(void)
{
if(mod==0&&flag==0)
ms++;
else if(mod==0&&flag==1&ms>0)
ms--;
else if(mod==3)
{
ms++;
flag=0;
}
else if (mod==4)//倒计时设定时间为65534ms,由于系统为16为所以unsigned long int 取值范围为0~2^32-1
{
if(flag==0)
ms=6000000;//倒计时100分钟
ms--;
flag=1;
}
if(flag==0)
{
sec=ms/1000;
min+=sec/60;
if(sec==60)//防止超出数据范围,对参数进行初始化
{
sec=0;
ms=0;
}
}
if(flag==1)
{
sec=ms/1000%60;
min=ms/1000/60;
}
EALLOW;
PieCtrlRegs.PIEACK.bit.ACK1=1;
EDIS;
SMG_DisplayInt(min,sec);
}
显示函数部分:
void SMG_DisplayInt(Uint16 min,Uint16 sec)
{
unsigned char S[4];
unsigned char i=0;
S[0]=smgduan[min/10];
S[1]=smgduan[min%10]|0x80;
S[2]=smgduan[sec/10];
S[3]=smgduan[sec%10];
for(i=0;i<4;i++)
{
HC164SendData(S[i]);
switch(i)
{
case 0:SEG1_SETH;SEG2_SETL;SEG3_SETL;SEG4_SETL;break;
case 1:SEG1_SETL;SEG2_SETH;SEG3_SETL;SEG4_SETL;break;
case 2:SEG1_SETL;SEG2_SETL;SEG3_SETH;SEG4_SETL;break;
case 3:SEG1_SETL;SEG2_SETL;SEG3_SETL;SEG4_SETH;break;
}
DELAY_US(100);
}
}
//74HC164发送数据函数
void HC164SendData(unsigned char dat)
{
char i=0;
for(;i<8;i++)
{
SPICLKA_SETL;
if(dat&0x80)
SPISIMOA_SETH;
else
SPISIMOA_SETL;
SPICLKA_SETH;
dat<<=1;
}
}
程序中关于数据类型的取值范围在文末附上链接,在此向其作者表示感谢。
https://blog.csdn.net/baidu_37973494/article/details/100125363
文章配套源程序代码链接如下,如有需要自取
https://download.csdn.net/download/m0_64271488/83911366?spm=1001.2014.3001.5503