⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 音阶声音输出试验.c

📁 这是本人在学习51单片机时练习的C程序 lgl_5923@163.com
💻 C
字号:
/*这一课,我们不再输出简单嘀声了,而是要输出各种不同频率的音乐声。先输出基本 
的音阶,12345671为了输出准确的音阶频率,我们需要用定时器输出来控制蜂鸣器的驱动,这里用的T0。
我们再每一次定时器中断溢出时取反P17 引脚,以形成频率驱动蜂鸣器,定时器0 工 
作在16 位方式,需要在中断里重新置入初始值。这个值就决定了P17 输出的频率。我们在 
程序里先做好了一张表,预先写好了每个音阶的频率需要设置的初始值。到时调入对应的值 
进去T0,不断溢出时就P17 可以输出对应的频率。
 在这个程序里,我们自动地输出8 个音符,每个音符保持1 秒钟左右
*/
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#include <reg51.h>
sbit bibi=P1^7;
uchar th0;
uchar tl0;


uchar code TH_TL[36*2]={
     0xA9,0xEF,//00220HZ ,1     //0  0xA9为高8,0xEF低8,注意//th0=TH_TL[jie8[i]*2];//置一个音符的值 
			   //tl0=TH_TL[jie8[1]*2+1];语句的使用
     0x93,0xF0,//00233HZ ,1# 
     0x73,0xF1,//00247HZ ,2 
     0x49,0xF2,//00262HZ ,2# 
     0x07,0xF3,//00277HZ ,3 
     0xC8,0xF3,//00294HZ ,4 
     0x73,0xF4,//00311HZ ,4# 
     0x1E,0xF5,//00330HZ ,5 
     0xB6,0xF5,//00349HZ ,5# 
     0x4C,0xF6,//00370HZ ,6 
     0xD7,0xF6,//00392HZ ,6# 
     0x5A,0xF7,//00415HZ ,7 
     0xD8,0xF7,//00440HZ 1      //12 
     0x4D,0xF8,//00466HZ 1#     //13 
     0xBD,0xF8,//00494HZ 2       //14 
     0x24,0xF9,//00523HZ 2#     //15 
     0x87,0xF9,//00554HZ 3      //16 
     0xE4,0xF9,//00587HZ 4      //17 
     0x3D,0xFA,//00622HZ 4#      //18 
     0x90,0xFA,//00659HZ 5           //19 
     0xDE,0xFA,//00698HZ 5#           //20 
     0x29,0xFB,//00740HZ 6           //21 
     0x6F,0xFB,//00784HZ 6#          //22 
     0xB1,0xFB,//00831HZ 7           //23 
     0xEF,0xFB,//00880HZ `1 
     0x2A,0xFC,//00932HZ `1# 
     0x62,0xFC,//00988HZ `2 
     0x95,0xFC,//01046HZ `2# 
     0xC7,0xFC,//01109HZ `3 
     0xF6,0xFC,//01175HZ `4 
     0x22,0xFD,//01244HZ       `4# 
     0x4B,0xFD,//01318HZ `5 
     0x73,0xFD,//01397HZ `5# 
     0x98,0xFD,//01480HZ `6 
     0xBB,0xFD,//01568HZ `6# 
     0xDC,0xFD,//01661HZ `7             //35 
};



//定时中断0,用于产生唱歌频率 
		timer0() interrupt 1
		{
		TH0=th0;//调入预定时值 
		TL0=tl0;
		bibi=~bibi; //取反音乐输出IO 
		P2=~P2;
		}


//音阶声音自动输出试验 
		void main(void)
		{
		ulong n;
		uchar i;
		uchar code jie8[8]={12,14,16,17,19,21,23,24};//八个音符在频率表中的位置


		TMOD=0x01;//使用定时器0 的16 位工作模式 
		TR0=1;
        ET0 = 1;
		EA==1;
		
		while(1)
		{
		        for(i=0;i<8;i++) //循环播放8 个音符 
				  {
				  th0=TH_TL[jie8[i]*2];//置一个音符的值 
				  tl0=TH_TL[jie8[1]*2+1];
				  for(n=0;n<50000;n++);//延时1 秒左右 
				  }
		}
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -