《蜂鸣器 唱 两只老虎 单片机程序.doc》由会员分享,可在线阅读,更多相关《蜂鸣器 唱 两只老虎 单片机程序.doc(2页珍藏版)》请在金锄头文库上搜索。
1、#include /包含52单片机寄存器定义的头文件sbit sound=P37; /将sound位定义为P3.7unsigned int C; /储存定时器的定时常数/以下是C调中音的音频宏定义#define dao 523 /将dao宏定义为中音1的频率523Hz#define re 587 /将re宏定义为中音2的频率587Hz#define mi 659 /将mi宏定义为中音3的频率659Hz#define fa 698 /将fa宏定义为中音4的频率698Hz#define sao 784 /将sao宏定义为中音5的频率784Hz#define la 880 /将la宏定义为中音6的频
2、率880Hz#define xi 987 /将xi宏定义为中音7的频率523Hz/*函数功能:1个延时单位,延时200ms*/void delay() unsigned char i,j; for(i=0;i250;i+) for(j=0;j250;j+) ; /*函数功能:主函数*/void main(void) unsigned char i,j; /以下是两只老虎歌曲 unsigned int code f=dao,re,mi,dao, /每行对应一小节音符 dao,re,mi,dao, mi,fa,sao, mi,fa,sao, sao,la,sao,fa,mi,dao, sao,la
3、,sao,fa,mi,dao, dao,sao,dao, dao,sao,dao,0xff; /以0xff作为音符的结束标志/以下是简谱中每个音符的节拍/4对应4个延时单位,2对应2个延时单位,1对应1个延时单位 unsigned char code JP =2,2,2,2, 2,2,2,2,2,2,3,2,2,3,1,2,2,1,2,2,1,2,2,1,2,2, 2,2,2,2,2,2,; EA=1; /开总中断 ET0=1; /定时器T0中断允许 TMOD=0x00; / 使用定时器T0的模式1(13位计数器) while(1) /无限循环 i=0; /从第1个音符f0开始播放 while
4、(fi!=0xff) /只要没有读到结束标志就继续播放 C=460830/fi; TH0=(8192-C)/32; /可证明这是13位计数器TH0高8位的赋初值方法 TL0=(8192-C)%32; /可证明这是13位计数器TL0低5位的赋初值方法 TR0=1; /启动定时器T0 for(j=0;jJPi;j+) /控制节拍数 delay(); /延时1个节拍单位 TR0=0; /关闭定时器T0 i+; /播放下一个音符 /*函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频的方波*/ void Time0(void ) interrupt 1 using 1 sound=!sound; /将P3.7引脚输出电平取反,形成方波 TH0=(8192-C)/32; /可证明这是13位计数器TH0高8位的赋初值方法 TL0=(8192-C)%32; /可证明这是13位计数器TL0低5位的赋初值方法