📄 main.c
字号:
#include <MSP430x14x.h>
#include "SPI.h"
#include "ISD4004.h"
//定义全局变量
static char nPlay;//PLAY按键
static char nRec;//REC按键
static char nPlay_count;//PLAY按键次数
static char nRec_count;//REC按键次数
static char nVOF;//ISD4004 INT中断标志
//定义串口操作变量
char nRev_UART0;//串口 0 的接收标志
unsigned char UART0_TX_BUF[20];// 串口 0 的发送缓冲区
unsigned char UART0_RX_BUF[20];// 串口 0 的接收缓冲区
static int nTX0_Len;//发送数据长度
static int nRX0_Len;//接收数据长度
static int RAC_count;//通过RAC测量语段的长度
int nRX0_Len_temp;
static char nTX0_Flag;//发送完成标志
int nSend_TX0;//发送记数器
void AvodshekP(void);
void AvodshekR(void);
void Init_UART0(void);
int nRec_Row;
int nPlay_Row[3];
int nPlay_cnt;
int i;
void main()
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
_DINT();//关闭中断
// 初始化
Init_CLK();
PORT_Init();
// SPI_Init();
Init_UART0();
nPlay = 0;
nRec = 0;
nPlay_count = 0;
nRec_count = 0;
nRec_Row = 0;
nPlay_Row[0] = 100;
nPlay_Row[1] = 200;
nPlay_Row[2] = 250;
nPlay_cnt=0;
_EINT();//打开中断
for(;;)
{
// 放音的处理
if((nPlay == 1) && (nPlay_count == 1))
{
// 放音
SPI_Init();
RAC_count=0;
Play(nPlay_Row[nPlay_cnt]);
// nPlay_Row[0]+=5;
// i=RAC_count;//测试数组长度
nPlay_cnt += 1;
if(nPlay_Row[nPlay_cnt] >= 2400) nPlay_cnt = 0;
if (nPlay_cnt>2) nPlay_cnt=0;
Init_UART0();
}
// 录音的处理
if((nRec == 1) && (nRec_count == 1))
{
SPI_Init(); // 录音
Record(nPlay_Row[nPlay_cnt]);
nPlay_cnt+=1;
nRec_Row += 1;
if(nRec_Row >= 2400) nRec_Row = 0;
Init_UART0();
}
Delay_us(10);
}
}
void AvodshekR()
{
if((P1IN&BIT5)==0)
{
Delay_ms(10);
if((P1IN&BIT5)==0)
{
Delay_ms(10);
if((P1IN&BIT5)==0)
{
Delay_ms(10);
if((P1IN&BIT5)==0)
{
Delay_ms(10);
if((P1IN&BIT5)==0) Delay_us(100);
return;
}
}
}
}
P1IFG &= ~(BIT5); // 清除中断标志位
return;
}
void AvodshekP()
{
if((P1IN&BIT4)==0)
{
Delay_ms(10);
if((P1IN&BIT4)==0)
{
Delay_ms(10);
if((P1IN&BIT4)==0)
{
Delay_ms(10);
if((P1IN&BIT4)==0)
{
Delay_ms(10);
if((P1IN&BIT4)==0) Delay_us(100);
return;
}
}
}
}
P1IFG &= ~(BIT4); // 清除中断标志位
return;
}
// 字节的比特顺序高低交换
unsigned char ByteSwap(unsigned char chrIn)
{
unsigned char chrTemp;
unsigned char chrOut;
int i;
chrOut = 0;
for(i = 0;i < 8;i++)
{
chrTemp = (chrIn & 0x80) >> 7;
chrIn <<= 1;
if(chrTemp == 1)
{
chrOut |= (chrTemp << i);
}
}
return chrOut;
}
//片选信号置低
void SS_Enable(void)
{
// 置低电平
P3OUT &= ~(BIT0);
_NOP();
_NOP();
return;
}
//片选信号置高
void SS_Disable(void)
{
// 置高电平
P3OUT |= BIT0;
_NOP();
_NOP();
return;
}
// 发送上电指令
void PowerUp(void)
{
unsigned char code;
// SS_Enable();
//上电命令
code = 0x04;
// 发送命令码
SendOpCode(code);
// SS_Disable();
return;
}
// 发送掉电指令
void PowerDown(void)
{
unsigned char code;
// SS_Enable();
//掉电命令
code = 0x08;
// 发送命令码
SendOpCode(code);
// SS_Disable();
return;
}
// 发送停止命令
void Stop(void)
{
unsigned char code;
// SS_Enable();
//停止命令
code = 0x08;
// 发送命令码
SendOpCode(code);
// SS_Disable();
return;
}
// 放音操作
void Play(int nAddr)
{
int i;
unsigned char code;
// SS_Enable();
// 发送加电指令
PowerUp();
// 延时25ms以上
Delay_ms(100);
// 发送地址信息
SendAddr(nAddr);
// 发送SETPLAY命令
code = 0x07;
SendOpCode(code);
// 发送PLAY命令
// Delay_ms(30);
// SendAddr(nAddr);
code = 0x0F;
SendOpCode(code);
// 处理结束
for(;;)
{
// 如果发生溢出的时候则结束放音
if(nVOF == 1)
{
nVOF = 0;//清除中断标志变量
// 发送停止命令
Stop();
// 延迟一点时间
for(i = 0;i < 100;i++) ;
break;
}
// 如果第2次按下放音键,则结束放音
if((nPlay == 0) && (nPlay_count == 2))
{
nPlay_count = 0;//清除按键次数记录变量
// 发送停止命令
Stop();
// 延迟一点时间
for(i = 0;i < 100;i++) ;
break;
}
}
// 发送掉电指令
PowerDown();
// 延迟一段时间
// SS_Disable();
Delay_ms(30);
nPlay_count = 0;//清除按键次数记录变量
nPlay=0;
return;
}
// 录音操作
void Record(int nAddr)
{
int i;
unsigned char code;
// SS_Enable();
// 发送加电指令
PowerUp();
// 延时25ms以上
Delay_ms(30);
// 再次发送加电指令
PowerUp();
// 延时25ms以上
Delay_ms(30);
// 延时25ms以上
Delay_ms(30);
// 发送地址信息
SendAddr(nAddr);
// 发送SETREC命令
code = 0x05;
SendOpCode(code);
// 发送REC命令
code = 0x0D;
SendOpCode(code);
// 处理结束
for(;;)
{
// 如果发生溢出的时候则结束录音
if(nVOF == 1)
{
nVOF = 0;//清除中断标志变量
// 发送停止命令
Stop();
// 延迟一点时间
for(i = 0;i < 100;i++) ;
break;
}
// 如果第2次按下录音键,则结束录音
if((nRec == 0) && (nRec_count == 2))
{
nRec_count = 0;//清除按键次数记录变量
// 发送停止命令
Stop();
// 延迟一点时间
for(i = 0;i < 100;i++) ;
break;
}
}
// 发送掉电指令
PowerDown();
// 延迟一段时间
// SS_Disable();
Delay_ms(30);
nRec_count = 0;//清除按键次数记录变量
return;
}
// 发送地址信息
void SendAddr(int nAddr)
{
int i;
unsigned char chrHi;
unsigned char chrLow;
// 片选使能
SS_Enable();
// 分别取出高、低字节
chrHi = (unsigned char)((nAddr & 0xff00) >> 8);
chrLow = (unsigned char)(nAddr & 0x00ff);
for(i = 100;i > 0;i--) ; //延迟一点时间
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -