程序原文:
#i nclude
#i nclude
#i nclude
#i nclude
//硬件端口的界说
#definePOWP3_7//此引脚为单片机操控一个三极管给ISD1420供电
#definePLP3_5//接ISD1420的PLAYL
#definePEP3_4//接ISD1420的PLAYE
#defineRECP3_3//接ISD1420的REC
#defineREC_LEDP3_2//ISD1420的RECLED
//操作形式的界说
#definemode10xC8//循环放音操作,按一下PE键可循环放音,按PL键中止;或按PL键放音,松开即中止
#definemode20xD0//按次序接连分段录放音,每段语音长度不限
#definemode30xC0//地址指针复位,开端录放榜首段
#definemode40xD1//按PE键可快速选段放音
//0xC1//也为地址指针复位
unsignedcharRX_index=0;//
bitFLAG_rev=0;//
unsignedcharPC_COMMAND;
unsignedcharRX_BUFFER[10];//串行接纳缓存
voidio_init(void);
voidinit_serialcomm(void);
voidserial_out(unsignedchard);
voiddelay5ms(void);
voiddelay(unsignedintx);
voidnop(unsignedchari);
voidpaly(unsignedchari);//挑选播映当前段操作
voidmain(void)
{
io_init();
init_serialcomm();
delay(1000);
serial_out(0xaa);//发送到PC机,看看PC端是否收到正确数据
serial_out(0x55);
serial_out(0x33);
POW=0;//敞开电源
//P1=mode4;
//P1=0X00;
while(1)
{
}
}
//—–端口初始化
voidio_init(void)
{
P1M0=0x00;//设置STC的IO为规范51IO形式
P1M1=0x00;
P3M0=0x00;
P3M1=0x00;
P1=0XFF;
P3=0XFF;
}
//串行口初始化
voidinit_serialcomm(void)
{
SCON=0x50;//SCON:serailmode1,8-bitUART,enableucvr
TMOD=0x20;//TMOD:timer1,mode2,8-bitreload
TH1=0xf3;//12MHz,2400bps
TL1=0xf3;
//IE|=0x90;//EnableSerialInterrupt
TR1=1;//timer1run
ES=1;
EA=1;
}
//串行数据发送,查询形式
voidserial_out(unsignedchard)
{
ES=0;
SBUF=d;while(TI==0){;}TI=0;
ES=1;
}
//串行中止接纳
voidreceive()interrupt4
{
if(RI)
{
RI=0;
ES=0;
PC_COMMAND=SBUF;
//RX_BUFFER[RX_index]=PC_COMMAND;//保存数据到数组里边
//RX_index++;
switch(PC_COMMAND)
{
case0xa0:
serial_out(0xa0);
P1=mode2;//按次序接连分段录放音,每段语音长度不限0xD0接连寻址,A4
PE=0;
nop(10);
PE=1;
P1=0XFF;
break;
case0xb0:
serial_out(0xb0);
P1=mode3;//地址指针复位0xC0
nop(10);
P1=0XFF;
break;
case0xc0://选段播映操控
serial_out(0xc0);
P1=0xD1;//第二步:快速选段放音
P1_0=0;
nop(10);
P1_0=1;
nop(10);
PE=0;
nop(10);
PE=1;
break;
case0xd0:
serial_out(0xd0);//播映恣意段的组合
paly(3);
paly(1);
paly(5);
paly(5);
paly(6);
paly(4);
paly(3);
paly(6);
paly(1);
break;
case0x30:
serial_out(0x30);
//此操作循环放音操作,按一下PE键可循环放音,按PL键中止;或按PL键放音,松开即中止
//此操作没什么用
P1=mode1;
PE=0;
nop(10);
PE=1;
//
break;
default:break;
}
ES=1;
}
}
voidpaly(unsignedchari)
{
i–;
P1=mode3;//榜首步:地址指针复位0xC0A7–A0:11000000(A2、A5在使用中可直接接地)
nop(10);
//P1=0XFF;
delay(30);//必要的延时
if(i>0)
{
P1=0xD1;//第二步:快速选段放音0xD1A7–A0:11010001(A2、A5在使用中可直接接地)
do
{
P1_0=0;//给A0低电平脉冲
nop(10);
P1_0=1;
nop(10);
PE=0;
nop(10);
PE=1;
delay(50);//这个延时是十分必要的!
i–;
}
while(i!=0);
delay(30);//必要的延时
}
P1=mode2;//第三步:播映当前段0xD0A7–A0:11010000(A2、A5在使用中可直接接地)
PE=0;
nop(10);
PE=1;
//P1=0XFF;
while(REC_LED==1){;}//等候播映
while(REC_LED==0){;}//等候播映完毕
}
//—————————-软件延时函数—————————-
//50ms延时
voiddelay5ms(void)
{
unsignedcharTempCyc=250;
while(TempCyc–);
}
voiddelay(unsignedintx)
{
do
{
delay5ms();delay5ms();delay5ms();x–;
}
while(x!=0);
}
voidnop(unsignedchari)
{
do
{
_nop_();
i–;
}
while(i!=0);
}
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/beidong/263124.html