上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
项目1 认识单片机及其开发环境
1.1 项目提出
1.任务
利用单片机系统播放一段音乐。
2.要求
(1)按照所给电路图连接单片机系统。
(2)将所给单片机程序调试、编译下载至单片机中,运行单片机系统。
3.播放音乐的单片机电路图
用单片机I/O口P1.7扩展蜂鸣器演奏一首曲子。
4.音乐程序
/* *********************************** 这是一首 2002年第一场雪的曲子 * ***********************************/ #include<reg51.h> /*8051单片机资源说明*/ sbit SPK=P1^7; //音乐输出口 void Delayms(unsigned char ms); //节拍延时 unsigned int data j; unsigned char code song[636]={ //歌曲数组,格式为:频率常数,节拍常数 0xFF,0xFF,4,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x5B,4, 0xFD,0x08,2,0xFC,0xAB,2, 0xFC,0x0B,2,0xFC,0x0B,2, 0xFF,0xFF,2,0xFC,0x0B,2, 0xFC,0xAB,2,0xFC,0xAB,2, 0xFC,0xAB,2,0xFC,0xAB,2, 0xFC,0xAB,4,0xFC,0xAB,2, 0xFC,0xAB,2, 0xFB,0x8F,2,0xFC,0x0B,2, 0xFC,0x0B,4,0xFF,0xFF,8, 0xFF,0xFF,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,4,0xFD,0x08,2, 0xFD,0x08,2, 0xFD,0x5B,4,0xFD,0x08,2, 0xFC,0xAB,4,0xFD,0x08,6, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x03,2,0xFA,0x14,2, 0xFC,0xAB,4,0xFC,0xAB,2, 0xFC,0xAB,2,0xFC,0xAB,2, 0xFC,0x0B,2,0xFC,0x0B,4, 0xFF,0xFF,4,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2, 0xFD,0x5B,4,0xFD,0x08,2, 0xFC,0xAB,4,0xFD,0x08,6, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x03,2,0xFA,0x14,2, 0xFC,0xAB,4,0xFC,0xAB,2, 0xFC,0xAB,2,0xFC,0xAB,2, 0xFC,0x0B,2,0xFC,0x0B,4, 0xFF,0xFF,4,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2, 0xFD,0x5B,4,0xFD,0x08,2, 0xFD,0x5B,2,0xFC,0xAB,2, 0xFC,0x0B,2,0xFC,0x0B,4, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x03,2, 0xFB,0x8F,4,0xFB,0x8F,2, 0xFB,0x03,2, 0xFC,0x0B,4,0xFB,0x8F,2, 0xFC,0x0B,2,0xFB,0x03,2, 0xFA,0x14,2,0xFA,0x14,4, 0xFF,0xFF,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x5B,4,0xFD,0x08,2, 0xFD,0x5B,2,0xFC,0xAB,2, 0xFC,0x0B,2,0xFC,0x0B,4, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x03,2,0xFA,0x14,2, 0xfc,0xab,4,0xfc,0xab,2, 0xfc,0xab,2,0xfb,0x8f,2, 0xfc,0x0b,2,0xFC,0x0B,4, 0xFF,0xFF,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,4, 0xFD,0x08,2, 0xfD,0x5b,4,0xfD,0x08,2, 0xfc,0xab,4,0xfc,0x0b,6, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x03,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x03,2, 0xFC,0x0B,4,0xFB,0x8F,2, 0xFC,0x0B,2,0xFB,0x03,2, 0xFA,0x14,2,0xFA,0x14,4, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x03,2,0xFA,0x14,2, 0xFB,0x03,2,0xFB,0x03,2, 0xFB,0x03,2,0xFA,0x14,2, 0xFA,0x14,1,0xF9,0x5B,1, 0xF8,0x2A,2,0xF8,0x2A,4, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x03,2,0xFA,0x14,2, 0xFB,0x8F,2,0xFC,0x08,2, 0xFC,0x08,2,0xFC,0x08,10, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x03,2,0xFA,0x14,2, 0xFB,0x03,2,0xFB,0x03,2, 0xFB,0x03,2,0xFA,0x14,2, 0xFA,0x14,1,0xF9,0x5B,1, 0xF8,0x2A,2,0xF8,0x2A,4, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x03,2,0xFA,0x14,2, 0xFC,0xAB,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFF,0xFF,4,0xFF,0xFF,4}; void main() { TMOD=0x01; IE=0x82; while(1) { j=0; while (j<636) { TR0=1; if ((song[j]==0xff)&&(song[j+1]==0xff)) TR0=0; //休止符用0xff,0xff表示出现休止符时CT0禁止,不发声 Delayms(song[j+2]); //每一音符唱多长 j=j+3; } } } /* 音调程序*/ void timer0()interrupt 1 using 1 //每一音符唱多高 { TH0=song[j]; TL0=song[j+1]; SPK = !SPK; } /* 节拍程序*/ void Delayms(unsigned char ms) //基本延时子程序(1/16拍的时间) { unsigned int i; while(ms--) {for(i=0;i<10300;i++); //节拍快慢控制 } TR0=0; }