?? 1420.c
字號:
#include<reg51.h>
#include<intrins.h>
sbit key_REC=P1^0;
sbit key_PLAYE=P1^1;
sbit key_PLAYL=P1^2;
sbit key_function=P1^6;
sbit REC=P1^3;
sbit PLAYE=P1^4;
sbit PLAYL=P1^5;
sbit key0=P2^7;
unsigned char key;
bit flag_rec=0,flag_playl=0,flag_playe=0,flag=0;
bit f0=0,f1=0;
//地址是0x00~0x9F 共160個(gè) 8個(gè)為一秒
unsigned char voice_addr[]= // 錄音的各地址
{0x00,0x08,0x10,0x18,0x20,
0x28,0x30,0x38,0x40,0x48,
0x50,0x58,0x60,0x68,0x70,
};
//
void delay_10us(unsigned char n)
{
do
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}while(--n);
}
//
void delay_ms(unsigned int n)
{
do
{
delay_10us(230);
}while(--n);
}
//鍵控錄音
void Record()
{
while(flag_rec==1)
{
key=P2;
if(key==0xff)continue;//當(dāng)key_REC按下過一次之后,則程序一直在這里執(zhí)行直到有命令才開始錄音
//這是因?yàn)橛衏ontinue與while的結(jié)果
delay_ms(10);
key=P2;
if(key==0xff)continue;
switch(key)
{
case 0xfe:
{
P0=voice_addr[0];
//錄音時(shí)因控制延時(shí)時(shí)間
//應(yīng)讓延時(shí)時(shí)間小于錄音時(shí)間
REC=0;
delay_ms(500);
REC=1;
break;
}
case 0xfd:
{
P0=voice_addr[1];
REC=0;
delay_ms(500);
REC=1;
break;
}
case 0xfb:
{
P0=voice_addr[2];
REC=0;
delay_ms(500);
REC=1;
break;
}
default:
{
break;
}
}
flag_rec=0;
}
}
//電平放音子程序中的子程序
Playl1()
{
switch(key)
{
case 0xfe:
{
P0=0X00;
P0=voice_addr[0];
PLAYL=0;
delay_ms(600);
PLAYL=1;
break;
}
case 0xfd:
{
P0=0X00;
P0=voice_addr[1];
PLAYL=0;
//可以不延時(shí),因?yàn)樗龅侥┪驳腅OM就會(huì)結(jié)束
//如果延時(shí)就可以自由的播放我想要的錄音長度
//在我的錄音范圍之內(nèi)
delay_ms(300);
PLAYL=1;
break;
}
case 0xfb:
{
P0=0X00;
P0=voice_addr[2];
PLAYL=0;
delay_ms(600);
PLAYL=1;
break;
}
default:
{
break;
}
}
flag_playl=0;
}
//電平觸發(fā)播放函數(shù)
//變?yōu)榈碗娖讲⒈3种钡阶兏呋蛴龅浇Y(jié)束標(biāo)志
void Playl()
{
while(flag_playl==1)
{
if(f0==1) //循環(huán)
{
while(f0==1)
{
P0=0xc8;
PLAYL=0;
while(key_PLAYL==0);
PLAYL=1;
f0=0;
flag_playl=0;
}
}
else
{
key=P2;
if(key==0xff)continue;
delay_ms(10);
key=P2;
if(key==0xff)continue;
Playl1();//把下面的程序?qū)懗闪艘粋€(gè)函數(shù) 在上面
}
}
}
//脈沖放音
Playe()
{
while(flag_playe==1)
{///////////此功能未實(shí)現(xiàn)
if(f0==1) //循環(huán)
{
while(f0==1)
{
PLAYE=1;
P0=0xc8;
PLAYE=0;
if(key_PLAYL==1)continue;
delay_ms(10);
if(key_PLAYL==1)continue;
PLAYL=0;
key_PLAYL=1;
// PLAYE=1;
// PLAYL=0;////////////////???????????????????
//
//
// PLAYL=1;
f0=0;
flag_playe=0;
}
}
///////////此功能未實(shí)現(xiàn)
if(f1==1) //快進(jìn)
{
PLAYE=1;
P0=0xd1;//
PLAYE=0;
f1=0;
flag_playe=0;
PLAYE=1;
PLAYE=0;
}
if((f0==0)&&(f1==0)) //在無操作模式下
{
key=P2;
if(key==0xff)continue;
delay_ms(10);
key=P2;
if(key==0xff)continue;
switch(key)
{
case 0xfe:
{
P0=0X00;
P0=voice_addr[0];
PLAYE=1;
PLAYE=0;//播放
break;
}
case 0xfd:
{
P0=0X00;
P0=voice_addr[1];
PLAYE=1;
PLAYE=0;
break;
}
case 0xfb:
{
P0=0X00;
P0=voice_addr[2];
PLAYE=1;
PLAYE=0;
break;
}
default:
{
break;
}
}
flag_playe=0;
}
}
}
//操作模式
void work()
{
while(flag==1)
{
key=P2;
if(key==0xff)continue;
delay_ms(10);
key=P2;
if(key==0xff)continue;
switch(key)
{
case 0xfe:
{
// P0=0Xff;
// P0=0xc8;
f0=1;//循環(huán)
break;
}
case 0xfd:
{
// P0=0Xff;
// P0=0xd1;//
f1=1;//快進(jìn)
break;
}
default:
{
break;
}
}
flag=0;
}
}
/**************************/
//主函數(shù)
main()
{
P0=0x00;
while(1)
{
//錄音
if( key_REC==0)
{
delay_ms(10);
if( key_REC==0)
{
flag_rec=1;
while(key_REC==0);
delay_ms(8);
// Record();
}
}
//電平放音
if( key_PLAYL==0)
{
delay_ms(10);
if( key_PLAYL==0)
{
flag_playl=1;
// while(key_PLAYL==0);
// delay_ms(8);
// Playl();
}
}
//脈沖放音
if( key_PLAYE==0)
{
delay_ms(10);
if( key_PLAYE==0)
{
flag_playe=1;
while(key_PLAYE==0);
delay_ms(8);
// P0=0xc8;
// PLAYE=1;
// PLAYE=0;
// while(key_PLAYL==1);
//// if(key_PLAYL==1)continue;
//// delay_ms(10);
//// if(key_PLAYL==1)continue;
// PLAYL=0;
// delay_ms(1000);
// PLAYL=1;
// // key_PLAYL=1;
// // Playe();
}
}
//操作模式
if(key_function==0)
{
delay_ms(10);
if( key_function==0)
{
flag=1;
while(key_function==0);
delay_ms(8);
}
}
//各函數(shù)
Record();//
Playl();
work();
Playe();
///測試各錄音
if(key0==0)
{
delay_ms(10);
if(key0==0)
{
//while(key0==0);
//delay_ms(10);
key=0xfe;
flag_playl=1;
Playl1();
key=0xfb;
flag_playl=1;
Playl1();
}
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -