📄 main.c
字号:
#include "SM8958k.H"
#define OSC_FREQ 11059600L
#define RCAP2_10ms 65536L - OSC_FREQ/1200L
#define uchar unsigned char
#define uint unsigned int
sfr16 RCAP2LH = 0xCA;
sfr16 T2LH = 0xCC;
sbit led=P0^6;
sbit SS = P1^1; //片选
sbit SCLK = P1^0; //ISD4004时钟
sbit MOSI = P1^2; //数据输入
sbit MISO = P1^3; //数据输出
sbit LED = P1^7; //指示灯
sbit AN = P2^2; //执行
sbit STOP = P1^5; //复位
sbit PR = P2^3; //PR = 0录音,PR = 1放音
sbit INT = P1^4; //中断
bit reccon;
void delay_10ms (unsigned int _10ms)
{
RCAP2LH = RCAP2_10ms;
T2LH = RCAP2_10ms;
ET2 = 0; // Disable timer2 interrupt
T2CON = 0x04; // 16-bit auto-reload, clear TF2, start timer
while (_10ms--)
{
while (!TF2)
{
}
TF2 = 0;
}
TR2 =0;
}
void putbyte(unsigned char c)
{
SBUF=c;
while(!TI);TI=0;
}
urtinit()
{ TMOD = 0x21;
PCON = 0x80;
SCON = 0x50;
TH1=0xFD; TL1=0xFD; TR1=1;
IP = 0x10;//0x04;
// EA=1;
putbyte(1);
putbyte(2);
putbyte(3);
putbyte(4);
putbyte(5);
}
void ledflash(uint k,uchar h)
{
while(h--)
{
led=1;
delay_10ms(k);
led=0;
delay_10ms(k);
}
}
/* ISD4004 SPI 写入程序 */
void ISDX( unsigned char d)
{
unsigned char i,j;
SS = 0; //开片选
SCLK = 0; //时钟 SCLK = 0
j = d;
for( i = 0;i < 8;i++)
{
if( j & 0x01 ) //数据写 MOSI
{
MOSI = 1;
}
else
{
MOSI = 0;
}
SCLK = 1; //时钟 SCLK = 1
j = j >> 1;
SCLK = 0; //时钟 SCLK = 0
}
}
/* ISD 上电 */
void powerup( )
{
ISDX(0x20 ); //发 00100XXXXXXXXXXX
SS = 1; //关片选
}
//停止当前操作<< STOP >> 8位
void STOPP( )
{
ISDX(0x30 ); //发 0X110XXX
SS = 1; //关片选
}
//;停止当前操作掉电<< STOPPWRDN >> 8位
void DSTOP( )
{
ISDX(0x10 ); //发 0X010XXXXXXXXXX
SS = 1; //关片选
delay_10ms(5); //延时 50 ms
delay_10ms(5); //延时 50 ms
}
void record4004() //录音 address--录音地址 0---2400
{
powerup(); //发送上电命令
delay_10ms(5); //延时50ms
powerup();//发送上电命令
delay_10ms(5);//上电延时
delay_10ms(5);//上电延时
ISDX(0); //从00开始录音
ISDX(0);
ISDX(0xB0); //发送录音命令
}
checkanjian()
{if(AN==0)
delay_10ms(20);
if(AN==0)
{
if(reccon==1)
{reccon=0;
//led=0;
}
else
{reccon=1;
// led=1;
}
}
}
main()
{
unsigned char delay; //延时参数
unsigned char isdl,isdh; //ISD高、低位
unsigned char n1;
urtinit();
reccon=1;
DSTOP(); //ISD掉电
delay_10ms(50);
checkanjian();
if(reccon==1)
{led=1;//亮灯 放音
powerup(); //发送上电命令
delay_10ms(5); //延时50ms
ISDX(0);
ISDX(0);
ISDX(0);
delay_10ms(5);
ISDX(0xf0);
}
else
{led=0;//灭灯 录音
delay_10ms(5);
powerup(); //发送上电命令
delay_10ms(5); //延时50ms
powerup();//发送上电命令
delay_10ms(5);//上电延时
delay_10ms(5);//上电延时
ISDX(0); //从00开始录音
ISDX(0);
ISDX(0);
ISDX(0xB0 );
// if( INT )
// {LED = 1; //指示灯
// STOPP(); //停止当前操作
// reccon=1;
// }
}
while(1)
{;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -