|
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SS=P1^0; //片選
sbit MOSI=P1^1; //數(shù)據(jù)輸入
sbit MISO=P1^2; //數(shù)據(jù)輸出
sbit SCLK=P1^3; //SID4004時(shí)鐘
//sbit ISD_INT=P3^1; //中斷
sbit K1=P3^2;
sbit K2=P3^3;
sbit AN=P3^4; //執(zhí)行
//sbit STOP=P1^5; //復(fù)位
//sbit PR=P1^6; //PR=1錄音,PR=0放音
sbit LED=P0^0; //指示燈
void delayms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uint addr;////全局變量//// 放音地址
////////////////放音部分子程序,放音地址由ADDR決定////
void play()
{ uint y;
SS=0;
MOSI=0;//發(fā)送開(kāi)始
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_();
}//發(fā)送結(jié)束
SS=1;//上電結(jié)束
delayms(50);
SS=0;
MOSI=0;//發(fā)送地址
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_();
}//發(fā)送地址結(jié)束
MOSI=0;//從指定地址開(kāi)始放音
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; }
//////////////////////////錄音部分子程序,地址由ADDR決定/////////////////////////
void rec()
{ uint y;
SS=0;
MOSI=0;//發(fā)送開(kāi)始
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_();
}//發(fā)送結(jié)束
SS=1;//上電結(jié)束
delayms(50);
SS=0;
MOSI=0;//發(fā)送開(kāi)始
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_();
}//發(fā)送結(jié)束
SS=1;//上電結(jié)束
delayms(50);
delayms(50);
SS=0;
MOSI=0;//發(fā)送地址
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_();
}//發(fā)送地址結(jié)束
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;
}
////////////////////////////////////
////////////////////////////////
void stop()
{
uchar y;
SS=1;
SS=0;
MOSI=0;//放音
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((0x30>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}
SS=1;
}
////////////////////////////////////void press_key()
void main()
{ P1=0xff;
P0=0XFF;
LED=0;
while(1)
{
if(K1==0)
{delayms(10);
while(K1==0); ///松手判斷
LED=1;
addr=0X00;/////從0X00單元開(kāi)始
rec();
P1=0XFF;
}
if(K2==0)
{
delayms(10);
while(K2==0);
LED=1;
addr=0X00;
play();
P1=0XFF;
}
if(AN==0)
{delayms(10);
while(AN==0);
LED=0;
stop();
P1=0XFF;
}
}
}
|
評(píng)分
-
查看全部評(píng)分
|