📄 main.c
字号:
#define __dsPIC30F6014__
#include <p30f6014.h>
#include <dsp.h>
#include "common.h"
#include "lcd.h"
#include "menu.h"
#include "codec.h"
#include "atod.h"
#include "timers.h"
#include "gettime.h"
#include "procsignal.h"
#include "soundgen.h"
//主程序
int main(void)
{
int max,maxpos;
PORTD = 0xFFFF; //关闭所有的LED
TRISDbits.TRISD0 = 0; //LED位设为输出
TRISDbits.TRISD1 = 0;
TRISDbits.TRISD2 = 0;
TRISDbits.TRISD3 = 0;
InitTimers();
TimeDelay(20);
InitLcd();
InitMenu();
InitAD();
InitCodec();
InitProcSignal();
InitGetTime();
InitSoundGen();
while(1) //主循环
{
ServiceMenu(); //菜单操作
ServiceLCD(); //LCD显示及画图
if(SemA.CodecTxDataRdy) //如果缓冲已满,开始处理
{//倍频为8xPLL最大时间为3.1毫秒
SemA.CodecTxDataRdy = FALSE;
//对缓冲内的信号进行处理
ServiceSound( pActiveTxBuf );
}
else if(SemA.CodecRxDataRdy)
{//倍频为4xPLL最大时间为2.5毫秒
SemA.CodecRxDataRdy = FALSE;
//准备对缓冲区中的数据画图
max = VectorMax(PROC_BLOCK_SIZE, pActiveRxBuf, &maxpos);
if(max>30000) //接近峰值则LED1闪亮
LED1_ON
else
LED1_OFF
ProcInput( pActiveRxBuf);
if(CurrentMenu >= MENU_SIGNAL)
PlotTime(pActiveRxBuf);//画时钟
PlotPendulum(); //画钟摆
}
else //当编码解码器缓冲中的数据未就绪时执行以下的例程
{//倍频为4xPLL最大时间为780微秒
if(SemA.SecRdy) //每1秒执行一次
{
FindSecSync();
if(SemA.SecLocked)
{
FindMinSync();
ProcDataBit();
}
IncTime();
DisplayTime();
SemA.SecRdy = FALSE;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -