TMSF28335,设计一个秒表,计时范围0~30s,初始状态为0。当第1次按一下计时功能键时,秒表开始计时并显示;第2次按一下计时功能键时,停止计时,并显示当前时间;如果计时到30s,则自动停止,并显示时间;第3次按一下计时功能键,秒表清0。再次按一下计时功能键,则重复上述计时过程。请给出主函数代码
时间: 2024-01-19 17:02:26 浏览: 74
好的,下面是我为你编写的 TMSF28335 秒表的主函数代码。请注意,由于我是一个 AI,无法直接运行代码,需要您将代码放入您的开发环境中编译运行。
```
#include <stdio.h>
#include "F2837xD_device.h"
#include "F2837xD_Examples.h"
Uint32 startTime = 0;
Uint32 stopTime = 0;
Uint32 elapsedTime = 0;
Uint32 count = 0;
void initGPIO()
{
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;
EDIS;
}
void initTimer()
{
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;
CpuTimer1Regs.TCR.all = 0x4000;
CpuTimer1Regs.TCR.bit.TIE = 1;
CpuTimer1Regs.TCR.bit.TSS = 1;
CpuTimer1Regs.PRD.all = 0xFFFFFFFF;
CpuTimer1Regs.TCR.bit.TRB = 1;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
}
interrupt void cpu_timer1_isr(void)
{
CpuTimer1Regs.TCR.bit.TIF = 1;
elapsedTime = CpuTimer1Regs.TIM.all - startTime;
if (elapsedTime >= 30000000)
{
stopTime = CpuTimer1Regs.TIM.all;
elapsedTime = stopTime - startTime;
count = 0;
}
}
int main(void)
{
initGPIO();
initTimer();
while (1)
{
if (GpioDataRegs.GPADAT.bit.GPIO0 == 0)
{
while (GpioDataRegs.GPADAT.bit.GPIO0 == 0)
{
}
if (count == 0)
{
startTime = CpuTimer1Regs.TIM.all;
CpuTimer1Regs.TCR.bit.TSS = 0;
count++;
}
else if (count == 1)
{
stopTime = CpuTimer1Regs.TIM.all;
elapsedTime = stopTime - startTime;
if (elapsedTime >= 30000000)
{
count = 0;
}
else
{
printf("Elapsed Time: %d cycles\n", elapsedTime);
count++;
}
}
else if (count == 2)
{
CpuTimer1Regs.TCR.bit.TSS = 1;
count = 0;
}
}
}
}
```
在这个程序中,我们使用了 TMSF28335 的 GPIO 和定时器模块来实现秒表功能,具体来说:
- initGPIO()函数初始化了 GPIO0 和 GPIO1 为输出模式,其中 GPIO0 用于计时功能键的输入,GPIO1 用于显示计时结果。
- initTimer()函数初始化了 CpuTimer1 模块为定时器模式,中断方式计时,计时周期为 1us。
- 在 cpu_timer1_isr() 中断服务函数中,我们实现了计时器到达 30s 自动停止的功能,同时将计时器计数器清零。
- 在主函数中,我们使用 GPIO0 的状态来判断用户是否按下计时功能键。如果按下,则根据当前计数器的状态执行相应的计时、停止和清零操作,并在计时结束时输出计时结果。
请注意,这只是一个简单的示例程序,您可能需要根据自己的需求进行修改和优化。
阅读全文