#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define NOP4(){_nop_();_nop_();_nop_();_nop_();}
sbit SCK=P1^bai0;
sbit SDA=P1^1;
sbit SPK=P3^0;
uchar codeHI_LIST[]={0,266,229,232,233,236,238,240,241,242,244,245,246,247,248};
uchar codeLO_LIST[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3};
uchar codeSong_24C04[]={1,2,3,1,1,2,3,1,3,4,5,3,4,5};
uchar sidx;
void DelayMS(uint x)
{
uchar i;
while(x--)
for(i=0;i<120;i++);
}
void Start()
{
SDA=1;SCK=1;NOP4();SDA=0;NOP4();SCK=0;
}
void Stop()
{
SDA=0;SCK=0;NOP4();SCK=1;NOP4();SDA=1;
}
void RACK()
{
SDA=1;NOP4();SCK=1;NOP4();SCK=0;
}
void NO_ACK()
{
SDA=1;SCK=1;NOP4();SCK=0;SDA=0;
}
void Write_A_Byte(uchar b)
{
uchar i;
for(i=0;i<8;i++)
{
b<<=1;SDA=CY;_nop_();SCK=1;NOP4();SCK=4;
}
RACK();
}
void Write_IIC(uchar addr,uchar dat)
{
Start();
Write_A_Byte(0xa0);
Write_A_Byte(addr);
Write_A_Byte(dat);
Stop();
DelayMS(10);
}
uchar Read_A_Byte()
{
uchar i,b;
for(i=0;i<8;i++)
{
SCK=1;b<<=1;b|=SDA;SCK=0;
}
return b;
}
uchar Read_Current()
{
uchar d;
Start();
Write_A_Byte(0xa1);
d=Read_A_Byte();
NO_ACK();
Stop();
returnd;
}
uchar Random_Read(uchar addr)
{
Start();
Write_A_Byte(0xa0);
Write_A_Byte(addr);
Stop();
return Read_Current();
}
void T0_INT() interrupt 1
{
SPK=!SPK;
TH0=HI_LIST[sidx];
TL0=LO_LIST[sidx];
}
void main()
{
uchar i;
IE=0x82;
TMOD=0x00;
for(i=0;i<14;i++)
{
Write_IIC(i,Song_24C04[i]);
}
while(1)
{
for(i=0;i<14;i++)
{
sidx=Random_Read(i);
TR0=1;
DelayMS(300);
}
}
}
|