电路介绍:
1.此项目采用51单片机实现音乐盒的功能,同时电路中采用模拟示波器,可以实时查看波形的变动。
2.通过一个可调电阻实现音频信号的音量大小
3.基于8欧姆/1w的喇叭作为音频输出部件
proteus仿真原理图:
源代码:
#include #include #define uchar unsigned char #define uint unsigned int sbit SPK = P2^7; uchar tone_h; //高音 uchar tone_l; //低音 uint note = 1; //音符 uchar beat; //节拍 uchar code chuzhi[3][16]={ //音调对应的计数初值 0xff,0xff,//占0位 0xf8,0x8c,//低1 0xf9,0x5b,// 2 0xfa,0x15,// 3 0xfa,0x67,// 4 0xfb,0x04,// 5 0xfb,0x90,// 6 0xfc,0x0c,//低7 0xff,0xff,//占0位 0xfc,0x44,//中1 0xfc,0xac,// 2 0xfd,0x09,// 3 0xfd,0x34,// 4 0xfd,0x82,// 5 0xfd,0xc8,// 6 0xfe,0x06,//中7 0xff,0xff,//占0位 0xfe,0x22,//高1 0xfe,0x56,// 2 0xfe,0x85,// 3 0xfe,0x9a,// 4 0xfe,0xc1,// 5 0xfe,0xe4,// 6 0xff,0x03 //高7 }; //****** 测试曲谱 ****** 个位:音调 ,十位:低中高音 对应 0 1 2,千百位:节拍 1~16 uint code test2[] = { 120, //曲速 暂时未用到 401,402,403,404,405,406,407, 611,612,613,614,615,616,617, 821,822,823,824,825,826,827, 0xffff //0xffff表示结尾 }; //****** 生日快乐 ****** uint code test[] = { 120, 205,205,406,405,411,807, 205,205,406,405,412,811, 205,205,415,413,411,407,406, 314,114,413,411,413,812, 305,105,406,405,411,807, 305,105,406,405,412,811, 305,105,415,413,411, 407,406,314,114,413,411,412,811,410, 0xffff }; void delayms(uint ms) /*ms 等于1时,延时1ms 等于2时,延时2ms,以此类推*/ { uchar a,b,c; //+3 while(ms--) { for(c=1;c>0;c--) // 1+2 = 3 for(b=142;b>0;b--) // 1*( 1+142*2)) = 285 for(a=2;a>0;a--); // 142*(1+2*2) = 710 } } void delay125ms(uint pai) //延时 ?*125ms 即?个节拍 { uchar a,b,c; while(pai--) { for(c=239;c>0;c--) for(b=104;b>0;b--) for(a=1;a>0;a--); } } void timer0() interrupt 1 { TH0 = tone_h; TL0 = tone_l; SPK = ~SPK; } void timer_init() { EA = 1; ET0 = 1; PT0 = 1; TMOD = 0x11; TH0 = 255; TL0 = 255; } void main() { timer_init(); note = 1; while(1) { if(test[note] == 0xffff) { note = 1; } if(test[note]%10 != 0) //音调不为0 【音调为0时表示不发声,但有节拍】 { tone_h = TH0 = chuzhi[test[note]%100/10][(test[note]%10)*2 ]; //音调高位 【二维数组 第1维表示低中高音,第二维表示音调】 tone_l = TL0 = chuzhi[test[note]%100/10][(test[note]%10)*2 + 1]; //音调低位 TR0 = 1; } delay125ms(test[note]/100); //节拍 TR0 = 0; delayms(30); note++; //下一个音符 } }
设计资源 培训 开发板 精华推荐
- 使用 Analog Devices 的 LTC3873ETS8-5 的参考设计
- nrfmicro_E73
- 【涂鸦智能】涂鸦Zigbee温湿度传感器-471069R
- 使用 Analog Devices 的 LT1495 的参考设计
- 使用 Analog Devices 的 ADR363A 的参考设计
- LT1021DCN8-5 电压基准作为超线性铂金温度传感器的典型应用
- STEVAL-ILL067V1,基于六通道 ALED7707 的 LED 驱动器评估板,带有嵌入式升压转换器,用于汽车内部照明和 TFT 背光
- PIC(16F877A)开发板
- M41T62LC6F适配器板,用于标准DIL 24插座
- EVB-UTC2000-DFP、EVK-UTC2000 评估套件基于 UTC2000 USB 3.0/2.0 Type-A,即插即用 Type-C DFP