📄 其它程序代码.txt
字号:
其它程序代码
// 字节的比特顺序高低交换
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)
{
// 置低电平
PORTB &= 0x7f;
Delay_us(2);
return;
}
//片选信号置高
void SS_Disable(void)
{
// 置高电平
PORTB |= 0x80;
Delay_us(2);
return;
}
// 发送上电指令
void PowerUp(void)
{
unsigned char code;
//上电命令
code = 0x04;
// 发送命令码
SendOpCode(code);
return;
}
// 发送掉电指令
int PowerDown(void)
{
unsigned char code;
//掉电命令
code = 0x08;
// 发送命令码
SendOpCode(code);
return;
}
// 发送停止命令
void Stop(void)
{
unsigned char code;
//停止命令
code = 0x0C;
// 发送命令码
SendOpCode(code);
return;
}
// 放音操作
void Play(int nAddr)
{
int i;
unsigned char code;
// 发送加电指令
PowerUp();
// 延时25ms以上
Delay_ms(30);
// 发送地址信息
SendAddr(nAddr);
// 发送SETPLAY命令
code = 0x07;
SendOpCode(code);
// 发送PLAY命令
code = 0x0F;
SendOpCode(code);
// 处理结束
for(;;)
{
// 如果发生溢出的时候则结束录音
if(nOVF == 1)
{
nOVF = 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();
// 延迟一段时间
Delay_ms(30);
nPlay_count = 0;//清除按键次数记录变量
return;
}
// 录音操作
void Record(int nAddr)
{
int i;
unsigned char code;
// 发送加电指令
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(nOVF == 1)
{
nOVF = 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();
// 延迟一段时间
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--) ; //延迟一点时间
//字节的高低顺序变换
chrHi = ByteSwap(chrHi);
//字节的高低顺序变换
chrLow = ByteSwap(chrLow);
UART0_TX_BUF[0] = chrLow;//低地址字节
UART0_TX_BUF[1] = chrHi;//高地址字节
nTX0_Len = 2;
IFG1 |= UTXIFG0; // 设置中断标志,进入发送中断程序
for(i = 100;i > 0;i--) ; //延迟一点时间
while(1)// 等待缓冲区里的数据发送完毕
{
if(nTX0_Flag == 1) break;
}
// 片选禁止
SS_Disable();
return;
}
// 发送命令码
void SendOpCode(unsigned char code)
{
// 片选使能
SS_Enable();
for(i = 100;i > 0;i--) ; //延迟一点时间
UART0_TX_BUF[0] = code;//发送命令
nTX0_Len = 1;
IFG1 |= UTXIFG0; // 设置中断标志,进入发送中断程序
for(i = 100;i > 0;i--) ; //延迟一点时间
while(1)// 等待缓冲区里的数据发送完毕
{
if(nTX0_Flag == 1) break;
}
// 片选禁止
SS_Disable();
}
void Delay_ms(unsigned long nValue)//毫秒为单位,8MHz为主时钟
{
unsigned long nCount;
int i;
unsigned long j;
nCount = 2667;
for(i = nValue;i > 0;i--)
{
for(j = nCount;j > 0;j--);
}
return;
}
void Delay_us(unsigned long nValue)//微秒为单位,8MHz为主时钟
{
int nCount;
int i;
int j;
nCount = 3;
for(i = nValue;i > 0;i--)
{
for(j = nCount;j > 0;j--);
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -