单片机技术网|技术阅读
登录|注册

您现在的位置是:单片机技术网 > 技术阅读 > 24C02芯片仿真实例-蜂鸣器播放音乐

24C02芯片仿真实例-蜂鸣器播放音乐

1.24C02+蜂鸣器播放音乐仿Protues7.8

1)上电后,单片机循环播放音乐。


2.keil5

#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define NOP4() {_nop_();_nop_();_nop_();_nop_();}//引脚定义sbit SCL = P1^0;sbit SDA = P1^1;sbit SPK = P3^0;//定时器高字节编码uchar code HI_LIST[] ={ 0,226,229,232,233,236,238,240,241,242,245,246,247,248};
//定时器低字节编码uchar code LO_LIST[] ={ 0,4,13,10,20,3,8,6,2,23,5,26,1,4,3};
//音乐编码uchar code Song_24C04[] ={ 1,2,3,1,1,2,3,1,3,4,5,3,4,5};uchar sidx;
//延时函数void DelayMS(uint x){ uchar t; while(x--) { for(t=120;t>0;t--); }}//IIC起始位void Start(){ SDA=1;SCL=1;NOP4();SDA=0;NOP4();SCL=0;}
//IIC停止位void Stop(){ SDA=0;SCL=0;NOP4();SCL=1;NOP4();SDA=1;}
//IIC应答void RACK(){ SDA=1;NOP4();SCL=1;NOP4();SCL=0;}
void NO_ACK(){ SDA=1;SCL=1;NOP4();SCL=0;SDA=0;}
//IIC写入一个字节void Write_A_Byte(uchar b){ uchar i; for(i=0;i<8;i++) { b<<=1;SDA=CY;_nop_();SCL=1;NOP4();SCL=0; } RACK();}

//向24C04写入一个字节数据void Write_IIC(uchar addr,uchar dat){ Start(); Write_A_Byte(0xa0); //写入指令 Write_A_Byte(addr); //写入地址 Write_A_Byte(dat); //写入数据 Stop(); DelayMS(10);}//IIC读取一个字节uchar Read_A_Byte(){ uchar i,b; for(i=0;i<8;i++) { SCL=1;b<<=1;B|=SDA;SCL=0; } return b;}//向24C04读取当前一个数据uchar Read_Current(){ uchar d; Start(); Write_A_Byte(0xa1); d=Read_A_Byte(); NO_ACK(); Stop(); return d;}
//向24C04的addr地址读取一个数据uchar Random_Read(uchar addr){ Start(); Write_A_Byte(0xa0); Write_A_Byte(addr); Stop(); return Read_Current(); }
//定时器TH寄存器赋值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++) //向24C04写入音乐数据 { Write_IIC(i,Song_24C04[i]); } while(1) { for(i=0;i<14;i++) { sidx=Random_Read(i); //播放音乐 TR0=1; DelayMS(300); } }}

keil5及Protues7.8软件下载链接:

-24C02仿