//#include "stc15f2k60s2.h"
#include "reg51.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
bit playbit,recbit; //定义两个位变量,放音和录音位
uint playcout,reccout; //放音和录音次数
////////定义放音命令,定义常量//////
#define ISDPOWERUP 0X20 //ISD4004上电
#define ISDSTOP 0X10 //ISD4004下电
#define OPERSTOP 0X30 //ISD4004停止当前操作
#define PLAYSET 0XE0 //ISD4004从指定地址开始放音
#define PLAYCUR 0XF0 //ISD4004从当前地址开始放音
#define RECSET 0XA0 //ISD4004从指定地址开始录音
#define RECCUR 0XB0 //ISD4004从当前地址开始录音
sbit SS=P1^5; //定义引脚
sbit MOSI=P1^1;
sbit MISO=P1^7;
sbit SCLK=P1^4;
sbit key1=P0^0; //时间
sbit key2=P0^1; //温度湿度
sbit key3=P0^2; //GPS
sbit key4=P0^3; //录音
void delay(unsigned int i) //延时程序
{
while(i--);
}
void delayms(uchar ms)
{
uchar j;
while(ms--)
{
for(j = 0; j < 120; j++);
}
}
/*
void stop() //停止程序
{
uchar y;
SS=1;
SS=0; //ss=0时
芯片才是有效的
MOSI=0; //放音
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((0x30>>y)&0x01) //停止当前操作指令地址0x30,从最低位读取数据
MOSI=1;
else
MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1; //一个上升沿 时钟
_nop_();
_nop_();
_nop_();
}
SS=1;
}
*/
//////////////////////////lu音部分子程序,地址由ADDR决定/////////////////////////
void luyin(addr)
{ uint y;
SS=0;
MOSI=0; //发送开始
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((0x20>>y)&0x01)
MOSI=1;
else
MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
} //发送结束
SS=1; //上电结束
delayms(50);
/* SS=0;
MOSI=0; //发送开始
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((0x20>>y)&0x01) //应该是下电?
MOSI=1;
else
MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}
SS=1;//上电结束
delayms(50);
delayms(50); */
SS=0;
MOSI=0; //发送地址
SCLK=0;
for(y=0;y<16;y++)
{
SCLK=0;
if((addr>>y)&0x01)
MOSI=1;
else
MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
} //发送地址结束
MOSI=0;
SCLK=0;
for(y=0;y<8;y++) //从当前地址录音
{
SCLK=0;
if((0xa0>>y)&0x01)
MOSI=1;
else
MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}
SS=1;
SS=0;
MOSI=0;
SCLK=0;
for(y=0;y<8;y++) //从指定地址录音
{
SCLK=0;
if((0xb0>>y)&0x01)
MOSI=1;
else
MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}
SS=1;
}
////////////////放音部分子程序,放音地址由ADDR决定////
void fangyin(uint addr)
{ uint y;
SS=0;
MOSI=0;//发送开始
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((0x20>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}//发送结束
SS=1;//上电结束
delayms(50);
SS=0;
MOSI=0;//发送地址
SCLK=0;
for(y=0;y<16;y++)
{
SCLK=0;
if((addr>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}//发送地址结束
MOSI=0;//放音
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((0xe0>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}
SS=1;
SS=0;
MOSI=0;//放音
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((0xf0>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}
SS=1; }
////////////////////////////////
playsound() ///录放音子函数
{
if(recbit)
{recbit=0;
switch(reccout)
{case 1:{luyin(0x00);}break;
case 2:{luyin(0x100);}break;
case 3:{luyin(0x200);}break;
case 4:{luyin(0x300);}break;
}
}
}
void scankey4()
{
playsound();
}
void scankey3()
{
fangyin(0x100);
}
void scankey2()
{
fangyin(0x300);
}
void keyscan()
{
uchar value=0;
P0=0x0f;
value=P0&0x0f;
if(value!=0x0f)
{
if(key2==0)
{
delay(10);
while(key2==0)
scankey2();
}
if(key3==0)
{
delay(10);
while(key3==0)
scankey3();
}
if(key4==0)
{
delay(10);
while(key4==0)
{ recbit=1;
reccout++;
if(reccout>4)
{
reccout=0;
break;
}
scankey4();
}
}
}
}
void main()
{
while(1)
{
keyscan();
}
}
-
-
新建 Microsoft Word 97-2003 文档.doc
下载积分: 积分 -1 分
39.5 KB, 下载次数: 3, 下载积分: 积分 -1 分
一周热门 更多>